客戶端js性能優(yōu)化小技巧整理
更新時間:2013年11月05日 16:11:18 作者:
說起javascript無人不知無人不曉吧,下面是一些關于客戶端JS性能的一些優(yōu)化的小技巧,希望對大家有所幫助
下面是一些關于客戶端JS性能的一些優(yōu)化的小技巧:
1. 關于JS的循環(huán),循環(huán)是一種常用的流程控制。JS提供了三種循環(huán):for(;;)、while()、for(in)。在這三種循環(huán)中 for(in)的效率最差,因為它需要查詢Hash鍵,因此應盡量少用for(in)循環(huán),for(;;)、while()循環(huán)的性能基本持平。當然,推薦使用for循環(huán),如果循環(huán)變量遞增或遞減,不要單獨對循環(huán)變量賦值,而應該使用嵌套的++或--運算符。
2. 如果需要遍歷數(shù)組,應該先緩存數(shù)組長度var len=arr.length; for(i=0;i<len;i++),將數(shù)組長度放入局部變量中,避免多次查詢數(shù)組長度。
3. 局部變量的訪問速度要比全局變量的訪問速度更快,因為全局變量其實是window對象的成員,而局部變量是放在函數(shù)的棧里的。
4. 盡量少使用eval,每次使用eval需要消耗大量時間,特別是在循環(huán)內(nèi),json[i][變量]=1;這樣的語句可以不使用eval。
5. 盡量避免對象的嵌套查詢,對于obj1.obj2.obj3.obj4這個語句,需要進行至少3次查詢操作,先檢查obj1中是否包含 obj2,再檢查obj2中是否包含obj3,然后檢查obj3中是否包含obj4...這不是一個好策略。應該盡量利用局部變量,將obj4以局部變量 保存,從而避免嵌套查詢。
6. 使運算符時,盡量使用+=,-=、*=、\=等運算符號,而不是直接進行賦值運算。
7. 當需要將數(shù)字轉換成字符時,采用如下方式:"" + 1。從性能上來看,將數(shù)字轉換成字符時,有如下公式:("" +) > String() > .toString() > new String()。String()屬于內(nèi)部函數(shù),所以速度很快。而.toString()要查詢原型中的函數(shù),所以速度遜色一些,new String()需要重新創(chuàng)建一個字符串對象,速度最慢。
8. 當需要將浮點數(shù)轉換成整型時,應該使用Math.floor()或者Math.round()。而不是使用parseInt(),該方法用于將字符串轉換成數(shù)字。而且Math是內(nèi)部對象,所以Math.floor()其實并沒有多少查詢方法和調(diào)用時間,速度是最快的。
9.盡量作用JSON格式來創(chuàng)建對象,而不是var obj=new Object()方法。因為前者是直接復制,而后者需要調(diào)用構造器,因而前者的性能更好。
10.當需要使用數(shù)組時,也盡量使用JSON格式的語法,即直接使用如下語法定義數(shù)組:[parrm,param,param...],而不是采用 new Array(parrm,param,param...)這種語法。因為使用JSON格式的語法是引擎直接解釋的。而后者則需要調(diào)用Array的構造器。
11. 對字符串進行循環(huán)操作,例如替換、查找,就使用正則表達式。因為JS的循環(huán)速度比較慢,而正則表達式的操作是用C寫成的API,性能比較好。
最后有一個基本原則,對于大的JS對象,因為創(chuàng)建時時間和空間的開銷都比較大,因此應該盡量考慮采用緩存。
1. 關于JS的循環(huán),循環(huán)是一種常用的流程控制。JS提供了三種循環(huán):for(;;)、while()、for(in)。在這三種循環(huán)中 for(in)的效率最差,因為它需要查詢Hash鍵,因此應盡量少用for(in)循環(huán),for(;;)、while()循環(huán)的性能基本持平。當然,推薦使用for循環(huán),如果循環(huán)變量遞增或遞減,不要單獨對循環(huán)變量賦值,而應該使用嵌套的++或--運算符。
2. 如果需要遍歷數(shù)組,應該先緩存數(shù)組長度var len=arr.length; for(i=0;i<len;i++),將數(shù)組長度放入局部變量中,避免多次查詢數(shù)組長度。
3. 局部變量的訪問速度要比全局變量的訪問速度更快,因為全局變量其實是window對象的成員,而局部變量是放在函數(shù)的棧里的。
4. 盡量少使用eval,每次使用eval需要消耗大量時間,特別是在循環(huán)內(nèi),json[i][變量]=1;這樣的語句可以不使用eval。
5. 盡量避免對象的嵌套查詢,對于obj1.obj2.obj3.obj4這個語句,需要進行至少3次查詢操作,先檢查obj1中是否包含 obj2,再檢查obj2中是否包含obj3,然后檢查obj3中是否包含obj4...這不是一個好策略。應該盡量利用局部變量,將obj4以局部變量 保存,從而避免嵌套查詢。
6. 使運算符時,盡量使用+=,-=、*=、\=等運算符號,而不是直接進行賦值運算。
7. 當需要將數(shù)字轉換成字符時,采用如下方式:"" + 1。從性能上來看,將數(shù)字轉換成字符時,有如下公式:("" +) > String() > .toString() > new String()。String()屬于內(nèi)部函數(shù),所以速度很快。而.toString()要查詢原型中的函數(shù),所以速度遜色一些,new String()需要重新創(chuàng)建一個字符串對象,速度最慢。
8. 當需要將浮點數(shù)轉換成整型時,應該使用Math.floor()或者Math.round()。而不是使用parseInt(),該方法用于將字符串轉換成數(shù)字。而且Math是內(nèi)部對象,所以Math.floor()其實并沒有多少查詢方法和調(diào)用時間,速度是最快的。
9.盡量作用JSON格式來創(chuàng)建對象,而不是var obj=new Object()方法。因為前者是直接復制,而后者需要調(diào)用構造器,因而前者的性能更好。
10.當需要使用數(shù)組時,也盡量使用JSON格式的語法,即直接使用如下語法定義數(shù)組:[parrm,param,param...],而不是采用 new Array(parrm,param,param...)這種語法。因為使用JSON格式的語法是引擎直接解釋的。而后者則需要調(diào)用Array的構造器。
11. 對字符串進行循環(huán)操作,例如替換、查找,就使用正則表達式。因為JS的循環(huán)速度比較慢,而正則表達式的操作是用C寫成的API,性能比較好。
最后有一個基本原則,對于大的JS對象,因為創(chuàng)建時時間和空間的開銷都比較大,因此應該盡量考慮采用緩存。
相關文章
nest.js 使用express需要提供多個靜態(tài)目錄的操作方法
這篇文章主要介紹了nest.js 使用express需要提供多個靜態(tài)目錄的操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10JS?getRandomValues和Math.random方法深入解析
這篇文章主要為大家介紹了JS?getRandomValues和Math.random方法深入詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04關于javascript document.createDocumentFragment()
documentFragment 是一個無父對象的document對象.2009-04-04JS關于for循環(huán)中使用setTimeout的四種解決方案
這篇文章主要介紹了JS關于for循環(huán)中使用setTimeout的四種解決方案,想深入了解JS的同學,一定要看下2021-05-05