摘要:在執行環境的作用域鏈扯到作用域鏈就一定會扯到閉包問題,以后有空再仔細聊聊閉包中,一個標識符所在的位置越深,它的讀寫速度也就越慢。搜索該對象的過程必須要遍歷整個作用域鏈,直到最后在全局變量對象中找到。這樣就產生了更大的性能開銷。
(條友們如果覺得我寫的不錯點擊上面關注我一下吧,小編會有更加精彩的技術文章)
標識符(通常指命名)的解析是有代價的,實際上沒有那種計算機操作可以不產生性能開銷。在執行環境的作用域鏈(扯到作用域鏈就一定會扯到閉包問題,以后有空再仔細聊聊閉包)中,一個標識符所在的位置越深,它的讀寫速度也就越慢。也就是說函數中讀寫局部變量總是最快的,而讀寫全局變量總是最慢的。因為全局變量總是在執行環境作用域的末端。所以這就是我們常在某些書上或者老師給我們說盡量少使用全局變量的原因之一。
綜上所述,在沒有優化的JavaScript引擎的瀏覽器中,建議盡可能的少使用全局變量。這里有一個重要的原則:如果某個跨作用域的值(下面例子用document)在某個函數中被引用了二次或多次以上,那么就應該把它存儲在局部變量之中。
考慮下面的例子:
bad的例子
上面的函數引用了三次document,而document是個全局對象。搜索該對象的過程必須要遍歷整個作用域鏈,直到最后在全局變量對象中找到。這樣就產生了更大的性能開銷。
下面看看這樣重寫的函數:
Good的例子
Fun1函數首先將document對象的引用存儲在局部變量doc中,這樣就訪問全局變量的次數就減少到了一次。由于doc是個局部變量,因此通過它訪問document會更快。當然了,就這一個函數你也許感受不到性能上的提升。但可以想象一下一個大型項目中當有幾十個或者上百個全部變量被反復訪問的時候,那么性能上的提升一定是顯著的。
本文由甲爪日付廣告聯盟(www.jiazhua.com)整理編輯!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82930.html
摘要:當被創建時,它的作用域鏈初始化為當前運行函數的屬性中的對象,這些值按照他們出現在函數中的順序,被復制到執行環境的作用域鏈中。然后這個對象被推入作用域鏈最前端。 在計算機科學中,數據存儲的位置關系到代碼執行過程中數據的檢索速度,有一個經典的問題即為:通過改變數據的存儲位置來獲得最佳的讀寫性能。 Javascript中四種基本的數據存儲位置 字面量字面量只代表自身,不存儲在特定的位置。...
摘要:對于直接量和局部變量的訪問性能差異微不足道,性能消耗代價高一些的是全局變量數組項對象成員。當一個函數被創建后,作用域鏈中被放入可訪問的對象。同樣會改變作用域鏈,帶來性能問題。 早前閱讀高性能JavaScript一書所做筆記。 一、Loading and Execution 加載和運行 從加載和運行角度優化,源于JavaScript運行會阻塞UI更新,JavaScript腳本的下載、解析...
摘要:對于直接量和局部變量的訪問性能差異微不足道,性能消耗代價高一些的是全局變量數組項對象成員。當一個函數被創建后,作用域鏈中被放入可訪問的對象。同樣會改變作用域鏈,帶來性能問題。 早前閱讀高性能JavaScript一書所做筆記。 一、Loading and Execution 加載和運行 從加載和運行角度優化,源于JavaScript運行會阻塞UI更新,JavaScript腳本的下載、解析...
摘要:每一個運行期上下文都和一個作用域鏈關聯。這個對象將被推入作用域鏈的頭部,這意味著函數的所有局部變量現在處于第二個作用域鏈對象中,因此訪問代價更高了。在代碼塊內部,函數的所有局部變量將會被放在第二個作用域鏈對象中。 參考: Javascript作用域原理 理解 JavaScript 作用域和作用域鏈 JavaScript 作用域 作用域就是變量與函數的可訪問范圍,即作用域控制著變量與函數...
摘要:當執行上下文被創建時,它的作用域鏈初始化為當前運行函數的屬性中的對象。該過程搜索執行環境的作用域鏈,查找同名的標識符。搜索實例成員比從字面量或局部變量中讀取數據代價更高,再加上遍歷原型鏈帶來的開銷,這讓性能問題更為嚴重。 最近在閱讀這本Nicholas C.Zakas(javascript高級程序設計作者)寫的最佳實踐、性能優化類的書。記錄下主要知識。 加載和執行 腳本位置 放在中的...
閱讀 3669·2021-11-23 09:51
閱讀 1661·2021-10-22 09:53
閱讀 1345·2021-10-09 09:56
閱讀 853·2019-08-30 13:47
閱讀 2155·2019-08-30 12:55
閱讀 1597·2019-08-30 12:46
閱讀 1105·2019-08-30 10:51
閱讀 2410·2019-08-29 12:43