搜尋
首頁web前端js教程利用函數的惰性載入提高javascript程式碼執行效率_javascript技巧

在 javascript 程式碼中,因為各瀏覽器之間的行為的差異,我們經常在函數中包含了大量的 if 語句,以檢查瀏覽器特性,解決不同瀏覽器的兼容問題。 例如,我們最常見的為dom 節點新增事件的函數:

複製程式碼 程式碼如下:

function addEvent (type, element, fun) {
if (element.addEventListener) {
element.addEventListener(type, fun, false);
}
else if(element. {
element.attachEvent('on' type, fun);
}
else{
element['on' type] = fun;
}
}

每次呼叫addEvent 函數的時候,它都要對瀏覽器所支援的能力進行檢查,首先檢查是否支援addEventListener 方法,如果不支持,再檢查是否支援attachEvent 方法,如果還不支持,就用dom 0 級的方法加入事件。 這個過程,在addEvent 函數每次調用的時候都要走一遍,其實,如果瀏覽器支援其中的一種方法,那麼他就會一直支持了,就沒有必要再進行其他分支的檢測了, 也就是說,if 語句不必每次都執行,程式碼可以運行的更快一些。

解決的方案就是稱為惰性載入的技巧。

所謂惰性載入,就是說函數的if分支只會執行一次,之後呼叫函數時,直接進入所支援的分支程式碼。 有兩種實現惰性載入的方式,第一種事函數在第一次呼叫時,對函數本身進行二次處理,該函數會被覆寫為符合分支條件的函數,這樣對原函數的呼叫就不用再經過執行的分支了, 我們可以用下面的方式使用惰性載入重寫addEvent()。
複製程式碼 程式碼如下:

function addEvent (type, elellement >if (element.addEventListener) {
addEvent = function (type, element, fun) {
element.addEventListener(type, fun, false);
}
}
else if( element.attachEvent){
addEvent = function (type, element, fun) {
element.attachEvent('on' type, fun);
}
}
else{
addEvent = function (type, element, fun) {
element['on' type] = fun;
}
}
return addEvent(type, element, fun);
}

在這個惰性載入的addEvent() 中,if 語句的每個分支都會為addEvent 變數賦值,有效覆寫了原始函數。 最後一步便是呼叫了新賦函數。下次呼叫 addEvent() 的時候,就會直接呼叫新賦值的函數,這樣就不用再執行if 語句了。

第二種實作惰性載入的方式是在宣告函數時就指定適當的函數。 這樣在第一次呼叫函數時就不會損失效能了,只在程式碼載入時會損失一點效能。 一下就是按照這一思路重寫的 addEvent()。

複製程式碼 程式碼如下:
var addEvent = (function () {
if (document.addEventListener) {
return function (type, element, fun) {
element.addEventListener(type, fun, false);
}
}
else if (document. ) {
return function (type, element, fun) {
element.attachEvent('on' type, fun);
}
}
else {
return function (type , element, fun) {
element['on' type] = fun;
}
}
})();

這個例子所使用的技巧是創建一個匿名的自執行函數,透過不同的分支以確定應該使用那個函數實現,實際的邏輯都一樣, 不一樣的地方就是使用了函數表達式(使用了var 定義函數)和新增了一個匿名函數,另外每個分支都傳回一個正確的函數,並立即將其賦值給變數addEvent。

惰性載入函數的優點只執行一次if 分支,避免了函數每次執行時候都要執行if 分支和不必要的程式碼,因此提升了程式碼效能,至於那種方式更合適,就要看您的需求而定了。
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript數據類型:瀏覽器和nodejs之間是否有區別?JavaScript數據類型:瀏覽器和nodejs之間是否有區別?May 14, 2025 am 12:15 AM

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScript評論:使用//和 / * * / * / * /JavaScript評論:使用//和 / * * / * / * /May 13, 2025 pm 03:49 PM

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python vs. JavaScript:開發人員的比較分析Python vs. JavaScript:開發人員的比較分析May 09, 2025 am 12:22 AM

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

Python vs. JavaScript:選擇合適的工具Python vs. JavaScript:選擇合適的工具May 08, 2025 am 12:10 AM

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript:了解每個的優勢Python和JavaScript:了解每個的優勢May 06, 2025 am 12:15 AM

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

JavaScript的核心:它是在C還是C上構建的?JavaScript的核心:它是在C還是C上構建的?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript應用程序:從前端到後端JavaScript應用程序:從前端到後端May 04, 2025 am 12:12 AM

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

Python vs. JavaScript:您應該學到哪種語言?Python vs. JavaScript:您應該學到哪種語言?May 03, 2025 am 12:10 AM

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!