国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Web性能優(yōu)化系列 10個提升JavaScript性能的技巧

2024-05-06 15:09:09
字體:
供稿:網(wǎng)友

Nicholas Zakas是一位 JS 大師,Yahoo! 首頁的前端主程。他是《高性能 Javascript》的作者,這本書值得每個程序員去閱讀。

當談到 JS 性能的時候,Zakas差不多就是你要找的,2010年六月他在Google Tech Talk發(fā)表了名為《Speed Up Your Javascript》的演講。

但 Javascript 性能優(yōu)化絕不是一種書面的技術(shù),Nicholas 的技術(shù)演進列出了10條建議,幫助你寫出高效的 JS 代碼。

1. 定義局部變量

當一個變量被引用的時候,JavaScript將在作用域鏈中的不同成員中查找這個變量。作用域鏈指的是當前作用于下可用變量的集合,它在各種主流瀏覽器中至少包含兩個部分:局部變量的集合和全局變量的集合。

簡單地說,如果JavaScript引擎在作用域鏈中搜索的深度越大,那么操作也就會消耗更多的時間。引擎首先從 this 開始查找局部變量,然后是函數(shù)參數(shù)、本地定義的變量,最后遍歷所有的全局變量。

因為局部變量在這條鏈的起端,所以查找局部變量總是比查找全局變量要塊。所以當你想要不止一次地使用一個全局變量的時候,你應(yīng)該將它定義成局部變量,就像這樣:

var blah = document.getElementById('myID'),blah2 = document.getElementById('myID2');

改寫成

var doc = document,blah = doc.getElementById('myID'),blah2 = doc.getElementById('myID2');

2. 不要使用 with() 語句

這是因為 with() 語句將會在作用域鏈的開始添加額外的變量。額外的變量意味著,當任何變量需要被訪問的時候,JavaScript引擎都需要先掃描with()語句產(chǎn)生的變量,然后才是局部變量,最后是全局變量。
So with() essentially gives local variables all the performance drawbacks of global ones, and in turn derails Javascript optimization. 因此with()語句同時給局部變量和全局變量的性能帶來負面影響,最終使我們優(yōu)化JavaScript性能的計劃破產(chǎn)。

3. 小心使用閉包

雖然你可能還不知道“閉包”,但你可能在不經(jīng)意間經(jīng)常使用這項技術(shù)。閉包基本上被認為是JavaScript中的new,當我們定義一個即時函數(shù)的時候,我們就使用了閉包,比如:

 document.getElementById('foo').onclick = function(ev) { };

閉包的問題在于:根據(jù)定義,在它們的作用域鏈中至少有三個對象:閉包變量、局部變量和全局變量。這些額外的對象將會導(dǎo)致第1和第2個建議中提到的性能問題。

但是我認為Nicholas并不是要我們因噎廢食,閉包對于提高代碼可讀性等方面還是非常有用的,只是不要濫用它們(尤其在循環(huán)中)。

4. 對象屬性和數(shù)組元素的速度都比變量慢

談到JavaScript的數(shù)據(jù),一般來說有4種訪問方式:數(shù)值、變量、對象屬性和數(shù)組元素。在考慮優(yōu)化時,數(shù)值和變量的性能差不多,并且速度顯著優(yōu)于對象屬性和數(shù)組元素。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 湘阴县| 竹山县| 阿克苏市| 柳州市| 衡阳市| 漳浦县| 聂拉木县| 泽州县| 东光县| 峡江县| 上蔡县| 凤冈县| 宜宾市| 中山市| 阜南县| 若羌县| 密云县| 应城市| 大同市| 凌云县| 疏勒县| 克山县| 安阳县| 和硕县| 双柏县| 黎平县| 嘉鱼县| 墨竹工卡县| 贵州省| 根河市| 安康市| 北川| 平昌县| 金川县| 手游| 新干县| 鄂托克旗| 双桥区| 灯塔市| 桦南县| 青海省|