javascript指令碼的效能優化
隨著網路的發展,網速和機器速度的提高,越來越多的網站用到了豐富客戶端技術。而現在Ajax則是最為流行的一種方式。JavaScript是一種解釋型語言,所以能無法達到和C/Java之類的水平,限制了它能在客戶端所做的事情,為了能改進他的效能,我想基於我以前給JavaScript做過的很多測試來談談自己的經驗,希望能幫助大家改進自己的JavaScript指令碼效能。
語言層次方面 而事實上,如何使用這兩個迴圈,則有很大講究。我在測試中有些很有意思的情況,見附錄。最後得出的結論是: 如果是迴圈變數遞增或遞減,不要單獨對迴圈變數賦值,應該在它最後一次讀取的時候使用巢狀的++或—操作符。 如果要與陣列的長度作比較,應該事先把陣列的length屬性放入一個區域性變數中,減少查詢次數。
區域性變數和全域性變數
不使用Eval
減少物件查詢 這一點可以和迴圈結合起來,因為我們常常要根據字串、陣列的長度進行迴圈,而通常這個長度是不變的,比如每次查詢a.length,就要額外進行一個操作,而預先把var len=a.length,則就少了一次查詢。
字串連線 如果要連線多個字串,應該少使用+=,如
s+=a;s+=b;s+=c;
s+=a + b + c;
var buf = new Array();for(var i = 0; i < 100; i++){ buf.push(i.toString());}var all = buf.join(""); 1. 把數字轉換成字串,應用"" + 1,雖然看起來比較醜一點,但事實上這個效率是最高的,效能上來說: ("" +) > String() > .toString() > new String() 這條其實和下面的“直接量”有點類似,儘量使用編譯時就能使用的內部操作要比執行時使用的使用者操作要快。 String()屬於內部函式,所以速度很快,而.toString()要查詢原型中的函式,所以速度遜色一些,new String()用於返回一個精確的副本。 2. 浮點數轉換成整型,這個更容易出錯,很多人喜歡使用parseInt(),其實parseInt()是用於將字串轉換成數字,而不是浮點數和整型之間的轉換,我們應該使用Math.floor()或者Math.round()。 另外,和第二節的物件查詢中的問題不一樣,Math是內部物件,所以Math.floor()其實並沒有多少查詢方法和呼叫的時間,速度是最快的。 3. 對於自定義的物件,如果定義了toString()方法來進行型別轉換的話,推薦顯式呼叫toString(),因為內部的操作在嘗試所有可能性之後,會嘗試物件的toString()方法嘗試能否轉化為String,所以直接呼叫這個方法效率會更高
使用直接量 同樣,var foo = {}的方式也比var foo = new Object();快,var reg = /../;要比var reg=new RegExp()快。
字串遍歷操作
高階物件
DOM相關
物件查詢
建立DOM節點 無法保證程式碼的有效性 字串操作效率低 所以應該是用document.createElement()方法,而如果文件中存在現成的樣板節點,應該是用cloneNode()方法,因為使用createElement()方法之後,你需要設定多次元素的屬性,使用cloneNode()則可以減少屬性的設定次數——同樣如果需要建立很多元素,應該先準備一個樣板節點。
定時器
其他
檔案優化
總結 直接拿手頭現成的東西比較快,如區域性變數比全域性變數快,直接量比執行時構造物件快等等。 儘可能少地減少執行次數,比如先快取需要多次查詢的。 儘可能使用語言內建的功能,比如串連結。 儘可能使用系統提供的API,因為這些API是編譯好的二進位制程式碼,執行效率很高 同時,一些基本的演算法上的優化,同樣可以用在JavaScript中,比如運算結構的調整,這裡就不再贅述了。但是由於JavaScript是解釋型的,一般不會在執行時對位元組碼進行優化,所以這些優化仍然是很重要的。 當然,其實這裡的一些技巧同樣使用在其他的一些解釋型語言中,大家也可以進行參考。 |
相關文章
- 淺談JavaScript程式碼效能優化JavaScript優化
- JavaScript 程式碼效能優化總結JavaScript優化
- javascript效能優化JavaScript優化
- Javascript 效能優化JavaScript優化
- 淺談JavaScript程式碼效能優化2JavaScript優化
- javascript效能優化(7)JavaScript優化
- javascript效能優化(8)JavaScript優化
- javascript效能優化(9)JavaScript優化
- javascript效能優化(10)JavaScript優化
- javascript程式碼效能優化簡單介紹JavaScript優化
- 前端效能優化JavaScript篇前端優化JavaScript
- JavaScript 操作DOM效能優化JavaScript優化
- JavaScript 效能優化技巧分享JavaScript優化
- JavaScript 效能優化殺手JavaScript優化
- 【介面/效能】python05-指令碼優化及HTMLTestRunnerPython指令碼優化HTML
- 前端效能優化(三)——傳統 JavaScript 優化的誤區前端優化JavaScript
- javascript效能優化技巧介紹JavaScript優化
- Web效能優化系列:10個JavaScript效能提升的技巧Web優化JavaScript
- javaScript程式碼優化JavaScript優化
- JavaScript 效能優化的小知識總結JavaScript優化
- JavaScript 的效能優化:載入和執行JavaScript優化
- JavaScript的效能優化:載入和執行JavaScript優化
- 幾個 JavaScript 效能優化小 TipJavaScript優化
- 【效能優化】sqlplus中使用指令碼生成awr報告優化SQL指令碼
- JavaScript 的效能優化:程式碼載入和執行模式淺析JavaScript優化模式
- Android效能優化——程式碼優化(一)Android優化
- iOS程式碼效能優化iOS優化
- 高效能Javascript:指令碼的無阻塞載入策略JavaScript指令碼
- JavaScript 前端效能優化之事件節流JavaScript前端優化事件
- JavaScript 前端效能優化之事件防抖JavaScript前端優化事件
- JavaScript效能優化小知識總結JavaScript優化
- JavaScript資料訪問效能優化方案JavaScript優化
- JavaScript無阻塞載入效能優化方案JavaScript優化
- 【前端效能優化】高效能JavaScript讀書筆記前端優化JavaScript筆記
- Python 程式碼的效能優化之道Python優化
- 【前端效能優化】vue效能優化前端優化Vue
- linux系統優化指令碼Linux優化指令碼
- Web 效能優化:理解及使用 JavaScript 快取Web優化JavaScript快取