资讯专栏INFORMATION COLUMN

jquery最佳实践笔记

leanxi / 903人阅读

摘要:对比内部使用引擎,处理各种选择器。引擎的选择顺序是从右到左,所以这条语句是先选,然后再一个个过滤出父元素,这导致它比最快的形式大约慢。这条语句与上一条是同样的情况。

使用最新版本

因为新版本会改进性能,还有很多新功能

用对选择器

最快的选择器:id选择器和元素标签选择器
原因:遇到这些选择器的时候,jQuery内部会自动调用浏览器的原生方法(比如getElementById()),所以它们的执行速度快

较慢的选择器:class选择器
$(".className")的性能,取决于不同的浏览器。

Firefox、Safari、Chrome、Opera浏览器,都有原生方法getElementByClassName(),所以速度并不慢。但是,IE5-IE8都没有部署这个方法,所以这个选择器在IE中会相当慢。

最慢的选择器:伪类选择器和属性选择器
原因:浏览器没有针对的原生方法

优化点
给选择器指定上下文

$(".class");//慢的,需要遍历整个dom去查找.class
$(".class", "#class-container");//快的,因为它仅在class-container元素下查找

最快的查找子元素方法

$parent.find(".child")
这条是最快的语句。.find()方法会调用浏览器的原生方法(getElementById,getElementByName,getElementByTagName等等),所以速度较快。

对比:
$("#parent > .child")

jQuery内部使用Sizzle引擎,处理各种选择器。Sizzle引擎的选择顺序是从右到左,所以这条语句是先选.child,然后再一个个过滤出父元素#parent,这导致它比最快的形式大约慢70%。    

$("#parent .child")

这条语句与上一条是同样的情况。但是,上一条只选择直接的子元素,这一条可以于选择多级子元素,所以它的速度更慢,大概比最快的形式慢了77%。

有原生方法可以使用的场合,尽量避免使用jQuery 做好缓存 使用链式写法 事件的委托处理(Event Delegation) 少改动DOM结构

如果要插入多个元素,就先把它们合并,然后再一次性插入
// 更好的,array.join("")

如果你要对一个DOM元素进行大量处理,应该先用.detach()方法,把这个元素从DOM中取出来,处理完毕以后,再重新插回文档

如果你要在DOM元素上储存数据,不要写成下面这样:

var elem = $("#elem");
elem.data(key,value);

而要写成

var elem = $("#elem");
$.data(elem[0],key,value);

根据测试,后一种写法要比前一种写法,快了将近10倍。因为elem.data()方法是定义在jQuery函数的prototype对象上面的,而$.data()方法是定义jQuery函数上面的,调用的时候不从复杂的jQuery对象上调用,所以速度快得多。(此处可以参阅下面第10点。)

插入html代码的时候,使用浏览器原生的innerHTML

正确处理循环

javascript原生循环方法for和while,要比jQuery的.each()方法快,应该优先使用原生方法。

AJAX

避免使用.getJson() 或 .get(),而是直接使用$.ajax()方法

不要使用http或https请求,宁愿选择无模式的URLs,从url中去掉http或https

不要在url中加参数,用data对象传递它们。

参考资料

阮一峰老师的博客

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/86433.html

相关文章

  • jQuery入门笔记之(七)插件

    摘要:目前插件已超过几千种,由来自世界各地的开发者共同编写验证和完善。而对于开发者而言,直接使用这些插件将快速稳定架构系统,节约项目成本。也就是说,插件也是代码,通过文件引入的方式植入即可。现在我们就完成了一个下拉菜单的插件。 插件(Plugin)也成为 jQuery 扩展(Extension),是一种遵循一定规范的应用程序接口编写出来的程序。目前 jQuery 插件已超过几千种,由来自世界...

    defcon 评论0 收藏0
  • 前端资源系列(4)-前端学习资源分享&前端面试资源汇总

    摘要:特意对前端学习资源做一个汇总,方便自己学习查阅参考,和好友们共同进步。 特意对前端学习资源做一个汇总,方便自己学习查阅参考,和好友们共同进步。 本以为自己收藏的站点多,可以很快搞定,没想到一入汇总深似海。还有很多不足&遗漏的地方,欢迎补充。有错误的地方,还请斧正... 托管: welcome to git,欢迎交流,感谢star 有好友反应和斧正,会及时更新,平时业务工作时也会不定期更...

    princekin 评论0 收藏0
  • 笔记: node最佳实践1 - 项目工程最佳实践

    摘要:原文阅读工程结构最佳实践组件化按照功能划分按照组件划分层次化不要在中写太多业务逻辑,专注层业务层要单独抽出数据库层单独抽出化把常用组件做成包分离的和配置化环境感知根据不同环境使用不同配置 showImg(https://segmentfault.com/img/bVYQsC?w=2558&h=817); 原文阅读: nodebestpractices 1 工程结构最佳实践 1.1 组件...

    APICloud 评论0 收藏0
  • 个人分享--web前端学习资源分享

    摘要:前言月份开始出没社区,现在差不多月了,按照工作的说法,就是差不多过了三个月的试用期,准备转正了一般来说,差不多到了转正的时候,会进行总结或者分享会议那么今天我就把看过的一些学习资源主要是博客,博文推荐分享给大家。 1.前言 6月份开始出没社区,现在差不多9月了,按照工作的说法,就是差不多过了三个月的试用期,准备转正了!一般来说,差不多到了转正的时候,会进行总结或者分享会议!那么今天我就...

    sherlock221 评论0 收藏0

发表评论

0条评论

leanxi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<