jQuery性能优化指南[译]

作者:Robin 来源:Time Machine 时间:2009-05-12 11:54:00 

现在jquery应用的越来越多, 有些同学在享受爽快淋漓coding时就将性能问题忽略了,  比如我.  jquery虽在诸多的js类库中性能表现还算优秀, 但毕竟不是在用原生的javascript开发, 性能问题还是需要引起重视的. 在twitter上发现了<jQuery Performance Rules>这篇文章, 简单的摘译了一下:

  1. 总是从ID选择器开始继承

  2. 在class前使用tag

  3. 将jquery对象缓存起来

  4. 掌握强大的链式操作

  5. 使用子查询

  6. 对直接的DOM操作进行限制

  7. 冒泡

  8. 消除无效查询

  9. 推迟到 $(window).load

  10. 压缩js

  11. 全面掌握jquery库


1. 总是从ID选择器开始继承

在jquery中最快的选择器是ID选择器. 因为它直接来自于Javascript的getElementById()方法.

<div id=“content”>
<form method=“post” action=“/”>
<h2>Traffic Light</h2>
<ul id=“traffic_light”>
<li><input type=“radio” class=“on” name=“light” value=“red” /> Red</li>
<li><input type=“radio” class=“off” name=“light” value=“yellow” /> Yellow</li>
<li><input type=“radio” class=“off” name=“light” value=“green” /> Green</li>
</ul>
<input class=“button” id=“traffic_button” type=“submit” value=“Go” />
</form>
</div>

像这样选择按钮是低效的:

var traffic_button = $(‘#content .button’);

用ID直接选择按钮效率更高:

var traffic_button = $(‘#traffic_button’);

选择多个元素

提到多元素选择其实是在说DOM遍历和循环, 这些都是比较慢的东西.为了提高性能, 最好从就近的ID开始继承.

var traffic_lights = $(‘#traffic_light input’);

2. 在class前使用tag

第二快的选择器是tag选择器($(’head’)). 同理,因为它来自原生的getElementsByTagName() 方法.

<div id=“content”>
<form method=“post” action=“/”>
<h2>Traffic Light</h2>
<ul id=“traffic_light”>
<li><input type=“radio” class=“on” name=“light” value=“red” /> Red</li>
<li><input type=“radio” class=“off” name=“light” value=“yellow” /> Yellow</li>
<li><input type=“radio” class=“off” name=“light” value=“green” /> Green</li>
</ul>
<input class=“button” id=“traffic_button” type=“submit” value=“Go” />
</form>
</div>;

总是用一个tag name来限制(修饰)class (并且不要忘记就近的ID):

var active_light = $(‘#traffic_light input.on’);

注意: 在jquery中Class是最慢的选择器. IE浏览器下它会遍历所有DOM节点不管它用在那里.

不要用用tag name来修饰ID. 下面的例子将会遍历所有的div元素来查找id为’content’的哪一个节点:

var content = $(‘div#content’);

用ID修饰ID也是画蛇添足:

var traffic_light = $(‘#content #traffic_light’);

 

标签:javascript,jquery,性能
0
投稿

猜你喜欢

  • asp如何制作一个倒计时的程序?

    2010-06-29 21:25:00
  • PHP attributes()函数讲解

    2023-06-04 09:33:02
  • tkinter动态显示时间的两种实现方法

    2021-05-24 23:40:35
  • Python-docx 实现整体修改或者部分修改文字的大小和字体类型

    2022-07-19 10:07:25
  • 小程序开发之uniapp引入iconfont图标以及使用方式

    2024-04-22 13:09:05
  • PWA介绍及快速上手搭建一个PWA应用的方法

    2024-04-19 09:56:33
  • Python抓包程序mitmproxy安装和使用过程图解

    2023-12-09 19:45:12
  • ORACLE 10g 安装教程[图文]

    2009-05-24 19:12:00
  • Python实现对照片中的人脸进行颜值预测

    2023-04-05 18:21:12
  • Python制作运行进度条的实现效果(代码运行不无聊)

    2021-04-11 15:46:10
  • 10分钟彻底搞懂Http的强制缓存和协商缓存(小结)

    2024-04-17 10:09:08
  • 对内联文字的疑惑

    2008-04-18 12:19:00
  • JDBC获取数据库连接的5种方式实例

    2024-01-19 05:14:05
  • Python 照片人物背景替换的实现方法

    2021-10-21 08:45:02
  • Python 京东云无线宝消息推送功能

    2021-08-19 09:45:57
  • python使用正则表达式提取网页URL的方法

    2023-10-09 16:27:18
  • Anaconda+spyder+pycharm的pytorch配置详解(GPU)

    2023-07-20 01:31:20
  • JavaScript实现大文件上传的示例代码

    2024-05-28 15:40:23
  • Python记录详细调用堆栈日志的方法

    2023-11-16 17:20:57
  • linux中使用boost.python调用c++动态库的方法

    2023-01-19 19:21:03
  • asp之家 网络编程 m.aspxhome.com