如何书写高质量jQuery代码(使用jquery性能问题) - Web前端
作者:98wpeu发布时间:2026-08-08分类:网页前端技术浏览:4

1.正确引用JQuery
1.尽量在body结束前才引入jQuery,而不是在head中。
2.借助第三方提供的CDN来引入jquery,同时注意当使用第三方CDN出现问题时,要引入本地的jquery文件。(对于已经使用了cdn的网站可以忽略,现在用户带宽都升级了,这个可以忽略了,放别人机器不一定稳定)
3.如果在</body>前引入script文件的话,就不用写document.ready了,因为这时执行JS代码时DOM已经加载完毕了。
<body>
<script src="http://libs.bAIdu.com/JQuery/1.8.3/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="jquery1.8.min.js">\x3C/script>')</script>
</body>
2.优化jQuery选择器
高效正确的使用jQuery选择器是熟练使用jQuery的基础,而掌握jQuery选择器需要一定的时间积累,我们开始学习jQuery时就应该注意选择器的使用。
<div id="nav" class="nav"> <a class="home" href="HTTP://www.jb51.net">脚本之家</a> <a class="articles" href="http://www.jb51.net/list/list_172_1.htm">jQuery教程</a> </div>
如果我们选择class为home的a元素时,可以使用下边代码:
$('.home'); //1
$('#nav a.home'); //2
$('#nav').find('a.home'); //3
1.方法1会使jQuery在整个dom中查找class为home的a元素,性能可想而知。
2.方法2为要查找的元素添加了上下文,在这里变为查找id为nav的子元素,查找性能得到了很大提升。
3.方法3使用了find方法,它的速度更快,所以方法三最好。
关于jQuery选择器的性能优先级,ID选择器快于元素选择器,元素选择器快于class选择器。因为ID选择器和元素选择器是原生的javascript操作,而类选择器不是,大家顺便可以看下find context 区别,find() children区别。
3.缓存jQuery对象
缓存jQuery对象可以减少不必要的DOM查找,关于这点大家可以参考下缓存jQuery对象来提高性能。
4.正确使用事件委托
事件委托可以使事件更好的执行,在动态添加的元素上绑定事件也需要委托来实现,在新版本的jQuery中推荐大家使用on来给元素绑定一个或多个事件的处理函数。
<table id="t"> <tr> <td>我是单元格</td> </tr> </table>
比如我们要在上边的单元格上绑定一个单击事件,不注意的朋友可能随手写成下边的样子:
$('#t').find('td').on('click', function () {
$(this).CSS({ 'color': 'red', 'background': 'yellow' });
});
这样会为每个td绑上事件,在为100个单元格绑定click事件的测试中,两者性能相差7倍之多,好的做法应该是下边写法:
$('#t').on('click', 'td', function () {
$(this).css({ 'color': 'red', 'background': 'yellow' });
});
5.精简jQuery代码
如在上述代码中我们对jQuery代码进行了适当的合并,类似的还有.attr()方法等,我们没有写成下边的方式:
$('#t').on('click', 'td', function () {
$(this).css('color', 'red').css('background', 'yellow');
});
6.减少DOM操作
刚开始使用jQuery时可能会频繁的操作DOM,这是相当耗费性能的。如我们要在body中动态输出一个表格,一些朋友会这样写:
var $t = $('body');
$t.append('<TABle>');
$t.APPend('<tr><td>1</td></tr>');
$t.append('</table>');
好的做法:
$('body').Append('<table><tr><td>1</td></tr></table>');
这样在拼接完table串后再添加到body中,对DOM的操作只需一次。群里以前有朋友就因为这个导致在ie下输出时出现问题,而关于字符串的拼接可以参考下最快创建字符串的方法。
7.不使用jQuery
原生函数总是最快的,这点不难理解,在代码书写中我们不应该忘记原生JS。
就先总结这几条吧,每条建议并不难理解,但总结全面的话还是要花费不少时间的。如在减少代码段中,如果需要根据条件从数组中得到新数组时,可以使用$.grep() 方法,如果你在使用jQuery时有自己必得的话,欢迎在留言中和大家分享!
下面是其它网友的补充:
注意定义jQuery变量的时候添加var关键字
这个不仅仅是jQuery,所有JavaScript开发过程中,都需要注意,请一定不要定义成如下:
$loading = $('#loading'); //这个是全局定义,不知道哪里位置倒霉引用了相同的变量名,就会郁闷至死的
请使用一个var来定义变量
如果你使用多个变量的话,请如下方式定义:
复制代码 代码如下:
var page = 0,
$loading = $('#loading'),
$body = $('body');
不要给每一个变量都添加一个var关键字,除非你有严重的强迫症
定义jQuery变量
申明或者定义变量的时候,请记住如果你定义的是jQuery的变量,请添加一个$符号到变量前,如下:
var$loading = $('#loading');
这里定义成这样的好处在于,你可以有效的提示自己或者其它阅读你代码的用户,这是一个jQuery的变量。
DOM操作请务必记住缓存(CAChe)
在jQuery代码开发中,我们常常需要操作DOM,DOM操作是非常消耗资源的一个过程,而往往很多人都喜欢这样使用jQuery:
复制代码 代码如下:
$('#loading').html('完毕');
$('#loading').fadeOut();
代码没有任何问题,你也可以正常运行出结果,但是这里注意你每次定义并且调用$('#loading')的时候,都实际创建了一个新的变量,如果你需要重用的话,记住一定要定义到一个变量里,这样可以有效的缓存变量内容,如下:
复制代码 代码如下:
var $loading = $('#loading');
$loading.HTML('完毕');$loading.fadeOut();
这样性能会更好。
使用链式操作
上面那个例子,我们可以写的更简洁一些:
复制代码 代码如下:
var $loading = $('#loading');
$loading.html('完毕').fadeOut();
精简jQuery代码
尽量把一些代码都整合到一起,请勿这样编码:
复制代码 代码如下:
// !!反面人物$button.click(function(){
$target.css('width','50%');
$target.css('border','1px solid #202020');
$target.css('color','#fff');
});
应该这样书写:
复制代码 代码如下:
$button.click(function(){
$target.css({'width':'50%','border':'1px solid #202020','color':'#fff'});
});
避免使用全局类型的选择器
请勿如下方式书写:$('.something > *');
这样书写更好:$('.something').children();
不要叠加多个ID
请勿如下书写:$('#something #children');
这样就够了:$('#children');
多用逻辑判断||或者&&来提速
请勿如下书写:
复制代码 代码如下:
if(!$something) {
$something = $('#something ');
}
这样书写性能更好:
$something= $something|| $('#something');
尽量使用更少的代码
与其这样书写:if(string.length > 0){..}
不如这样书写:if(String.length){..}
尽量使用 .on方法
如果你使用比较新版本的jQuery类库的话,请使用.on,其它任何方法都是最终使用.on来实现的。
尽量使用最新版本的jQuery
最新版本的jQuery拥有更好的性能,但是最新的版本可能不支持IE6/7/8,所以大家需要自己针对实际情况选择。
尽量使用原生的Javascript
如果使用原生的javascript也可以实现jQuery提供的功能的话,推荐使用原生的javascript来实现。
相关推荐
- jQuery打印指定区域Html页面并自动分页 - Web前端
- 基于Jquery+Ajax+Json实现分页显示附效果图 - Web前端
- JQuery中$(document)是什么意思有什么作用 - Web前端
- 一个小例子解释如何来阻止Jquery事件冒泡 - Web前端
- JQuery 在线引用及测试引用是否成功 - Web前端
- jQuery基于当前元素进行下一步的遍历 - Web前端
- jQuery 2.0.3 源码分析之core(一)整体架构 - Web前端
- JQuery实现table行折叠效果以JSON做数据源 - Web前端
- jquery仿搜索自动联想功能代码 - Web前端
- 对之前写的jquery分页做下升级 - Web前端
- 网页前端技术排行
-
- 1[Web前端]用javascript实现默认图片替代未显示的图片 - Web前端
- 2分析Iconfont-阿里巴巴矢量常用图标库 - Web前端
- 3jQuery实例教程:制作网页中可折叠的面板 - Web前端
- 4【第六章】Foundation之按钮和下拉功能 - Web前端
- 5基于jquery的滚动条滚动固定div(附演示下载) - Web前端
- 6jQuery编写widget的一些技巧分享 - Web前端
- 7分享精心挑选的12款优秀jQuery Ajax分页插件和教程 - Web前端
- 8jQuery实现鼠标移到元素上动态提示消息框效果 - Web前端
- 9在Mac/PC上远程调试iPhone/iPad上的网页 - Web前端
- 最近发表
-
- WordPress随机显示特色图片插件:Random Post Thumbnails
- KeePass实现Chrome浏览器自动填充密码方法一
- LNMP一键包nginx 301强制跳转到https教程
- KeePass实现Chrome浏览器自动填充密码方法二
- #建站# 免费的VPS管理软件Xshell8/Xftp8中文版下载
- 使用Xshell 8连接VPS教程_电脑登录vps的方法
- WordPress评论界面添加烟花????效果
- 不同浏览器书签同步方案:坚果云+Floccus_详细使用教程
- iOS端KeePassXC客户端APP:Strongbox Password Safe
- 给WordPress评论中的Gravatar头像图片添加ALT属性


