【JQuery】性能优化方法
尽管JavaScript比JAVA C++慢很多,JQuery比原生Js还慢很多,但是我们通过良好的编程习惯还是能提高代码执行的效率。
一.选择器的使用
选择同一个元素,各种方法之间的性能是不一样的,有时候差异会特别大。通常比较常用的选择器有以下几个:
ID选择器 $("#id")
标签选择器 $("td")
类选择器 $(".target")
属性选择器 $("td[target='target']")
伪类选择器 $("td:hidden")
这5种选择器的性能是依次下降的:
性能顺序:ID选择器 > 标签选择器 > 类选择器 > 属性选择器 > 伪类选择器
二.避免执行全局查找
//错误的
$("div.bizHelp"); //正确的
$("bizHelp");
$("#container").find(".bizHelp");
保证查询的路径最短,性能最优
三.缓存对象
//错误的
$(window).bind('click',function(){
//do someing...
}); $(window).css('width','1000px'); $(window).bind('load',function(){
//do someing...
});
//优化的
var $win = $(window); $win.bind('click',function(){
//do someing...
}); $win.css('width','1000px'); $win.bind('load',function(){
//do someing...
});
四.采用样式表 避免多次DOM style样式
var obj=$("#obj");
//A:
obj.css("width",200);
obj.css("height",200);
obj.css("background":"#eee");
//B:
obj.attr("style","width:200px;height:200px;background:#eee;");
//C:
//加个css .operation{width:200px;height:200px;background:#eee;}
obj.addClass("operation")
性能排序:C>B>A
五.减少对DOM元素的操作次数
//不好的
$.each(arr,function(i){
$(window).append('<li>'+arr[i]+'</li>')
}); //优化的
var _html=[];
$.each(arr,function(i){
_html.push('<li>'+arr[i]+'</li>')
});
$(window).append(_html.join(''));
六.优化事件冒泡
//不好的
$('a').click(function(){
//do someing...
}); //推荐的
$(document.body).click(function(event){
if(event.target.tagName=='A'){
//do someing...
}
}); //JQuery的方法
$(document.body).delegate("a","click",function(){
//do someing...
});
七.更高效的遍历方式
var list=ul.find("li"),
e;
//A:
var i=list.length;
while(i--){
e=$(list[i])
}
//B:
list.each(function(){
e=$(this);
});
//C:
$.each(list,function(){
e=$(this);
});
JQuery提供了$.fn.each()和$.each()两个方法来实现对集合的遍历,除此之外,还可以采用JS原生的for循环、while等来实现迭代,应该了解一下他们之间的性能差异:
测试说明:1w次执行耗时,单位毫秒/ms,统计三次运行的平均值
| 方案 | IE6 | IE7 | IE8 | IE9 | chrome | firefox | opera | safari |
| A | 172 | 219 | 157 | 30 | 3 | 5 | 4 | 6 |
| B | 219 | 234 | 203 | 41 | 4 | 6 | 5 | 8 |
| C | 219 | 234 | 187 | 52 | 3 | 4 | 5 | 7 |
结论
总体上来说A>C>B
方案A有大约25%的性能提升,但是不稳定。追求极致性能,用方案A;
循环数量少的话,建议使用方案C,比较稳定;
八.优先使用原生属性
$.each(list,function(){
//A
var id=$(this).attr("id");
//B
var id=this.id;
})
很多常用的属性,比如id、name等都被浏览器原生实现,在JQuery中我们有时会用$(this).attr("id")的方式来获取id,这种方法的效率相比原生属性的获取效率而言,非常慢。
使用原生的API,可以极大的提高性能
测试说明:10w次执行耗时,单位毫秒/ms,统计三次运行的平均值
| 方案 | IE6 | IE7 | IE8 | IE9 | chrome | firefox | opera | safari |
| A | 6880 | 7030 | 4220 | 1188 | 157 | 244 | 133 | 135 |
| B | 310 | 310 | 150 | 27 | 4 | 5 | 17 | 3 |
九.可能的话,使用最新版本的JQuery
新版本总会对性能进行改进,还会提供一些新的方法。
如果可以的话,应该尽量选用最新的版本;
【JQuery】性能优化方法的更多相关文章
- jquery性能优化的十种方法
jquery性能优化的十种方法 有时候我们在书写jquery的时候,为了书写代码方便,往往忽略了程序执行过程中,给客户端带来的压力.随之而来的就是在某些低端浏览器或者低端电脑上运行速度缓慢,甚至无法运 ...
- jQuery性能优化指南(转载)
现在jquery应用的越来越多, 有些同学在享受爽快淋漓coding时就将性能问题忽略了, 比如我. jquery虽在诸多的js类库中性能表现还算优秀, 但毕竟不是在用原生的javascript开发, ...
- jQuery性能优化的28个建议
我一直在寻找有关jQuery性能优化方面的小窍门,能让我那臃肿的动态网页应用变得轻便些.找了很多文章后,我决定将最好最常用的一些优化性能的建议列出来.我也做了一个jQuery性能优化的简明样式表,你可 ...
- jQuery:jQuery性能优化28条建议
http://www.xue5.com/WebDev/jQuery/671700.html 直在寻找有关jQuery性能优化方面的小窍门,能让我那臃肿的动态网页应用变得轻便些.找了很多文章后,我决定将 ...
- jQuery 性能优化技巧
原文地址:jQuery 性能优化技巧 博客地址:http://www.extlight.com 一.使用最新版本 jQuery 类库 二.合理使用选择器 # 推荐使用 $("#id" ...
- jQuery性能优化和技巧
jQuery性能优化 ①使用最新版本的jQuery类库 ②使用合适的选择器 ③缓存对象 ④循环时的DOM操作 ⑤数组方式使用jQuery对象 ⑥事件代理 ⑦将你的代码转化成jQuery插件 ⑧使用jo ...
- 28个jQuery性能优化的建议
我一直在寻找有关jQuery性能优化方面的小窍门,能让我那臃肿的动态网页应用变得轻便些.找了很多文章后,我决定将最好最常用的一些优化性能的建议列出来.我也做了一个jQuery性能优化的简明样式表,你可 ...
- 针对jquery的优化方法,你知道几条
(转)我一直在寻找有关jQuery性能优化方面的小窍门,能让我那臃肿的动态网页应用变得轻便些.找了很多文章后,我决定将最好最常用的一些优化性能的建议列出来 ====================== ...
- DevExpress ChartControl大数据加载时有哪些性能优化方法
DevExpress ChartControl加载大数据量数据时的性能优化方法有哪些? 关于图表优化,可从以下几个方面解决: 1.关闭不需要的可视化的元素(如LineMarkers, Labels等) ...
- Linux 下网络性能优化方法简析
概述 对于网络的行为,可以简单划分为 3 条路径:1) 发送路径,2) 转发路径,3) 接收路径,而网络性能的优化则可基于这 3 条路径来考虑.由于数据包的转发一般是具备路由功能的设备所关注,在本文中 ...
随机推荐
- 002_基础电路_AD快捷键
AD快捷键设置 陆小果哥哥制作 1. F2----------------------------------------放置走线 a) b) 需设置,点中走线按住 ...
- ElasticSearch 初识ES
版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u013047584/article/det ...
- .net文件夹上传下载组件
ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现. 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压. ASP.NE ...
- SpreadJS 复制行
参考:https://www.cnblogs.com/yeyuqian/p/10750441.html 核心代码: //例子:复制第一行(10列) 复制到 第二行var fromRanges = ne ...
- codevs 4014EZ系列
4014 EZ系列之丁畅大大打小怪兽 题目描述 Description 丁畅大大除了喜欢吃鸡腿和番茄炒鸡蛋,还喜欢变成奥特曼去打小怪兽. 有一天,他遇到了迪迦!!!!!!!!!!!!!!!!!!! ...
- golang-切片copy
package main import ( "fmt" ) func main() { fmt.Println("-------------") data := ...
- 在应用中显示的图片很多情况不满足业务需求,我们需要动态根据图片的宽高进行缩放或加载中显示的缺省图片,这是我没就需要监听图片加载完成回调,来看看微信小程序怎么实现图片加载完成回调。
<swiper-item> <image src="{{item.image}}" class="slide-image" mode=&quo ...
- go中的方法以及自定义类型代码示例
package main import "fmt" type user struct { name string age int sex string } type admin s ...
- Thingsboard 重新启动docker-compose容器基础数据存在的问题
在重启了thingsboard的容器后,想再次重新启动容器,发现已经出现了错误 查看posttres中,持久化的地址是tb-node/postgres中 再查看相应的文件夹 删除以上log和postg ...
- arcpy SearchCursor sql_clause
import arcpy fc = 'c:/data/base.gdb/well' fields = ['WELL_ID', 'WELL_TYPE'] # Use ORDER BY sql claus ...