JQuery性能优化的几点建议


Posted in Javascript onMay 14, 2014

针对jquery性能优化这个主题,想必大家都有所了解。下面是我搜集点一点资料关于jquery性能优化,大家可以参考参考。

一、选择器性能优化建议

 1. 总是从#id选择器来继承:这是jQuery选择器的一条黄金法则。jQuery选择一个元素最快的方法就是用ID来选择了;

 2. 在class前面使用tag:jQuery中第二快的选择器就是tag选择器(如$(‘head')),因为它和直接来自于原生的Javascript方法getElementByTagName()。所以最好总是用tag来修饰class(并且不要忘了就近的ID);

 3. 使用子查询:将父对象缓存起来以备将来的使用;

 4. 采用find(),而不使用上下文查找;

 5. 利用强大的链式操作:采用jQuery的链式操作比缓存选择器更有效;

二、优化DOM操作建议

 1.缓存jQuery对象: 将你经常用的元素缓存起来;

 2. 当要进行DOM插入时,将所有元素封装成一个元素:

这里的基本思想是在内存中建立你确实想要的东西,然后更新DOM。这并不是一个jQuery最佳实践,但必须进行有效的JavaScript操作 。直接的DOM操作速度很慢

直接的DOM操作很慢。尽可能少的去更改HTML结构。

 3.使用直接函数,而不要使用与与之等同的函数:为了获得更好的性能,你应该使用直接函数如$.ajax(),而不要使用$.get(),$.getJSON(),$.post(),因为后面的几个将会调用$.ajax()。

 4. 缓存jQuery结果,以备后来使用:

你经常会获得一个javasript应用对象——你可以用App.来保存你经常选择的对象,以备将来使用;

三、关于优化事件性能的建议

 1.推迟到$(window).load:

有时候采用$(window).load()比$(document).ready()更快,因为后者不等所有的DOM元素都下载完之前执行。你应该在使用它之前测试它。

 2.使用Event Delegation:

当你在一个容器中有许多节点,你想对所有的节点都绑定一个事件,delegation很适合这样的应用场景。使用Delegation,我们仅需要在父级绑定事件,然后查看哪个子节点(目标节点)触发了事件。当你有一个很多数据的table的时候,你想对td节点设置事件,这就变得很方便。先获得 table,然后为所有的td节点设置delegation事件

四、其他常用jQuery性能优化建议

1. 使用最新版本的jQuery

最新的版本往往是最好的。更换了版本后,不要忘记测试你的代码。有时候也不是完全向后兼容的。

2. 使用HMTL5

新的HTML5标准带来的是更轻巧的DOM结构。更轻巧的结构意味着使用jQuery需要更少的遍历,以及更优良的载入性能。所以如果可能的话请使用HTML5。

3. 如果给15个以上的元素加样式时,直接给DOM元素添加style标签

要给少数的元素加样式,最好的方法就是使用jQuey的css()函数。然而更15个以上的较多的元素添加样式时,直接给DOM添加style 标签更有效些。这个方法可以避免在代码中使用硬编码(hard code)。

    4. 避免载入多余的代码

将Javascript代码放在不同的文件中是个好的方法,仅在需要的时候载入它们。这样你不会载入不必要的代码和选择器。也便于管理代码。

5. 压缩成一个主JS文件,将下载次数保持到最少

当你已经确定了哪些文件是应该被载入的,那么将它们打包成一个文件。用一些开源的工具可以自动帮你完成,如使用Minify(和你的后端代码集成)或者使用JSCompressor,YUI Compressor 或 Dean Edwards JS packer等在线工具可以为你压缩文件。我最喜欢的是JSCompressor。

6. 需要的时候使用原生的Javasript

使用jQuery是个很棒的事情,但是不要忘了它也是Javascript的一个框架。所以你可以在jQuery代码有必要的时候也使用原生的Javascript函数,这样能获得更好的性能。

7. 从Google载入jQuery框架

当你的应用正式上线的时候,请从Google CDN载入jQuery,因为用户可以从最近的地方获取代码。这样你可以减少服务器请求,而用户如果浏览其他网站,而它也使用Google CDN的jQuery时,浏览器就会立即从缓存中调出jQuery代码。

Javascript 相关文章推荐
JavaScript 继承机制的实现(待续)
May 18 Javascript
jquery表单对象属性过滤选择器实例分析
May 18 Javascript
JS获取鼠标选中的文字
Aug 10 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
Sep 17 Javascript
jQuery如何跳转到另一个网页 就这么简单
Dec 28 Javascript
通过命令行生成vue项目框架的方法
Jul 12 Javascript
使用OPENLAYERS3实现点选的方法
Sep 24 Javascript
通过命令行创建vue项目的方法
Jul 20 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
Nov 22 Javascript
jQuery实现获取选中复选框的值实例详解
Jun 28 jQuery
angular2 ng2-file-upload上传示例代码
Aug 23 Javascript
vue.js watch经常失效的场景与解决方案
Jan 07 Vue.js
js 通过html()及text()方法获取并设置p标签的显示值
May 14 #Javascript
JQuery教学之性能优化
May 14 #Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
May 14 #Javascript
javascript 中that的含义示例介绍
May 14 #Javascript
table insertRow、deleteRow定义和用法总结
May 14 #Javascript
jQuery 中国省市两级联动选择附图
May 14 #Javascript
全面兼容的javascript时间格式化函数(比较实用)
May 14 #Javascript
You might like
php下过滤HTML代码的函数
2007/12/10 PHP
在PHP中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
php下检测字符串是否是utf8编码的代码
2008/06/28 PHP
使用PHP生成PDF方法详解
2015/01/23 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
thinkPHP实现签到功能的方法
2017/03/15 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
JS 自定义函数缺省值的设置方法
2010/05/05 Javascript
javascript 兼容所有浏览器的DOM扩展功能
2012/08/01 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
2013/09/10 Javascript
详解JS函数重载
2014/12/04 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
JS修改地址栏参数实例代码
2016/06/14 Javascript
JavaScript实现通过select标签跳转网页的方法
2016/09/29 Javascript
微信小程序 开发经验整理
2017/02/15 Javascript
layer弹出层中H5播放器全屏出错的解决方法
2017/02/21 Javascript
React Form组件的实现封装杂谈
2018/05/07 Javascript
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
初学python数组的处理代码
2011/01/04 Python
深入讨论Python函数的参数的默认值所引发的问题的原因
2015/03/30 Python
Python中的with...as用法介绍
2015/05/28 Python
Python判断变量名是否合法的方法示例
2019/01/28 Python
python队列Queue的详解
2019/05/10 Python
python3发送request请求及查看返回结果实例
2020/04/30 Python
CSS3中的opacity属性使用教程
2015/08/19 HTML / CSS
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
Web时代变迁及html5与html4的区别
2016/01/06 HTML / CSS
教研处工作方案
2014/05/26 职场文书
元宵节寄语大全
2015/02/27 职场文书
生活小常识广播稿
2015/08/19 职场文书
忆童年!用Python实现愤怒的小鸟游戏
2021/06/07 Python
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏
Mysql 文件配置解析介绍
2022/05/06 MySQL