阅读更多

13顶
2踩

Web前端

原创新闻 怎么才能书写高质量jQuery代码

2014-09-04 15:03 by 见习记者 huoquan 评论(5) 有10516人浏览

众所周知,jQuery现在已经非常流行,百度新首页中也已经开始使用jQuery,今天总结下怎么书写更好的jQuery代码使jQuery代码更好、更快的执行,希望本篇jQuery教程一改大家以前不合理的做法。

 

1.正确引用jQuery

  1. 尽量在body结束前才引入jQuery,而不是在head中。

  2. 借助第三方提供的CDN来引入jQuery,同时注意当使用第三方CDN出现问题时,要引入本地的jQuery文件。

  3. 如果在</body>前引入script文件的话,就不用写document.ready了,因为这时执行js代码时DOM已经加载完毕了。

    <body>
        <script src="http://lib.sinaapp.com/js/jquery11/1.8/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.jquery001.com">jQuery学习网</a>
    <a class="articles" href="http://www.jquery001.com/articles/">jQuery教程</a>
</div>

如果我们选择class为home的a元素时,可以使用下边代码:

$('.home');  //1
$('#nav a.home');  //2
$('#nav').find('a.home');  //3

 

方法1会使jQuery在整个DOM中查找class为home的a元素,性能可想而知。

  1. 方法2为要查找的元素添加了上下文,在这里变为查找id为nav的子元素,查找性能得到了很大提升。

  2. 方法3使用了find方法,它的速度更快,所以方法三最好。

  3. 关于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时有自己心得的话,欢迎在留言中和大家分享!

13
2
评论 共 5 条 请登录后发表评论
5 楼 bossdai 2014-09-10 09:47
yandou524 写道
根据css加载原理,jquery选择器的选择应该层数越少越好吧

4 楼 terencewong 2014-09-09 14:14
CDN 会有很多的优化,比如说基于地理位置的,和fail over.举个例子
比如你的服务器在北京,用户在上海,如果你用CDN,上海的CDN就会响应用户请求,当然会比你北京的服务器发送好的多.当然,如果CDN有问题 你可以退回到本地JS.
Night舞夜 写道
"借助第三方提供的CDN来引入jQuery,同时注意当使用第三方CDN出现问题时,要引入本地的jQuery文件。"

我想问一下,既然还是要判断引入本地的js。为何还引入第三方js。直接引入本地不就好了么?

3 楼 Night舞夜 2014-09-09 11:58
"借助第三方提供的CDN来引入jQuery,同时注意当使用第三方CDN出现问题时,要引入本地的jQuery文件。"

