最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

高效率JavaScript編寫技巧整理

 更新時(shí)間:2013年08月23日 18:11:06   作者:  
最近在編寫一個(gè)JavaScript框架,發(fā)現(xiàn)有很多細(xì)節(jié)注意得不夠,于是開始關(guān)注JavaScript提高效率的一些技巧,在這里分享給大家,感興趣的你可以參考下
最近在編寫一個(gè)JavaScript框架,發(fā)現(xiàn)有很多細(xì)節(jié)注意得不夠,擔(dān)心長時(shí)間積累會(huì)導(dǎo)致框架實(shí)際應(yīng)用的時(shí)候出現(xiàn)嚴(yán)重的效率問題。于是開始關(guān)注JavaScript提高效率的一些技巧,在這里分享給大家。

1.JavaScript是唯一一個(gè)對代碼體積要求越小越好的語言,因此我們可以通過一些工具來精簡和壓縮JavaScript代碼,如JSMin、Packer、YUICompressor等。這些工具會(huì)將局部變量的名字替換成很短的變量名,例如將parseFloat()替換成a()。因此我們在編寫JavaScript代碼時(shí),應(yīng)將每一個(gè)全局變量都映射到一個(gè)局部變量,如var parseFloat = parseFloat;

2.通過JSLint來檢測你編寫的JavaScript,可以發(fā)現(xiàn)里面隱藏的很多問題。JSLint是一個(gè)JavaScript驗(yàn)證工具(非開源),可以掃描JavaScript源代碼來查找問題。如果JSLint發(fā)現(xiàn)一 個(gè)問題,JSLint就會(huì)顯示描述這個(gè)問題的消息,并指出錯(cuò)誤在源代碼中的大致位置。

3.我們在寫JavaScript的時(shí)候經(jīng)常需要遍歷一個(gè)數(shù)組,代碼如下:
復(fù)制代碼 代碼如下:

for (var i=0;i<array.length;i++){
//do something
}

JavaScript的成員變量是運(yùn)行時(shí)確定的,這就導(dǎo)致每一次循環(huán)都需要查找數(shù)組length屬性,因此我們可以增加一個(gè)變量來存儲(chǔ)數(shù)組大小:
復(fù)制代碼 代碼如下:

var l = array.length;
for (var i=0;i<l;i++){
//do something
}

這樣看起來已經(jīng)優(yōu)化得不錯(cuò)了,但實(shí)際上我們可以做得更好:
復(fù)制代碼 代碼如下:

var i=array.length;
while(i--){
//do something
}

這是因?yàn)檫@兩行代碼轉(zhuǎn)換成匯編時(shí),while語句所需的指令更少,在這里就不展開說明了,大家有興趣可以去研究下匯編。

4.由于JavaScript中任何人都可以修改或添加Object.prototype中的屬性,因此我們在遍歷一個(gè)對象的屬性時(shí),應(yīng)先使用hasOwnProperty進(jìn)行判斷,避免遍歷整個(gè)原型鏈,影響效率。如:
復(fù)制代碼 代碼如下:

for (var key in obj) {
if (obj.hasOwnProperty(key)) {
//do something
}
}

5.在使用undefined的時(shí)候先定義一個(gè)局部變量undefined
復(fù)制代碼 代碼如下:

var checkVal = function(val) {
var undefined;
return val !== undefined;
};

上述代碼中,如果沒有提前定義局部變量,直接使用全局變量undefined進(jìn)行判斷,如果第三方在別的地方定義了一個(gè)全局變量undefined=3將導(dǎo)致結(jié)果錯(cuò)誤。

6.在將一個(gè)非字符串類型的變量轉(zhuǎn)換成字符串類型時(shí),可以直接使用
復(fù)制代碼 代碼如下:

var str = (i + "").replace(...);

這個(gè)地方如果使用String(i)會(huì)慢很多。

7.定義數(shù)組的時(shí)候如果不需要使用數(shù)組類的排序等方法,只是進(jìn)行一般的賦值和訪問,應(yīng)該直接寫
復(fù)制代碼 代碼如下:

var array = {};

而不是
復(fù)制代碼 代碼如下:

var array = new Array();

否則這就和定義一個(gè)數(shù)字變量時(shí)寫var i = new Number(1)一樣沒有意義

8.使用jQuery時(shí),對同一個(gè)對象執(zhí)行多個(gè)函數(shù)盡量放在同一行代碼里,例如:
復(fù)制代碼 代碼如下:

$("p.neat").addClass("ohmy").show("slow");

而不是
復(fù)制代碼 代碼如下:

$("p.neat").addClass("ohmy");
$("p.neat").show("slow");

其余的技巧還有使用DocumentFragment優(yōu)化多次append,使用firstChild和nextSibling代替childNodes遍歷dom元素等。
具體大家可以參考這篇博客:http://www.nowamagic.net/librarys/veda/detail/363
本文還參考了這篇文章:http://www.cnblogs.com/justinw/archive/2009/12/07/1618500.html

相關(guān)文章

最新評論

洪洞县| 鄂温| 北海市| 郸城县| 永寿县| 桦南县| 南丰县| 化州市| 岳池县| 息烽县| 海原县| 两当县| 宝坻区| 西乌| 峨眉山市| 固安县| 股票| 嘉义县| 玉龙| 饶平县| 闽侯县| 长岭县| 中宁县| 来安县| 绥化市| 深圳市| 浏阳市| 土默特左旗| 翁牛特旗| 库尔勒市| 格尔木市| 京山县| 河间市| 荣昌县| 甘南县| 浪卡子县| 曲靖市| 兴安盟| 靖安县| 宾川县| 伊春市|