为缓存原因调用非现有元素上的Jquery的开销

时间:2012-08-02 21:48:56

标签: javascript jquery html html5

如果JQuery调用不存在的元素,那么它的开销是多少?它不会抛出任何错误,但除了加载脚本之外还有很多cpu开销吗?如果这是针对一个类或一个id做的那么重要吗?

由于缓存原因和保持同时连接的原因至少我将每个页面的所有onload脚本保存在一个文件中,但我想知道是否有效或不告诉我的javascript它在哪个页面并加载只有通过if语句或switch语句实际在该页面上运行的代码位。我不想将它们放在单独的文件中,因为我希望每次页面在初次访问后尽可能多地从缓存中加载。

您在主页上的示例,但该文件或onload中包含产品页面javascript。

$('#product_options').hover(function(){},function(){});

但此页面上不存在product_options,因为它是主页。

它是否会对

等类产生影响
$('.addtocart').click(function(){})

应该注意,这不会在JQuery中引发任何错误。

2 个答案:

答案 0 :(得分:2)

jQuery有一个特殊的“快速”路径来处理单个id选择器,例如#product_options;所有其他选择器都以更加复杂的方式处理。如果你保持id选择器,性能影响将是不可测量的。

如果你使用其他选择器,那么性能命中率将相对大得多绝对意义上说,除非我们谈论几十个选择器,否则不太可能产生太大影响。

然而,你可以通过将代码放在函数中来回避所有这些,然后从每个页面调用只有那些相关的代码。在每个页面写作并不算太多

<script type="text/javascript">
$(function() {
    doSomething();
    doSomethingElse();
});
</script>

恕我直言,这是在不将代码分散到多个文件中同时也不会尝试运行死代码之间的平衡。

答案 1 :(得分:1)

会有性能损失,因为即使确定没有匹配也必须完成工作。现在,总的来说,这是非常小的,除非你有一个巨大的Javascript令人兴奋的Web应用程序,否则你可能不必担心它 - 想想Facebook。也就是说,只运行应该在页面上运行的代码仍然是很好的做法,我发现这样做的最好方法是Paul Irish的方法,Markup-based unobtrusive comprehensive DOM-ready execution