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

首頁 > 開發(fā) > JS > 正文

優(yōu)化JavaScript腳本的性能的幾個注意事項

2024-09-06 12:44:11
字體:
供稿:網(wǎng)友
隨著網(wǎng)絡(luò)的發(fā)展,網(wǎng)速和機(jī)器速度的提高,越來越多的網(wǎng)站用到了豐富客戶端技術(shù)。而現(xiàn)在Ajax則是最為流行的一種方式。JavaScript是一種解釋型語言,所以能無法達(dá)到和C/Java之類的水平,限制了它能在客戶端所做的事情,為了能改進(jìn)他的性能,我想基于我以前給JavaScript做過的很多測試來談?wù)勛约旱慕?jīng)驗,希望能幫助大家改進(jìn)自己的JavaScript腳本性能。

語言層次方面
循環(huán)
循環(huán)是很常用的一個控制結(jié)構(gòu),大部分東西要依靠它來完成,在JavaScript中,我們可以使用for(;;),while(),for(in)三種循環(huán),事實上,這三種循環(huán)中for(in)的效率極差,因為他需要查詢散列鍵,只要可以就應(yīng)該盡量少用。for(;;)和while循環(huán)的性能應(yīng)該說基本(平時使用時)等價。

而事實上,如何使用這兩個循環(huán),則有很大講究。我在測試中有些很有意思的情況,見附錄。最后得出的結(jié)論是:

如果是循環(huán)變量遞增或遞減,不要單獨(dú)對循環(huán)變量賦值,應(yīng)該在它最后一次讀取的時候使用嵌套的++或—操作符。

如果要與數(shù)組的長度作比較,應(yīng)該事先把數(shù)組的length屬性放入一個局部變量中,減少查詢次數(shù)。

局部變量和全局變量
局部變量的速度要比全局變量的訪問速度更快,因為全局變量其實是全局對象的成員,而局部變量是放在函數(shù)的棧當(dāng)中的。

不使用Eval
使用eval相當(dāng)于在運(yùn)行時再次調(diào)用解釋引擎對內(nèi)容進(jìn)行運(yùn)行,需要消耗大量時間。這時候使用JavaScript所支持的閉包可以實現(xiàn)函數(shù)模版(關(guān)于閉包的內(nèi)容請參考函數(shù)式編程的有關(guān)內(nèi)容)

減少對象查找
因為JavaScript的解釋性,所以a.b.c.d.e,需要進(jìn)行至少4次查詢操作,先檢查a再檢查a中的b,再檢查b中的c,如此往下。所以如果這樣的表達(dá)式重復(fù)出現(xiàn),只要可能,應(yīng)該盡量少出現(xiàn)這樣的表達(dá)式,可以利用局部變量,把它放入一個臨時的地方進(jìn)行查詢。

這一點可以和循環(huán)結(jié)合起來,因為我們常常要根據(jù)字符串、數(shù)組的長度進(jìn)行循環(huán),而通常這個長度是不變的,比如每次查詢a.length,就要額外進(jìn)行一個操作,而預(yù)先把var len=a.length,則就少了一次查詢。

字符串連接
如果是追加字符串,最好使用s+=anotherStr操作,而不是要使用s=s+anotherStr。

如果要連接多個字符串,應(yīng)該少使用+=,如

s+=a;s+=b;s+=c;
應(yīng)該寫成

s+=a + b + c;
而如果是收集字符串,比如多次對同一個字符串進(jìn)行+=操作的話,最好使用一個緩存。怎么用呢?使用JavaScript數(shù)組來收集,最后使用join方法連接起來,如下

var buf = new Array();for(var i = 0; i < 100; i++){ buf.push(i.toString());}var all = buf.join("");
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 荣昌县| 商南县| 许昌市| 洮南市| 绥阳县| 北碚区| 三都| 礼泉县| 炎陵县| 邵阳市| 花莲县| 泗水县| 长宁区| 洪湖市| 什邡市| 平阳县| 西平县| 蒙山县| 梅河口市| 浙江省| 平顺县| 邯郸市| 余姚市| 廉江市| 集贤县| 五指山市| 嘉定区| 湛江市| 余干县| 靖江市| 敖汉旗| 瑞金市| 新宾| 玉树县| 襄汾县| 鄄城县| 兴安盟| 科尔| 抚远县| 镇原县| 镇原县|