jQuery 选择器效率

摘要:
建议通过尽可能多地使用ID选择器、尽可能少地直接使用Class选择器以及尽可能多的组合标记来优化选择器性能。例如,输入。myclass使用更多的父子关系,使用更少的嵌套关系缓存。jQuery对象链调用1˃2˃3˃4˃5˃6$parent的性能分析。查找//1$/2$//3$parent。children//4$/5$/61。这是最快的说法。JQuery将自动将此语句转换为$。父母亲查找,这将导致一些性能损失。它比最快的表单慢大约50%。5.jQuery在内部使用Sizzle引擎来处理各种选择器。

原文地址:http://www.cnblogs.com/aaronjs/p/3337531.html

ID > Tag > Class

  • ID 选择器是速度最快的,这主要是因为它使用 JavaScript 的内置函数 getElementById();
  • 其次是类型选择器,因为它使用 JavaScript 的内置函数 getElementsByTag();
  • 速度最慢的是 Class 选择器,其需要通过解析 HTML 文档树,并且需要在浏览器内核外递归,这种递归遍历是无法被优化的。

选择器性能优化建议

  • 尽量使用 ID 选择器
  • 少直接使用 Class 选择器,尽量结合 Tag 使用,如  input.myclass
  • 多用父子关系,少用嵌套关系
  • 缓存 jQuery 对象
  • 链式调用

性能分析

  1 > 2 > 3 > 4 > 5 > 6
  
$parent.find('.child')       //   1  
$('.child', $parent)         //   2  
$('.child', $('#parent'))    //   3  
$parent.children('.child')   //   4  
$('#parent > .child')        //   5  
$('#parent .child')          //   6  
 
1. 这条是最快的语句。.find()方法会调用浏览器的原生方法(getElementById,getElementByName,getElementByTagName等等),所以速度较快。
 
2. 给定一个DOM对象,然后从中选择一个子元素。jQuery会自动把这条语句转成$.parent.find('child'),这会导致一定的性能损失。它比最快的形式慢了5%-10%。
 
3. jQuery内部会将这条语句转成$('#parent').find('.child'),比最快的形式慢了23%。
 
4. 这条语句在jQuery内部,会使用$.sibling()和javascript的nextSibling()方法,一个个遍历节点。它比最快的形式大约慢50%
 
5. jQuery内部使用Sizzle引擎,处理各种选择器。Sizzle引擎的选择顺序是从右到左,所以这条语句是先选.child,然后再一个个过滤出父元素#parent,这导致它比最快的形式大约慢70%。
 
6. 这条语句与上一条是同样的情况。但是,上一条只选择直接的子元素,这一条可以于选择多级子元素,所以它的速度更慢,大概比最快的形式慢了77%。

免责声明:文章转载自《jQuery 选择器效率》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何在TypeScript中使用JS类库git 用命令下载代码到本地下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

jQuery实现全选/反选和批量删除

<%@ page language="java" contentType="text/html; charset=utf-8"     pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.or...

jQuery radio的取值与赋值

HTML <div class="weui-cell"> <div class="weui-cell__hd"><label class="weui-label">性别</label></div> <div class="weui-cel...

使用jquery实现文本框输入特效:文字逐个显示逐个消失反复循环

        前两天看到某个网站上的输入框有个小特效:文字逐个显示,并且到字符串最大长度后,逐个消失,然后重新循环显示消失,循环显示字符串数组。我对这个小特效有点好奇,于是今天自己尝试用jquery写一个简单的小demo,终于把效果整出来了。首先看一下实现后的效果: 接下来上代码。 <!DOCTYPE html> <html lan...

jquery倒计时插件可自定义多个倒计时间

jquery倒计时插件设置多个自定义倒计时时间,任意设置天、小时、分钟、秒倒计时间功能。 查看演示>> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.d...

JQuery iframe宽高度自适应浏览器窗口大小的解决方法

iframe宽高度自适应浏览器窗口大小的解决方法   by:授客 QQ:1033553122 1.   测试环境 JQuery-3.2.1.min.js 下载地址: https://gitee.com/ishouke/front_end_plugin/blob/master/jquery-3.2.1.min.js   Bootstrap-3.3.7-dis...

自定义样式滚动条

自定义IE浏览器滚动条样式 追溯浏览器对滚动条的自定义,恐怕最早的就是IE浏览器了(好像最开始支持的版本是IE5.5)。下面列出了多个版本的支持性况: 滚动条样式 支持情况 支持浏览器版本 可否继承 描述 scrollbar-3dlight-color IE特有属性 IE5.5+ y 设置滚动框的和滚动条箭头左上边缘的颜色 scrollbar-...