众所周知,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. 方法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时有自己心得的话,欢迎在留言中和大家分享!

转载于:https://www.cnblogs.com/focai/p/4369661.html

怎么书写高质量jQuery代码相关推荐

  1. 如何书写高质量的jQuery代码

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

  2. 写一个sql实现以下查询结果_书写高质量SQL的30条建议

    以下文章来源:后端程序员必备:书写高质量SQL的30条建议 1.查询SQL尽量不要使用select *,而是select具体字段. 反例子: select * from employee; 正例子: ...

  3. 如何在面试时写出高质量的代码

    摘要:有些程序员由于平时没有养成良好的编程习惯,在面试时写出的代码质量不高,最终遗憾地与心仪的公司和职位失之交臂.如何在面试时能写出高质量的代码,是很多程序员关心的问题. 程序员在职业生涯中难免要接受 ...

  4. 写高质量的代码,永不言晚!

    作者 | Nitesh sharma 译者 | 弯月 责编 | 郭芮 出转载自 CSDN(ID:CSDNnews) 以下为译文: 在如今这个时代,每个人都在努力提升资源能力.在Web应用程序方面,我们 ...

  5. 《编写高质量Python代码的59个有效方法》——第10条:尽量用enumerate取代range

    本节书摘来自华章社区<编写高质量Python代码的59个有效方法>一书中的第10条:尽量用enumerate取代range,作者[美]布雷特·斯拉特金(Brett Slatkin),更多章 ...

  6. 表示python代码块的是_编写高质量Python代码的59个有效方法,你用过几个

    欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 这个周末断断续续的阅读完了<Effectiv ...

  7. iOS 编写高质量Objective-C代码(六)

    级别: ★★☆☆☆ 标签:「iOS」「Block」「Objective-C」 作者: MrLiuQ 审校: QiShare团队 前言: 这几篇文章是小编在钻研<Effective Objecti ...

  8. [转]后端程序员必备:书写高质量SQL的30条建议

    以下文章来源于捡田螺的小男孩 ,作者捡田螺的小男孩 转载:<后端程序员必备:书写高质量SQL的30条建议> 前言 本文将结合实例demo,阐述30条有关于优化SQL的建议,多数是实际开发中 ...

  9. 编写高质量的代码--基础:结构和样式,行为的分离

    实现高质量的代码需要我们在结构和样式,行为的分离的基础上做到:精简,重用,有序. 精简:尽量减小文件的大小,提高页面加载速度. 重用:提高代码的重用性,减少冗余代码,提高开发速度. 有序:提高代码的结 ...

最新文章

  1. java 不写this_JAVAthis使用的那些事儿
  2. oracle+SQL优化实例
  3. sql 192标准 连接查询
  4. 过滤选择器——可见性过滤选择器
  5. QT学习:读写二进制文件
  6. python 复制文件_10 行 Python 代码写 1 个 USB 病毒
  7. 时光手帐怎么修改作品 时光手帐修改作品封面方法
  8. python入门教材论坛_GitHub - aisuhua/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...
  9. 使用base64:url 来定义背景图片url
  10. Java图片人物照片头像识别
  11. JSP九大内置对象总结
  12. 天勤率辉考研数据结构2021
  13. 基站的小区号256变换
  14. Windows系统目录及常用快捷键
  15. 3D场景建模学习必备的基础知识
  16. 一键u盘装win7系统教程图解
  17. java webservice用户名密码_WebService 用户名密码验证
  18. 如何用STAR法则来回答「宝洁八大问」
  19. 轩小陌的Python笔记-day08 模块一总结
  20. codeforces 545D. Queue

热门文章

  1. Emotion英语学习
  2. 优化JavaScript代码
  3. NDO中的ActiveRecord 简介 2——强类型的活动记录
  4. mysql 虚拟环境搭建_pycharm虚拟环境virtualnv安装MySQL扩展
  5. vs2010安装AnkhSVN,但是不起作用解决方法
  6. php 华为语音通话,语音通知API_语音通话 VoiceCall_API参考_语音通知API_华为云
  7. leetcode算法题--乘积最大子数组
  8. html 弹出遮罩 iframe,iframe正在加载时显示遮罩层 加载完毕后显示iframe
  9. 「镁客早报」任正非称对苹果等对手出售5G芯片持开放态度;马斯克称未来12个月内将生产超过50万辆车...
  10. 【软件测试工程师】关于软件测试术语的定义,软件测试中的分类