有效提升JavaScript執行效率的幾點知識_javascript技巧
為了提供新鮮、別緻的使用者體驗,許多網站都會使用 JavaScript 來改善設計、驗證表單、檢查瀏覽器,以及Ajax請求,cookie操作等等,實現無刷新動態效果 。但是,要將大量內容在瀏覽器中呈現,如果處理不好,網站效能將會急劇下降。所以我們有必要了解下,如何提升JavaScript的執行效率。
JavaScript 函數
在JavaScript 中,函數在使用前會預先編譯。儘管有些時候下可以使用字串取代函數,但每次執行這段JavaScript 程式碼時都會重新解析,影響效能。
1、eval例子
eval('output=(input * input)');
// 建議改成:
eval(new function() { output=(input * input)});
2、setTimeout範例
setTimeout("alert(1)", 1000);
// 建議改成:
setTimeout(function(){alert(1)}, 1000);
使用函數取代字串作參數確保新方法中的程式碼能被 JavaScript 編譯器最佳化。
JavaScript作用域
JavaScript作用域鏈中的每個作用域都包含幾個變數。理解作用域鏈很重要,這樣才能利用它。
var localVar = "global"; //全域變數
function test() {
var localVar = "local"; //局部變數
//局部變數
alert(localVar);
//全域變數
alert(this.localVar);
//找document在局部變數找不到,就找全域變數
var pageName = document.getElementById("pageName");
}
使用局部變數比使用全域變數快得多,因為在作用域鏈中越遠,解析越慢。下圖顯示了作用域鏈結構:
如果程式碼中有 with 或 try-catch 語句,作用域鏈會比較複雜,如下圖:
JavaScript字串
JavaScript中一個非常影響效能的函數是字串連接,一般情況都是使用 號來實作拼接字串。但是早期瀏覽器並沒有對這樣的連接方式做最佳化,導致在連續建立和銷毀字串嚴重降低JavaScript執行效率。
var txt = "hello" " " "world";
建議改成:
var o = [];
o.push("hello");
o.push(" ");
o.push("world");
var txt = o.join();
我們再簡單封裝一下:
function StringBuffer(str) {
var arr = [];
arr.push(str || "");
this.append = function(str) {
arr.push(str);
return this;
};
this.toString = function() {
return arr.join("");
};
};
然後這樣子呼叫:
var txt = new StringBuffer();
txt.append("Hello");
txt.append(" ");
txt.append("World");
alert(txt.toString());
JavaScript DOM操作
HTML Document Object Model (DOM) 定義了存取和操作 HTML 文件的標準方法。它將 HTML 文件表示成節點樹,其中包含元素、屬性和文字內容。透過使用 HTML DOM,JavaScript 能存取 HTML 文件中所有節點並操作它們。
DOM重繪
每次修改到頁面的DOM對象,都涉及DOM重繪,瀏覽器都會重新渲染頁面。所以降低DOM物件的修改次數,可以有效提升JavaScript 的效能。
for (var i = 0; i var elmt = document.createElement('p');
elmt.innerHTML = i;
document.body.appendChild(elmt);
}
建議改成:
var html = [];
for (var i = 0; i html.push('
' i '
');}
document.body.innerHTML = html.join('');
DOM訪問
透過DOM可以存取到HTML文件中的每個節點。每次呼叫getElementById()、getElementsByTagName()等方法,都會重新尋找並存取節點。所以將查找到的DOM節點快取一下,也可以提升JavaScript 的效能。
document.getElementById("p2").style.color = "blue";
document.getElementById("p2").style.fontFamily = "Arial";
document.getElementById("p2").style.fontSize = "larger";
建議改成:
var elmt = document.getElementById("p2");
elmt.style.color = "blue";
elmt.style.fontFamily = "Arial";
elmt.style.fontSize = "larger";
DOM遍歷
DOM遍歷子元素通常都是以索引循環讀取下一個子元素,在早期瀏覽器下這種讀取方式執行效率很低,利用nextSibling方式可以提高js遍歷DOM的效率。
var html = [];
var x = document.getElementsByTagName("p");//所有節點
for (var i = 0; i //todo
}
建議改成:
var html = [];
var x = document.getElementById("div");//上級節點
var node = x.firstChild;
while(node != null){
//todo
node = node.nextSibling;
}
JavaScript 記憶體釋放
在web應用程式中,隨著DOM物件數量的增加,記憶體消耗會越來越大。所以應及時釋放物件的引用,讓瀏覽器回收這些記憶體。
釋放DOM佔用的記憶體
document.getElementById("test").innerHTML = "";
將DOM元素的innerHTML設定為空字串,可以釋放其子元素所佔用的記憶體。
釋放javascript物件
//物件:
obj = null
//物件屬性:
delete obj.property
//陣列元素:
arr.splice(0,3);//刪除前3個元素

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript中的HTTP狀態碼取得方法簡介:在進行前端開發中,我們常常需要處理與後端介面的交互,而HTTP狀態碼就是其中非常重要的一部分。了解並取得HTTP狀態碼有助於我們更好地處理介面傳回的資料。本文將介紹使用JavaScript取得HTTP狀態碼的方法,並提供具體程式碼範例。一、什麼是HTTP狀態碼HTTP狀態碼是指當瀏覽器向伺服器發起請求時,服務
