摘要:對(duì)比內(nèi)部使用引擎,處理各種選擇器。引擎的選擇順序是從右到左,所以這條語句是先選,然后再一個(gè)個(gè)過濾出父元素,這導(dǎo)致它比最快的形式大約慢。這條語句與上一條是同樣的情況。
使用最新版本
因?yàn)樾掳姹緯?huì)改進(jìn)性能,還有很多新功能
用對(duì)選擇器最快的選擇器:id選擇器和元素標(biāo)簽選擇器
原因:遇到這些選擇器的時(shí)候,jQuery內(nèi)部會(huì)自動(dòng)調(diào)用瀏覽器的原生方法(比如getElementById()),所以它們的執(zhí)行速度快
較慢的選擇器:class選擇器
$(".className")的性能,取決于不同的瀏覽器。
Firefox、Safari、Chrome、Opera瀏覽器,都有原生方法getElementByClassName(),所以速度并不慢。但是,IE5-IE8都沒有部署這個(gè)方法,所以這個(gè)選擇器在IE中會(huì)相當(dāng)慢。
最慢的選擇器:偽類選擇器和屬性選擇器
原因:瀏覽器沒有針對(duì)的原生方法
優(yōu)化點(diǎn)
給選擇器指定上下文
$(".class");//慢的,需要遍歷整個(gè)dom去查找.class $(".class", "#class-container");//快的,因?yàn)樗鼉H在class-container元素下查找最快的查找子元素方法
$parent.find(".child")
這條是最快的語句。.find()方法會(huì)調(diào)用瀏覽器的原生方法(getElementById,getElementByName,getElementByTagName等等),所以速度較快。
對(duì)比:
$("#parent > .child")
jQuery內(nèi)部使用Sizzle引擎,處理各種選擇器。Sizzle引擎的選擇順序是從右到左,所以這條語句是先選.child,然后再一個(gè)個(gè)過濾出父元素#parent,這導(dǎo)致它比最快的形式大約慢70%。
$("#parent .child")
這條語句與上一條是同樣的情況。但是,上一條只選擇直接的子元素,這一條可以于選擇多級(jí)子元素,所以它的速度更慢,大概比最快的形式慢了77%。有原生方法可以使用的場(chǎng)合,盡量避免使用jQuery 做好緩存 使用鏈?zhǔn)綄懛?/b> 事件的委托處理(Event Delegation) 少改動(dòng)DOM結(jié)構(gòu)
如果要插入多個(gè)元素,就先把它們合并,然后再一次性插入
// 更好的,array.join("")
如果你要對(duì)一個(gè)DOM元素進(jìn)行大量處理,應(yīng)該先用.detach()方法,把這個(gè)元素從DOM中取出來,處理完畢以后,再重新插回文檔
如果你要在DOM元素上儲(chǔ)存數(shù)據(jù),不要寫成下面這樣:
var elem = $("#elem"); elem.data(key,value);
而要寫成
var elem = $("#elem"); $.data(elem[0],key,value);
根據(jù)測(cè)試,后一種寫法要比前一種寫法,快了將近10倍。因?yàn)?b>elem.data()方法是定義在jQuery函數(shù)的prototype對(duì)象上面的,而$.data()方法是定義jQuery函數(shù)上面的,調(diào)用的時(shí)候不從復(fù)雜的jQuery對(duì)象上調(diào)用,所以速度快得多。(此處可以參閱下面第10點(diǎn)。)
插入html代碼的時(shí)候,使用瀏覽器原生的innerHTML
正確處理循環(huán)javascript原生循環(huán)方法for和while,要比jQuery的.each()方法快,應(yīng)該優(yōu)先使用原生方法。
AJAX避免使用.getJson() 或 .get(),而是直接使用$.ajax()方法
不要使用http或https請(qǐng)求,寧愿選擇無模式的URLs,從url中去掉http或https
不要在url中加參數(shù),用data對(duì)象傳遞它們。
參考資料阮一峰老師的博客
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/86433.html
摘要:目前插件已超過幾千種,由來自世界各地的開發(fā)者共同編寫驗(yàn)證和完善。而對(duì)于開發(fā)者而言,直接使用這些插件將快速穩(wěn)定架構(gòu)系統(tǒng),節(jié)約項(xiàng)目成本。也就是說,插件也是代碼,通過文件引入的方式植入即可?,F(xiàn)在我們就完成了一個(gè)下拉菜單的插件。 插件(Plugin)也成為 jQuery 擴(kuò)展(Extension),是一種遵循一定規(guī)范的應(yīng)用程序接口編寫出來的程序。目前 jQuery 插件已超過幾千種,由來自世界...
摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...
摘要:原文閱讀工程結(jié)構(gòu)最佳實(shí)踐組件化按照功能劃分按照組件劃分層次化不要在中寫太多業(yè)務(wù)邏輯,專注層業(yè)務(wù)層要單獨(dú)抽出數(shù)據(jù)庫(kù)層單獨(dú)抽出化把常用組件做成包分離的和配置化環(huán)境感知根據(jù)不同環(huán)境使用不同配置 showImg(https://segmentfault.com/img/bVYQsC?w=2558&h=817); 原文閱讀: nodebestpractices 1 工程結(jié)構(gòu)最佳實(shí)踐 1.1 組件...
摘要:前言月份開始出沒社區(qū),現(xiàn)在差不多月了,按照工作的說法,就是差不多過了三個(gè)月的試用期,準(zhǔn)備轉(zhuǎn)正了一般來說,差不多到了轉(zhuǎn)正的時(shí)候,會(huì)進(jìn)行總結(jié)或者分享會(huì)議那么今天我就把看過的一些學(xué)習(xí)資源主要是博客,博文推薦分享給大家。 1.前言 6月份開始出沒社區(qū),現(xiàn)在差不多9月了,按照工作的說法,就是差不多過了三個(gè)月的試用期,準(zhǔn)備轉(zhuǎn)正了!一般來說,差不多到了轉(zhuǎn)正的時(shí)候,會(huì)進(jìn)行總結(jié)或者分享會(huì)議!那么今天我就...
閱讀 3980·2021-11-16 11:44
閱讀 5238·2021-10-09 09:54
閱讀 2039·2019-08-30 15:44
閱讀 1695·2019-08-29 17:22
閱讀 2768·2019-08-29 14:11
閱讀 3403·2019-08-26 13:25
閱讀 2334·2019-08-26 11:55
閱讀 1604·2019-08-26 10:37