繁体   English   中英

jQuery性能

[英]jQuery performance

想象您必须做很多DOM操作(就我而言,它是一个动态列表)。

看这个例子:

var $buffer = $('<ul/>', {
                'class': '.custom-example',
  'css':  {
   'position':  'absolute',
   'top':   '500px'
  }
           });

$.each(pages[pindex], function(i, v){
 $buffer.append(v);
});

$buffer.insertAfter($root);

“页面”是一个数组,将LI元素保存为jQuery对象。

“ $ root”是UL元素

这段代码之后发生的事情是,两个UL都进行了动画处理(滚动),最后,在动画的回调中执行了以下代码:

$root.detach();
$root = $buffer;
$root.css('top', '0px');
$buffer = null;

效果很好,我唯一想得到的就是性能。 我确实缓存了所有要使用的DOM元素。 在不深入研究jQuery源代码的情况下,是否有可能出现我的性能问题?

jQuery是否使用DocumentFragments附加内容?

如果您使用创建新的DOM元素

var new = $('<div/>') 

它现在只存储在内存中吗?

如果您考虑性能,则应将所有<li>子元素作为字符串构造整个<ul>元素。 对字符串串联使用“ + = ”操作。 最后,使用jQuery在网页内插入构造的字符串。

有关字符串性能的信息,请参见http://www.sitepen.com/blog/2008/05/09/string-performance-an-analysis/

John Resig (jQuery的创建者)有一张幻灯片 ,他说jQuery实际上确实在内部使用文档片段。 在下面的幻灯片中,他简要地解释了如何构建一个轻量级的文档片段,并将其附加到一个操作中,说明此操作“ 最终变得非常快 ”。 如果您还没有这样做的话,您可能想研究一下(正如您自己提到的文档片段)。

至于使用$('<div>')创建新元素的过程, 文档说:

但是,如果该字符串看起来像是HTML代码段,则jQuery尝试创建HTML所描述的新DOM元素。 然后,创建并返回一个引用这些元素的jQuery对象。

如果您提供单个标记,则jQuery使用“本机JavaScript createElement()函数”,而对于更复杂的html代码段,则使用“浏览器的innerHTML机制”。

几天前我也遇到了同样的问题。 如果这样做的话,速度会更快:

var buffer = $('<ul class="custom-example" style="position: absolute; top:500px"></ul>')

var html = ''

$.each(pages[pindex], function(i, v){
   html += v
});

buffer.html(html)

buffer.insertAfter($root);

(注意:在您的示例缓冲区中,缓冲区已经是一个jquery对象,您无需为insertAfter更改它)

通常一一创建DOM节点要比创建HTML字符串并使浏览器(通过innerHTML)对其进行处理要慢。 这是有关此的更多详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM