亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

實現高性能javascript的注意事項有哪些

發布時間:2021-07-07 11:37:54 來源:億速云 閱讀:132 作者:小新 欄目:web開發

這篇文章主要介紹實現高性能javascript的注意事項有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

1.少用全局變量

原因:因為作用域鏈是一個堆棧的結構,所以遵循先進先出的原則,而javascript引擎在解析代碼的時候,將全局對象放在棧底,然后向上依次出現的是不同作用域的活動對象(這些活動對象除了閉包沒有相互依賴的關系),所以在查找變量的時候會從該活動對象開始,然后是閉包它的活動對象,最后是全局對象,如果全局變量過多就會影響獲得變量時的速度,所以不要過多使用全局變量。

2.盡量使用局部變量封裝全局變量

原因:正如前面所說,活動對象在棧的頂端,所以最先查找它的內容,當我們將document封裝成局部變量后就會減少深層次查找的次數,使性能提高。

3.操作數組長度、對象屬性時,盡量使用局部變量封裝。

原因:IE、opera存取數組比對象屬性快,而FF chrome safari正好相反,所以兼顧這些,我們最好封裝一下。

4.盡量減少對象屬性的深度

原因:深度太大,會增加javascript引擎對取得值的地址查找的開銷,相當于增加了多層嵌套的指針,導致性能損失。

5.在for循環中盡量使用局部變量封裝條件項

原因:例如for(var i=0;i<divs.length;i++) 的時候,如果divs為document.getElementsByTagName('div'),這樣在每次循環判斷條件的時候都會對DOM文檔進行一次遍歷求得長度,所以講length封裝起來,會提升性能。

6.謹慎的處理HTMLcollection對象(比如childNodes getElementsByTagName等取得DOM元素集合的對象),最好將其封裝到數組里操作。

原因:還是因為操作DOM元素需要遍歷DOM文檔,而非DOM元素則不用遍歷,所以請盡量減少對DOM的操作,而將DOM集合放到數組中去。

7.在針對safari瀏覽器的開發過程中,請盡量使用“.”獲取對象屬性而不是用“[]”。

8.建議在少于兩次判斷的環境下使用if-else,而大于三次的就用switch吧。而超過10次的時候,還是使用數組或json對象來通過索引來查找吧(這種模式相對簡單)

9.如果循環數組的順序從低到高或從高到低沒有差別,那么還是從高到低比較好,比如我們循環輸出一個數組中的內容:

var arr=[1,2,3,4,5];
var i=0;
while(i<arr.length){
alert(arr[i]);
}//這樣開銷會比較大,因為每次都要遍歷求出數組元素的長度
//----------------------------------
var i=arr.length;
while(i--){
alert(arr[i]);
}//使用局部變量保存數組長度,然后該變量自減,連while中的判斷都省了,因為0轉換為布爾值就是false。

10.盡量少使用for-in循環,將其盡量改造成while 或for循環。

11.處理大數組時,請遵循duff策略。

duff策略:將大數組的個數拆分成8個一組,對這8個為一個單位的數組的操作不用循環處理,而是不怕繁瑣的寫出8行處理數組元素的代碼,這樣會提升大數組操作的性能。

12.用函數處理大數組的每個元素時,盡量使用定時器將每次操作掛起,時間設定在50-100ms比較合理

原因:如果簡單的用循環來處理數組中的每個元素,如果是大數組,會造成頁面的凍結和假死,給用戶不好的體驗,而用setTimeout,就會把每次操作都暫時掛起,讓javascript引擎有其他的時間去處理隊列中的其他函數,有效的防止了凍結和假死,而在設定的延遲時間之后,有可能javascript引擎是空閑的狀態,可以更好的處理這些數組操作。相當于虛擬了一個后臺操作。下面是zakas提出的解決方案:

function chunk(array,func,context){
setTimeout(function(){
var arr=array.shift();
func.call(context,item);
if(array.length>0){
setTimeout(arguments.callee,100);//遞歸循環這個過程 arguments.callee為chunk這個函數對象
}
},100);
}

13.在使用iframe的時候注意window onload的阻塞

原因:iframe的加載會對window onload進行阻塞,導致有些window unload事件中加載的代碼在用戶關掉頁面的時候可能不被執行,所以需要我們最好在window onload時間發生時動態為iframe設定src屬性。

PS:能不用iframe就不用。

14.CSS選擇符的優化

原因:CSS選擇符的讀取方式為從右至左,所以在寫的時候盡可能右邊規則詳細,而且盡量少用子選擇符合后代選擇符標簽選擇符。

以上是“實現高性能javascript的注意事項有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

万山特区| 印江| 宜兰市| 含山县| 吴忠市| 固安县| 洪洞县| 沽源县| 林甸县| 金山区| 阿合奇县| 柞水县| 大渡口区| 叙永县| 洞头县| 武川县| 临洮县| 砀山县| 濮阳市| 师宗县| 葫芦岛市| 平江县| 马尔康县| 皋兰县| 安福县| 余江县| 潢川县| 夏邑县| 泗阳县| 无棣县| 乌拉特后旗| 井研县| 广水市| 卢湾区| 武夷山市| 万盛区| 云霄县| 驻马店市| 那曲县| 海城市| 托克逊县|