在 ASP.NET 專案開發中,樹狀列表是常見的 UI 元件。近期發現有專案採用名為 dtree 的樹狀列表組件,但在資料量稍大時載入速度明顯緩慢,甚至導致 IE 瀏覽器彈出「指令碼執行過久」的提示。這正是本文探討的起點。正如毛主席所言:「做事要發現問題、分析問題、解決問題。」我們已發現既有控件效能不佳的問題,接著便要深入分析其根本成因。
透過程式碼分析,dtree 生成樹狀列表的流程如下圖所示:
具體步驟為:
document.write 或設定 innerHTML 將 HTML 填入頁面呈現。其他同類樹狀列表控件的運作邏輯大同小異。
依據上述流程,我們逐一排查各環節耗時:
StringBuilder 優化字串拼接,只要演算法邏輯合理,速度有保障。結論:伺服器端內部處理並無明顯效能問題。
傳輸耗時 = JavaScript 字串長度 ÷ 網路頻寬。若系統運行於高速區域網,此環節非主要問題;但若部署於廣域網或 Internet,龐大的腳本字串將嚴重拖慢首屏載入。本文案例系統主要部署於區域網,故網路傳輸非核心瓶頸。
此為最關鍵的效能殺手:
StringBuilder 的優化機制。此步驟由瀏覽器內核原生處理,外部程式無法干預,且速度尚可接受,無優化空間。
綜上分析,整個渲染鏈路中 「客戶端 JavaScript 拼接 HTML 字串」 為首要優化目標,其次為「伺服器到客戶端的資料傳輸量」。新一代高效能樹狀列表控件的設計核心,便圍繞解決這兩大痛點展開。