Javascript jQuery性能
想象一下,您必须经常进行DOM操作(在我的例子中,这是一种动态列表) 看看这个例子:Javascript jQuery性能,javascript,jquery,Javascript,Jquery,想象一下,您必须经常进行DOM操作(在我的例子中,这是一种动态列表) 看看这个例子: var $buffer = $('<ul/>', { 'class': '.custom-example', 'css': { 'position': 'absolute', 'top': '500px' } }); $.each(pages[pindex], function(i, v){ $buffer.app
var $buffer = $('<ul/>', {
'class': '.custom-example',
'css': {
'position': 'absolute',
'top': '500px'
}
});
$.each(pages[pindex], function(i, v){
$buffer.append(v);
});
$buffer.insertAfter($root);
这很好用,我唯一不满意的是它的性能。我做缓存
我正在研究的所有DOM元素。
在不深入研究jQuery的源代码的情况下,我的性能问题是否有可能存在
jQuery是否使用DocumentFragments来追加内容
如果使用
var new = $('<div/>')
var new=$(“”)
它只存储在内存中
现在不是吗?一个接一个地创建DOM节点通常比创建HTML字符串并让浏览器(通过innerHTML)处理要慢。以下是相关内容。逐个创建DOM节点通常比创建HTML字符串并让浏览器(通过innerHTML)处理要慢。以下是相关内容。如果您考虑性能,您应该将所有
子元素作为字符串来构造整个
元素。对字符串连接使用“+=”操作。最后,使用jQuery在网页中插入构造的字符串
请参阅关于字符串性能。如果您考虑性能,您应该将所有
子元素作为字符串来构造整个
元素。对字符串连接使用“+=”操作。最后,使用jQuery在网页中插入构造的字符串
请参阅关于字符串性能。有一个(jQuery创建者)说jQuery实际上在内部使用文档片段。在下面的幻灯片中,他简要地解释了如何构建一个轻量级文档片段,并在一个操作中附加它,说明这是“”。如果您还没有(正如您自己提到的文档片段)的话,您可能希望对此进行研究
至于使用$(“”)
创建新元素的过程,则说明:
但是,如果字符串看起来是一个HTML片段,jQuery将尝试创建HTML描述的新DOM元素。然后创建并返回引用这些元素的jQuery对象
如果为更复杂的html片段提供单个标记和“浏览器的innerHTML机制”,jQuery将使用“本机JavaScript createElement()函数”。有一个(jQuery创建者)说jQuery实际上在内部使用文档片段。在下面的幻灯片中,他简要地解释了如何构建一个轻量级文档片段,并在一个操作中附加它,说明这是“”。如果您还没有(正如您自己提到的文档片段)的话,您可能希望对此进行研究
至于使用$(“”)
创建新元素的过程,则说明:
但是,如果字符串看起来是一个HTML片段,jQuery将尝试创建HTML描述的新DOM元素。然后创建并返回引用这些元素的jQuery对象
如果您为更复杂的html片段提供单个标记和“浏览器的innerHTML机制”,jQuery将使用“本机JavaScript createElement()函数”。几天前我也遇到了同样的问题。如果这样做,速度会快得多:
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);
var buffer=$('
)
var html=''
$。每个(页[pindex],函数(i,v){
html+=v
});
html(html)
buffer.insertAfter($root);
(注意:在您的示例中,缓冲区已经是jquery对象,您不需要为insertAfter重新选择它)我几天前也遇到了同样的问题。如果这样做,速度会快得多:
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);
var buffer=$('
)
var html=''
$。每个(页[pindex],函数(i,v){
html+=v
});
html(html)
buffer.insertAfter($root);
(注意:在您的示例中,缓冲区已经是jquery对象,您不需要为insertAfter重新选择它)好的,这样做确实更快。不幸的是,我不能这样做,因为pages[pindex]包含带有.data和事件处理程序的jQuery对象。但不管怎样+1,这样做确实更快。不幸的是,我不能这样做,因为pages[pindex]包含带有.data和事件处理程序的jQuery对象。但是无论如何+1。