jQuery性能的优化建议

jQuery性能的优化建议
不要每次访问循环时访问数组的长度属性,并在循环开始之前缓存它:
无功mylength = myarray.length;

对于(var i = 0;i < mylength;i++){
做某事
}

在循环外部执行追加操作

直接操作DOM是非常昂贵的,尤其是在循环中不直接运行DOM:
这个属性很差/
美元。每个(MyArray,功能(我的项目){
无功newlistitem =+项目+;
$(#球员)。追加(newlistitem);
});

如此好的表演/
var = document.createdocumentfragment(片段);
美元。每个(MyArray,功能(我的项目){
无功newlistitem =+项目+;
frag.appendchild(newlistitem);
});
$(#球员){ 0 }。appendChild(片段);
这也是非常好的。
无功myhtml =;
美元。每个(MyArray,功能(我的项目){
+项目+;
});
$(#球员),Html(myhtml);
代码需要细化。

避免重复。如果你重复做了一些事情,你可能会有问题。
/丑
如果($ eventfade.data('currently)!= 'showing){
eventfade.stop美元();
}

如果($ eventhover.data('currently)!= 'showing){
eventhover.stop美元();
}

如果($ spans.data('currently)!= 'showing){
spans.stop美元();
}

/美丽!!
var = { eventfade elems美元美元美元美元,eventhover,跨越};
美元。每个(合单元,功能(我、元){
如果(elem.data('currently)!= 'showing){
Elem.stop();
}
});

警惕匿名函数

匿名函数非常痛苦。它们很难调试、维护、测试或重用。它们应该尽可能地命名函数并将它们封装在对象中,从而实现有效的管理
/不好
$(文档)Ready(函数(){)
$(#魔法)。Click(function(e){
$(# yayeffects)。SlideUp(function(){)

});
});

$(#幸福)。负荷(网址+ #独角兽,函数(){())

});
});

/好的
var = {
OnReady:函数(){
$(#魔法)。Click(PI。candymtn);
$(#幸福)。负荷(pi.url + #独角兽,PI。unicorncb);
},

CandyMtn:功能(e){
$(# yayeffects)。SlideUp(PI。slidecb);
},

SlideCb:函数(){…},

unicorncb:函数(){…}
};

$(document)。准备(PI。onready);

优化选择

随着越来越多的浏览支持document.queryselectorall(),选择器的负担已经慢慢转移到浏览器,但仍有一些技巧需要注意。

尽可能地优先使用ID选择器:
快速
$(#集装箱div.robotarm);

/相当快
$(#容器)发现('div.robotarm);

以美元的方式。fn.find更快,因为之前美元的选择器。fn.find不使用jQuery的选择器引擎用来,但使用浏览器document.getelementbyid()方法。浏览器本机方法更快。

当使用组合器时,可以使右端尽可能地清晰,而左边则不尽可能清晰。

/不优化
('div.data美元。nzalez);

具有/优化
$('。数据TD。nzalez);

尝试使用tag.class对选择器的右边,而左边只使用标签或类尽可能。

避免过分具体:
$('。数据table.attendees TD。nzalez);

在不影响结果的情况下向中间部分过度。
$('。数据TD。nzalez);

简单的DOM结构也有助于提高选择器的性能,因为选择器可能需要几层曲线才能找到元素。

避免使用通配符,任何显性或隐性的通配符,可以减少选择器的性能。
$(按钮> *);
$(按钮)。子();更好。

$(性别:收音机);隐式使用通配符,慢行
$('。性别*电台); / /明确使用通配符,同上,慢
$(性别投入:收音机);嗯,更快

使用事件代理

事件代理允许一个事件被绑定到一个容器,如一个无序列表UL,而不是绑定到容器中所有元素(例如,列表元素李)。尽管美元。fn.live美元。fn.delegate绑定事件的容器,他们应该使用尽可能多的fn.delegate美元。毕竟,它们清晰的上下文(与当前的上下文是文档相比)要小得多,避免了很多不必要的过滤。

除了提高性能之外,如果将新元素添加到绑定事件的容器中,则这些新元素不必再次绑定事件,这也是一个优势。
/不好(如果列表元素非常多,那么你就悲剧了)
$(李。触发)。Click(handlerfn);

更好:使用美元。fn.live / /事件代理
$(李。触发)。活(听到咔哒声,handlerfn);

为充分利用。fn.delegate: / /事件代理
因为它可以指定特定的上下文
$(# mylist),委托(李。触发',点击',handlerfn);

从DOM卸载元素并重新操作

DOM操作是很慢的,所以你应该尽量避免直接操作介绍dom.jquery美元。fn.detach方法在1.4版。它可以卸载DOM中的元素并进行操作,然后在操作之后将其添加到DOM中。
var $表= $(# mytable);
VaR母= table.parent美元(美元);

table.detach美元();
例如,在这里/…给桌子加了很多线。
parent.append美元(表);

使用外部样式表修改大量元素的样式

当使用美元。fn.css修改超过20个元素的样式,你应该考虑直接风格的标签添加到页面,据说性能可以提高60%。
当使用此方法时,元素小于20,速度慢时超过20。
$('a.swedberg)。Css(色彩、# asd123);

20个冗余元素,应该考虑直接在页面上添加样式标签。
$('')
appendto(很);

使用美元。数据fn.data代替美元。

应用美元。数据的DOM元素比调用$快10倍。fn.data直接选择。当然,前提是要理解差异的DOM元素和jquery结果之间建立第一。
一般{速度}
$(元)数据(键,值);

快10倍
美元。数据(元素、关键、价值);

不要浪费时间在空元素上

jQuery不会主动告诉您在空白结果集上运行代码,而且在执行过程中没有错误,所以在执行代码之前,您需要判断结果集是否为空:
不好:在实现了三个函数之后
结果发现没有元素集合
$(# nosuchthing)。SlideUp();

/好的
myselection = $(var $ ' # nosuchthing);
如果(myselection美元。长度){ $ myselection.slideup();}

/ /最好的:添加一个doonce插件
jquery.fn.doonce =函数(函数){
This.length func.apply(本);
返回此;
}

(李美元。cartitems)。DoOnce(function(){)
在这里您可以确保结果集不是空的。
});

此方法特别适用于jQuery UI方面,因为即使结果集中不包含任何元素,开销也非常昂贵。

变量的定义

您可以在一个语句中定义多个变量:
/旧方法
var测试= 1;
VaR TEST2 =函数(){…};
VaR test3 = test2(测试);

/新方法
var测试= 1,
test2 =函数(){…},
试验= test2(测试);

在自执行函数中,变量甚至不能定义为:
(函数(富,条){ })(1, 2);

条件判断
土壤法
如果(type'foo'type | | = = = = 'bar){…}

/更高级的方法
(如果 / ^(Foo |酒吧)$ /。试验(型)){…}

使用对象查找
如果{({ 1,bar:1 })){ } }…}

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部