當前位置

首頁 > 教育範文 > 心得體會 > JavaScript的優化心得體會

JavaScript的優化心得體會

推薦人: 來源: 閱讀: 3.12W 次

性能對任何編程語言或系統來說都是一個很重要的問題,對JavaScript來說更是如此。

JavaScript的優化心得體會

● JavaScript代碼是從服務器原封不動地發送到客戶端的,代碼越大,下載所需的時間和帶寬越多。

● JavaScript在瀏覽器中解釋,而不是編譯好的。

● JavaScript代碼通過DOM API修改HTML頁面來與用戶交互。對JavaScript開發人員來說,這是功能強大的高級模型,但對DOM所做的每個簡單修改都將導致瀏覽器的頁面 渲染引擎執行一系列複雜的操作。對DOM看似細微的修改常常導致需要佔用比預期的多得多的CPU週期。

諸如Gmail和基於Ajax的Yahoo! Mail(編寫本書時仍處於測試階段)等Web應用程序都對JavaScript性能提出了挑戰。大量的人力被投入到這些Web應用程序中,它們在最新的 計算機中可能運行順暢,但在較舊的計算機中可能反應遲鈍,而在這些舊計算機中運行相應的桌面應用程序沒有任何問題。

  在下一小節中將介紹在JavaScript中最常見的兩個性能問題的解決方案。

3.2.1 縮短JavaScript的下載時間

大多數編程語言要麼是編譯型的,要麼在代碼安裝的計算機中運行,或兩者兼而有之。例如,使用諸如Python、PHP或Perl等腳本語言 時,代碼在執行前不需要通過網絡傳輸,而在本地運行。諸如Java等其他語言的代碼被編譯成二進制文件,可在執行前通過網絡傳輸。考慮到這種情況,採用了 大量措施以使二進制格式更加緊湊。

JavaScript不屬於上述任何一種情況,其源代碼及用到的庫將被瀏覽器按原樣下載。因此,JavaScript代碼的總體大小以及如何 將代碼打包爲文件對頁面性能的影響巨大,這在剛開始編碼時可能無關緊要,但隨着編寫的代碼和使用的庫越來越多,很快將導致下載頁面使用的 JavaScript代碼時需要相當長的時間。

  爲最大限度地縮短下載時間,應這樣做:

● 除非每個頁面有不同的JavaScript,否則不要直接將JavaScript代碼放在HTML中,而在HTML中引用JavaScript文件。如果一定要在頁面中包含JavaScript,這樣的代碼不能太長。

● 減少在頁面中包含的JavaScript文件數。不需要走極端,將所有代碼放到一個文件中。包含不超過5個文件是可行的,但如果包含超過20個文件就要三 思而行。這些數字只是象徵性的,如果這是個問題,應進行測試看看在單個頁面中使用多少文件將影響網站的性能。

● 減少使用的庫。如果使用大量不同來源的庫,它們的有些代碼很可能是重複的。例如,每個庫都可能包含處理DOM事件的代碼,這是一種浪費,因爲這些代碼可以 共享。選擇一個能夠解決大量問題且模塊化的庫,這樣可只包含所需的子集。使用來自一個主要庫的代碼還有其他好處:將減少依賴關係,從而降低不兼容的可能 性;升級到新版本更容易;通常來說,大型庫將獲得更大社區的支持,因此更新更頻繁,新特性更多。本章後面的內容將更詳細地介紹JavaScript庫。

  很多庫都會發布其代碼的兩個版本:完整版和精簡版。

● 完整版適合用於閱讀和修改庫的代碼。它包含縮進和註釋,對開發人員來說可讀性更高。

● 精簡版適合用於部署網站。這種版本是基於完整版自動創建的:刪除了註釋和縮進;通常所有代碼位於一行中;有時候不暴露的變量被重命名爲很短(而晦澀)的名稱。

部署網站時,務必使用精簡版。根據自己編寫的代碼長度,可能要使用工具創建JavaScript文件的精簡版。這樣的工具有很多,其中包括開源(GPL)的ECMAScript Cruncher(ESC)。

  3.2.2 最大限度地減少DOM更新

爲完成任何有趣的工作,代碼必須修改DOM。然而,修改DOM的開銷非常高。顯然,爲處理修改頁面內容的DOM API調用,瀏覽器必須做大量工作。更令人驚訝的是,調用不修改頁面的方法(如註冊)可能非常慢。

另外,請注意遍歷大量DOM對象的代碼,如遍歷以查找特定元素的代碼或document. getElementByName()。這些代碼的執行時間將隨頁面的增大而增長。