我想问一下,既然还是要判断引入本地的js。为何还引入第三方js。直接引入本地不就好了么?
2 楼 chen243048349 2014-09-09 10:53
.find() 和 .children() 方法类似,不过后者只沿着 DOM 树向下遍历单一层级
1 楼 yandou524 2014-09-04 19:04
根据css加载原理,jquery选择器的选择应该层数越少越好吧

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 如何书写高质量的jQuery代码

    如何书写高质量的jQuery代码想必大家对于jQuery这个最流行的javascript类库都不陌生,而且只要是前端开发人员肯定或多或少的使用或者接触过,在今天的这篇文章中,我们将介绍一些书写高质量jQuery代码的原则,我们不...

  • 如何书写高质量jQuery代码(使用jquery性能问题)

    众所周知,jQuery现在已经非常流行,百度新首页中也已经开始使用jQuery,今天总结下怎么书写更好的jQuery代码使jQuery代码更好、更快的执行,希望本篇jQuery教程一改大家以前不合理的做法

  • 书写高质量jQuery代码的12条经验

    1、正确引用jQuery 尽量在body结束前才引入jQuery,而不是在head中。...如果在前引入script文件的话,就不用写document.ready了,因为这时执行js代码时DOM已经加载完毕了。 src="//lib.sinaapp.com/js/jque

  • php培训经验如何写,书写高质量jQuery代码的6条经验

    如何才能书写出高质量的jQuery代码,困扰这不少人,不知何从下手。今天合肥达内PHP培训为大家总结的6条经验,拿走不谢!一、正确引用jQuery尽量在body结束前才引入jQuery,而不是在head中。借助第三方提供的CDN来...

  • 怎么书写高质量jQuery代码

    众所周知,jQuery现在已经非常流行,百度新首页中也已经开始使用jQuery,今天总结下怎么书写更好的jQuery代码使jQuery代码更好、更快的执行,希望本篇jQuery教程一改大家以前不合理的做法。   1.正确引用jQuery ...

  • 怎么书写高质量jQuery代码【收藏】

    众所周知,jQuery现在已经非常流行,百度新首页中也已经开始使用jQuery,今天总结下怎么书写更好的jQuery代码使jQuery代码更好、更快的执行,希望本篇jQuery教程一改大家以前不合理的做法。 ...

  • 书写高质量jQuery代码

    1、正确引用jQuery (1)、 尽量在body结束前才引入jQuery,而不是在head中。 (2)、 借助第三方提供的CDN来...前引入script文件的话,就不用写document.ready了,因为这时执行js代码时DOM已经加载 完毕了。 ...

  • 书写高质量的jQuery代码

    在jQuery代码开发中,我们常常需要操作DOM,DOM操作是非常消耗资源的一个过程,而往往很多人都喜欢这样使用jQuery: $ ( '#loading' ). html ( '完毕' ); $ ( '#loading' ). ...

  • 06_QLibrary.zip

    06_QLibrary.zip

  • 毕业设计: 基于Densenet + CTC技术的文字检测识别的技术研究

    本毕设课题是属于计算机视觉下的目标检测与识别,对象为自然场景下的各种文本信息,通俗的说就是检测识别图片中的文本信息。由于文本的特殊性,本毕设将整个提取信息的过程可以分为检测、识别两个部分。 论文对用到的相关技术概念有一定的介绍分析,如机器学习,深度学习,以及各种的网络模型及其工作原理过程。 检测部分采用水平检测文本线方式进行文本检测,主要参考了乔宇老师团队的 CTPN 方法,并在正文部分从模型的制作到神经网络的设计实现对系统进行了较为详细的分析介绍。 识别部分则采用的是 Densenet + CTC,对于印刷体的文字有较好的识别。

  • 毕业设计 基于javaweb的在线答题平台

    毕业设计 基于javaweb的在线答题平台

  • numpy安装 python get-pip.py

    numpy安装 numpy安装 python get-pip.py

  • 基于用户、物品的协同过滤算法.zip

    协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系进行推荐。 协同过滤算法主要分为两类: 基于物品的协同过滤算法:给用户推荐与他之前喜欢的物品相似的物品。 基于用户的协同过滤算法:给用户推荐与他兴趣相似的用户喜欢的物品。 协同过滤算法的优点包括: 无需事先对商品或用户进行分类或标注,适用于各种类型的数据。 算法简单易懂,容易实现和部署。 推荐结果准确性较高,能够为用户提供个性化的推荐服务。 然而,协同过滤算法也存在一些缺点: 对数据量和数据质量要求较高,需要大量的历史数据和较高的数据质量。 容易受到“冷启动”问题的影响,即对新用户或新商品的推荐效果较差。 存在“同质化”问题,即推荐结果容易出现重复或相似的情况。 协同过滤算法在多个场景中有广泛的应用,如电商推荐系统、社交网络推荐和视频推荐系统等。在这些场景中,协同过滤算法可以根据用户的历史行为数据,推荐与用户兴趣相似的商品、用户或内容,从而提高用户的购买转化率、活跃度和社交体验。 未来,协同过滤算法的发展方向可能是结合其他推荐算法形成混合推荐系统,以充分发挥各算法的优势。

  • strcmp函数应用.zip

    strcmp函数应用.zip

  • 2.py

    2.py

  • 解读MIT-BIH数据的MATLAB代码.zip

    解读MIT-BIH数据的MATLAB代码.zip

  • 医保基本药品耗材目录查询2.0.exe

    可以查询各种医保内的药物,包括规格厂家和详细的相关资料,种类很齐全,方便大家查询,和了解药物价格等方面。

  • 使用Numpy将类保存到npz文件并读取文件,然后绘制图形的Python代码示例

    npz文件 代码中,我们首先定义了一个数据类Data,其中包含x和y两个成员变量。 然后,我们创建了数据对象,并将其保存到文件中。我们使用np.savez函数将数据字典保存到文件中,其中字典的键为变量名,值为对应的数据数组。 接下来,我们使用load_from_file方法从文件中加载数据,并创建一个新的数据对象。 最后,我们使用Matplotlib库绘制出新数据对象的图形。通过plot函数,我们将x和y作为横纵轴数据进行绘制。然后,我们添加坐标轴标签、标题,并显示网格线。 运行代码后,将显示一个绘制出的数据图形。 数据保存: def save_to_file(self, filename): data_dict = { 'x': self.x, 'y': self.y } np.savez(filename, **data_dict) # 将数据保存到文件 filename = 'data.npz' data.save_to_file(filename)

  • matlab矩阵的生成.zip

    matlab矩阵的生成.zip

  • 模拟器非常好用,赶紧来下载

    模拟器非常好用,赶紧来下载

Global site tag (gtag.js) - Google Analytics