大家寫JS的都知道,同一種效果有很多種寫法,結果可以相同但是步奏卻不同的列子比比皆是,但是雖然效果你是寫出來了,但是頁面的性能卻大大降低,現在的開發,腳本效能的提升變得越來越重要。怎樣優化自己的JavaScript程式碼?兩個點之間的直線到底要怎麼畫才最短?今天就來跟大家總結歸納一下,如何最優化的寫出自己的JavaScript程式碼。
傳統的 Web 頁面不會包含很多腳本,至少不會太影響 Web 頁面的效能。然而,Web 頁面變得越來越像應用程序,腳本對其的影響也越來越大。隨著越來越多的應用程式採用 Web 技術開發,腳本效能的提升變得越來越重要。桌面應用程式通常是用編譯器將原始碼轉換為最終的二進位。編譯器在產生最終的應用程式時,可以花費時間,盡可能地對效能進行最佳化。 Web 應用程式就不能這麼奢侈了。因為它們需要在多種瀏覽器、平台和架構上運行,所以不能完全預先編譯它們。瀏覽器會每次取到一個腳本並對其進行解釋和編譯,然而最終應用程式卻要像桌面應用程式一樣迅速載入、運行流暢。它被期望運行於大量各種各樣的設備,從普通的桌上型電腦到手機都包含在內。
瀏覽器相當擅長實現這個目標,而 Opera 擁有目前瀏覽器中最快的腳本引擎之一。不過瀏覽器也有一些限制,這正是 Web 開發者需要關注的。要確保 Web 應用程式能運行得盡可能的快,這可能只是一個簡單循環交換,改變一個合併的樣式而不是三個,或者只添加確實會運行到的腳本。
本文會展示一些能提升 Web 應用效能的改變,其範圍涉及 ECMAScript - JavaScript 的核心語言、DOM 和檔案載入。
小貼士
ECMAScript
#避免使用eval 或Function 建構器
改寫eval
如果你需要函數,使用function
不要使用with
不要在要求效能的函數中使用try-catch-finally
隔離eval 和with 的使用
盡量不用全域變量
注意物件的隱式換
在要求效能的函數中避免使用for-in
使用累加形式連接字串
基本運算比呼叫函數更快
為setTimeout() 和setInterval() 傳入函數而不是字串
#DOM
重繪和重排
將重排數量降到最低
最小重排
修改文件樹
修改不可見的元素
測量
一次改變多項樣式
平滑度換速度
避免擷取大量節點
透過XPath 提升速度
避免在遍歷DOM 的時候進行修改
在腳本中以變數快取DOM 的值
文件載入
避免在多個文件間保持同一個參考
快速歷史導覽
使用XMLHttpRequest
動態建立