如何加速JavaScript 代碼運行速度
- 前言
- 減少DOM訪問
- 避免不必要的變量
- 延遲script加載
- 異步和同步
- 使用異步編程
- 避免使用With關鍵詞
前言
本文主要通過五個方面來講解如何使Js代碼得到性能優化,從而實現加快Js代碼運行速度的作用。那么好,本文正式開始。
減少DOM訪問
減少DOM訪問的意思就是如果說,我們要多次調用一個DOM節點使用,那么可以把這個DOM節點定義到一個變量中下次直接調用這個變量即可,這樣就可以減少DOM節點的調用,多次調用DOM節點會影響性能,因為它會從HTML文檔結構渲染樹中找到對應的DOM節點,代碼如下:
var obj;
obj = document.getElementById("demo");
obj.innerHTML = "Hello";
可以使用這種方式,只訪問一次DOM節點,下次直接訪問變量。
避免不必要的變量
能不定義全局變量就不定義全局變量,因為全局變量有內存冗余和內存泄漏的風險,全局變量只有等頁面被關閉才會被釋放。
<body><div id="a"></div><div id="b"></div><script>var a = document.getElementById('a')var b=document.getElementById('b')let hello='hello'let world='world'a.innerHTML=hello+''+worldlet hellos='hellos'let worlds='world'let ans=hellos+''+worldsb.innerHTML=ans</script>
</body>
在上述代碼中,有一個DOMa和DOMb我們做了innerHTML操作,DOM用了ans變量作為中間值,但這個中間值不是必要的,而且這個中間值ans只用了一次,所以我們可以不通過中間值,直接賦值a的HTML結構中。
延遲script加載
把script放在頁面底部,使得頁面先于sript被加載,或者放在頂部,在script標簽中加上defer或async標簽,defer標簽的意思是指在瀏覽器中先按HTML順序下載,但是等頁面加載完后才加載這些js,async也是類似,不同的是async是異步加載。
defer:同步屬性,先下載js文件,然后渲染HTML,最后渲染js文件,按照順序。
async:異步屬性,先解析HTMl,但當js下載完成后會停止HTML解析,執行腳本,解析腳本后才繼續渲染HTML。
異步和同步
同步是指按順序加載,而異步是指不按順序加載。兩者都能加載完,只不過加載的方式不同,如果我們某個js文件需要依托另一個文件的內容調用,需要用同步,否則同步異步都可以。
使用異步編程
使用異步編程可以很好的解決js可能造成的阻塞問題,因為js是單線程的語言,所以它對于同步代碼會按順序處理,那同時因為它的運行機制,可以利用事件循環來進行解決,大體就是先執行同步任務,再執行異步任務。也就是說,當執行完所有的同步任務后,才會執行異步任務,異步任務又分為宏任務和微任務,先執行微任務,后執行宏任務,所以說,在特定情況下,多使用異步編程會解決頁面阻塞問題。
避免使用With關鍵詞
避免使用 with 關鍵詞。它對速度有負面影響。它也將混淆 JavaScript 作用域。
嚴格模式中不允許 with 關鍵詞。