我应该关心这种优化-jQuery-DOM更改吗

我应该关心这种优化-jQuery-DOM更改吗,jquery,performance,dom,Jquery,Performance,Dom,我有一个简单的问题,如果循环(对于循环,…)之外,是否值得“缓存”DOM更改,例如,如果我有1000个即将进行的更改,它将极大地提高性能(正如我所听到的,不是我自己衡量的),但如果我只替换这样的内容会怎么样 jQuery("#subMenu").html( jQuery( html ).find( "#subMenu" ).html() ); jQuery("#pageMain").html( jQuery( html ).find( "#pageMain" ).html()); jQuery(

我有一个简单的问题,如果循环(对于循环,…)之外,是否值得“缓存”DOM更改,例如,如果我有1000个即将进行的更改,它将极大地提高性能(正如我所听到的,不是我自己衡量的),但如果我只替换这样的内容会怎么样

jQuery("#subMenu").html( jQuery( html ).find( "#subMenu" ).html() );
jQuery("#pageMain").html( jQuery( html ).find( "#pageMain" ).html());
jQuery("#text").html( jQuery( html ).find( "#text" ).html());   
我能做到

var cachedDOM = jQuery("body").html(); //edited
jQuery(cachedDOM).find("#pageMain").html( jQuery( html ).find( "#pageMain" ).html());
jQuery("body").html(cachedDOM);
这可能会更快,但我需要重新绑定所有事件,等等。。 在这种情况下,缓存DOM真的更好吗?我不这么认为,但我想让页面尽可能快(尤其是在老版本的IEs中)


谢谢

始终使用JQuery的内置选择器,而不是尝试“缓存”和遍历变量。无论如何,从身体开始你的穿越是违反直觉的


证明选择器比伪缓存快得离谱:

始终使用JQuery的内置选择器,而不是尝试“缓存”和遍历变量。无论如何,从身体开始你的穿越是违反直觉的


证明选择器比伪缓存快得离谱:

您的第二个代码甚至无法实现

$var cachedDOM=jQuery(“body”).html()

我想你是说

var$cachedDOM=jQuery(“body”).html()

那么这一行:

jQuery(cachedDOM)
相对

您实际上是在该行上克隆web页面的整个HTML,因此您可以像普通DOM一样在其中搜索。使用第一种方法会快得多。我认为您正在寻找的缓存类型,它确实提供了可变速度提升,类似于:

var $body = jQuery("body");
$body.find("#pageMain").html($body.find("#pageMain").html());

速度提升取决于选择器的复杂程度。例如,由于IE的大多数版本都没有jQuery可以利用的
document.getElementsByCassName()
函数,因此具有大量类的选择器速度非常慢,最好是缓存结果。例如:
jQuery(“div.left-column.highlighted li.link-list a.active”)如果你在IE中用相当复杂的DOM运行这样一行1000次,与缓存一次并使用缓存999次相比,你可以得到明显的速度差异。

你的第二个代码甚至不会产生任何效果

$var cachedDOM=jQuery(“body”).html()

我想你是说

var$cachedDOM=jQuery(“body”).html()

那么这一行:

jQuery(cachedDOM)
相对

您实际上是在该行上克隆web页面的整个HTML,因此您可以像普通DOM一样在其中搜索。使用第一种方法会快得多。我认为您正在寻找的缓存类型,它确实提供了可变速度提升,类似于:

var $body = jQuery("body");
$body.find("#pageMain").html($body.find("#pageMain").html());

速度提升取决于选择器的复杂程度。例如,由于IE的大多数版本都没有jQuery可以利用的
document.getElementsByCassName()
函数,因此具有大量类的选择器速度非常慢,最好是缓存结果。例如:
jQuery(“div.left-column.highlighted li.link-list a.active”)如果你在IE中用一个相当复杂的DOM运行这样一行1000次,与缓存一次并使用缓存999次相比,你可以得到明显的速度差异。

他的缓存代码不正确,正在克隆整个身体。这就是为什么速度较慢。实际上,缓存会更快。反正都是缓存的。这一切都在客户端,DOM已经呈现。JQuery不会获取新的DOM,它会遍历现有的DOM,这就是缓存。现在,如果我们谈论的是创建临时变量来存储迭代之外的计算,那将是另一回事。缓存选择器的结果可以节省时间,我认为他没有提到客户机-服务器网络缓存在任何地方缓存主体的结果,然后遍历和
find()
具有ID的某个节点?来吧,伙计;)好的…有趣的是,它真的快多了…有趣的是,即使这是安静的一样快他的缓存代码是不正确的,正在克隆整个身体。这就是为什么速度较慢。实际上,缓存会更快。反正都是缓存的。这一切都在客户端,DOM已经呈现。JQuery不会获取新的DOM,它会遍历现有的DOM,这就是缓存。现在,如果我们谈论的是创建临时变量来存储迭代之外的计算,那将是另一回事。缓存选择器的结果可以节省时间,我认为他没有提到客户机-服务器网络缓存在任何地方缓存主体的结果,然后遍历和
find()
具有ID的某个节点?来吧,伙计;)好的。有趣的是,它真的快多了。有趣的是,即使这是安静的同样快。你应该知道的第一个关于速度的想法是,你只能通过测试说它快了多少(如果有的话)。使用旧代码和新代码运行一些测试,看看它有多快(如果有的话)。然后决定它是否值得。你应该知道的第一个关于速度的想法是,你只能通过测试真正说出它的速度有多快(如果有)。使用旧代码和新代码运行一些测试,看看它有多快(如果有的话)。然后决定它是否值得。是的,这是错误的,我的意思是
var cachedDOM=jQuery(“body”).html()主要思想是,当我在live DOM(可见网页)中更改某些内容时,浏览器必须呈现所有更改,而当我一次进行更多更改时,应该比第一次更改->呈现页面,然后第二次更改->呈现页面快,但这似乎不是真的。。谢谢,这是错误的,我的意思是
var cachedDOM=jQuery(“body”).html()主要思想是,当我在live DOM(可见网页)中更改某些内容时,浏览器必须呈现所有更改,当我同时进行更多更改时,它应该比第一次更改->r更快