做好七件事帮你提升jQuery的性能_jquery

1. Append Outside of Loops

凡是触及到DOM都是有代价的。如果你向DOM当中附加大量的元素,你会想一次性将它们全部附加进来,而不是分多次进行。当在循环当中附加元素就会产生一个常见的问题。

复制代码 代码如下:

$.each( myArray, function( i, item ) {
    var newListItem = "<li>" + item + "</li>";
    $( "#ballers" ).append( newListItem );
});

一个常用的技巧是利用文档片段(document fragment)。在循环的每一次迭代当中,将元素附加到片段而不是DOM元素当中。当循环结束后,将片段附加到DOM元素当中即可。

复制代码 代码如下:

var frag = document.createDocumentFragment();

$.each( myArray, function( i, item ) {

    var newListItem = document.createElement( "li" );
    var itemText = document.createTextNode( item );

    newListItem.appendChild( itemText );

    frag.appendChild( newListItem );

});

$( "#ballers" )[ 0 ].appendChild( frag );

另一个简单的技巧是在循环的每次迭代当中,持续构建一个字符串。当循环结束后,将DOM元素的HTML设置成该字符串。

复制代码 代码如下:

var myHtml = "";

$.each( myArray, function( i, item ) {

    myHtml += "<li>" + item + "</li>";

});

$( "#ballers" ).html( myHtml );

当然还有其它一些技巧可以供你尝试。一个名为 jsperf 的站点为测试这些性能提供了一条好的出路。该网站允许你使用基准测试每一个技巧,并将其跨平台的性能测试结果可视化的展现出来。

2. Cache Length During Loops

在for循环当中,不要每次都访问数组的 length 属性;应当事先将其缓存起来。

复制代码 代码如下:

var myLength = myArray.length;

for ( var i = 0; i < myLength; i++ ) {

    // do stuff

}

3. Detach Elements to Work with Them

操作DOM是缓慢的,因此你想尽可能减少对齐进行操作。jQuery在1.4版本当中引入了名为 detach() 的方法来帮助解决这一问题,它允许你在对元素进行操作时,将它们从DOM当中分离出来。

复制代码 代码如下:

var $table = $( "#myTable" );
var $parent = $table.parent();

$table.detach();

// ... add lots and lots of rows to table

$parent.append( $table );

4. Don't Act on Absent Elements

如果你正打算在一个空的选择器上运行大量的代码,jQuery并不会给予任何的提示 -- 它将会继续的执行,就像是没有发生任何的错误。必须由你来验证选择器包含了多少元素。

复制代码 代码如下:

// Bad: This runs three functions before it
// realizes there's nothing in the selection
$( "#nosuchthing" ).slideUp();

// Better:
var $mySelection = $( "#nosuchthing" );

if ( $mySelection.length ) {

    $mySelection.slideUp();

}

// Best: Add a doOnce plugin.
jQuery.fn.doOnce = function( func ) {

    this.length && func.apply( this );

    return this;

}

$( "li.cartitems" ).doOnce(function() {


    // make it ajax! \o/


});

本指南特别适用于那些当选择器不包含元素时还需要大量的开销的 jQuery UI 部件。

5. Optimize Selectors

选择器的优化和过去比起来并不是那么的重要,因为很多浏览器都实现了 document.querySelectorAll() 方法并且jQuery将选择器的负担转移到了浏览器上面。但是仍然有一些技巧需要铭记在心。

基于ID的选择器

以一个ID作为选择器的开始总是最好的。

复制代码 代码如下:

 // Fast:
 $( "#container div.robotarm" );

 // Super-fast:
 $( "#container" ).find( "div.robotarm" );

采用 .find() 方法的方式将更加的快速,因为第一个选择器已经过处理,而无需通过嘈杂的选择器引擎 -- ID-Only的选择器已使用 document.getElementById() 方法进行处理,之所以快速,是因为它是浏览器的原生方法。

特异性

尽量详细的描述选择器的右侧,对于左侧则应反其道而行之。

复制代码 代码如下:

 // Unoptimized:
 $( "div.data .gonzalez" );

 // Optimized:
 $( ".data td.gonzalez" );

尽量在选择器的最右侧使用 tag.class 的形式来描述选择器,而在左侧则尽量只使用 tag 或者 .class 。

避免过度使用特异性

复制代码 代码如下:

 $( ".data table.attendees td.gonzalez" );

 // Better: Drop the middle if possible.
 $( ".data td.gonzalez" );

去讨好“DOM”总是有利于提升选择器的性能,因为选择器引擎在搜寻元素时无需进行太多的遍历。

避免使用通用选择器

如果一个选择器明确或暗示它能在不确定的范围内进行匹配将会大大影响性能。

复制代码 代码如下:

 $( ".buttons > *" ); // Extremely expensive.
 $( ".buttons" ).children(); // Much better.

 $( ".category :radio" ); // Implied universal selection.
 $( ".category *:radio" ); // Same thing, explicit now.
 $( ".category input:radio" ); // Much better.
 Use Stylesheets for Changing CSS on Many Elements

假如你使用 .css() 方法来改变超过20个元素的CSS,应当考虑为页面添加一个样式标签作为替代,这样做可以提升将近60%的速度。

复制代码 代码如下:

 // Fine for up to 20 elements, slow after that:
 $( "a.swedberg" ).css( "color", "#0769ad" );

 // Much faster:
 $( "<style type=\"text/css\">a.swedberg { color: #0769ad }</style>")
     .appendTo( "head" );
 Don't Treat jQuery as a Black Box

把jQuery的源码当成文档,可以把它(http://bit.ly/jqsource)保存在你的收藏夹内,经常的查阅参考。

时间: 2024-08-04 03:30:09

做好七件事帮你提升jQuery的性能_jquery的相关文章

帮你提升jQuery的性能 的七件事

 这篇文章主要介绍了做好七件事帮你提升jQuery的性能的相关资料,需要的朋友可以参考下 1. Append Outside of Loops   凡是触及到DOM都是有代价的.如果你向DOM当中附加大量的元素,你会想一次性将它们全部附加进来,而不是分多次进行.当在循环当中附加元素就会产生一个常见的问题.    代码如下: $.each( myArray, function( i, item ) {     var newListItem = "<li>" + item +

提升jQuery的性能需要做好七件事_jquery

做好七件事帮你提升jQuery的性能,想知道哪几件事情吗? 1. Append Outside of Loops 凡是触及到DOM都是有代价的.如果你向DOM当中附加大量的元素,你会想一次性将它们全部附加进来,而不是分多次进行.当在循环当中附加元素就会产生一个常见的问题. $.each( myArray, function( i, item ) { var newListItem = "<li>" + item + "</li>"; $( &

企业财务七件事

每一家企业对财务管理都很重视,企业规模不同,企业性质各有差异,财务机构的设置.人员配备.机构内部岗位设置也不尽相同,但从企业财务应具备的职能上看,无论企业财务机构.岗位如何设置,人员如何配备,作为企业管理过程中不可或缺的财务,应具备以下七个方面的职能,做好七件事,尽管这些职能在不同的企业强弱显现不同. 一.算好账 会计核算是企业财务管理的技撑,是企业财务最基础最重要职能之一.会计的基本职能无论是二职能论(反映与监督).三职能论(反映.监督及参与决策)还是五职能论(反映.监督.预算.控制与决策),

网站优化要做好的七件事

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 网站优化已经不再是什么新鲜的事情了,做优化的人也是太多了,同时也出现了优化技术良莠不齐的现象,其实呢,优化更多的靠自己的经验.今天我根据自己的经验,也参考一些资料总结总结出了网站优化要做好的八件事情. 其实网站优化的开始阶段是筹建网站的时候,到网站的运营阶段也离不开对网站优化的考虑. 网站优化要做好的七件事: 一.首先是网站的设计 很多人喜欢

《众妙之门——JavaScript与jQuery技术精粹》——第1章 初学JavaScript 需知的七件事 1.1 缩略标记

第1章 初学JavaScript 需知的七件事 我很早以前就开始编写JavaScript代码,很高兴看到这种语言在今天所取得的成功,能成为这个成功故事中的一部分我很开心.关于JavaScript,我写过许多文章.章节以及一整本书,直到今天我仍在寻找新的东西.下文是一些我工作学习过程中激动时刻的记录,大家与其守株待兔,不如自己尝试去体会这种感受. 1.1 缩略标记 众妙之门--JavaScript与jQuery技术精粹 在创建对象和数组过程中可以使用缩略标记是我喜欢JavaScript的重要原因之

学习SEO你要做的七件事

学习SEO或许不用那么高深的编程技术,学习SEO或许不用精通页面设计,学习SEO 也不需要DIV+CSS;学习SEO并不是一件难事,但是在学习过程中,如果想精通SEO,那么我们就不得不去做几件事. 1.学习SEO需要有持之以恒的精神. 学习SEO为什么要有一种持之以恒的精神?SEO是一项长期从事的工作,因为这项工作与搜索引擎息息相关,搜索引擎不断收录网站,才会不断积累网站权重,才会提升网站关键词排名,这是一个不变的算法.所以即便我们有很强的SEO技巧,我们仍然需要不断的更新网站内容.不断的优化网

甘作巧媳妇 CIO需做到的“开门”七件事

巧妇开门七件事:"柴米油盐酱醋茶".CIO在企业中像老板的"巧媳妇"一样"花最少的钱,做最多的事",在捉襟见肘的信息化预算中竭尽全力维持着一个个信息化项目展开.因此,CIO也需要和巧媳妇一样必须做到"开门"七件事. 开门第一事:让员工先说话 http://www.aliyun.com/zixun/aggregation/17595.html">国内企业有个习惯,开会时总是领导先发言,然后才让员工发表意见.这样做

茶道长 专注一件事做好一件事

2017年的微商势头相比较去年,已经下降了不少,但是"新花样"却是层出不穷,微商就是用这种方式,向人们证明着自己的无可替代性. 茶道长 进入微商也并非偶然 茶道长,在某电信运营商工作多年.后辞职下海创业,从事通信行业相关商业项目.2013年5月一次偶然在国家博物馆看画展的机遇,接触到微信公众号,敏感的茶道长意识到微信会是一个潜力巨大的创业风口,便毅然终止原有业务,原有团队全部转型微信公众号运营. 自2013年进军微商行业,就以其独到的见识和方式,迅速在微商占领一席之地,并且引领微商从杂

研究生创办“七件事”卖菜网

新华网武汉5月13日电(记者李鹏翔)不愿顶着日头出门买菜的市民,只需轻点鼠标,第二天就会有人送货上门--中南财经政法大学哲学院的五位二年级研究生日前合办了一个名叫"七件事"的卖菜网,服务对象首先确定为小区的白领. 据介绍,提出开办卖菜网创意的张尧齐是马克思主义哲学专业的研二学生.他表示,目前,网购已成为一种潮流,既然可以在网上买衣服.买书.买电子产品,那像柴米油盐甚至是时令蔬菜等在网上卖同样也会有商机. 张尧齐把想法与外国哲学专业的刘富生.政治学专业的刘大伟.宋晓东及中国近代史专业的李