使用$的JQuery/JavaScript性能(此)
我发现自己做了很多这种JQuery:使用$的JQuery/JavaScript性能(此),javascript,jquery,Javascript,Jquery,我发现自己做了很多这种JQuery: $('.filter-topic-id').each(function () { var me = $(this); if (me.text() == topics[k]) { me.parent().show(); } }); 我将$(this)存储在一个名为me的变量中,因为我担心它会无缘无故地重新计算$(this)。主要的JavaScript引擎是否足够聪明,知道它不必重新评估它?也许甚至JQuery在某种程度
$('.filter-topic-id').each(function () {
var me = $(this);
if (me.text() == topics[k]) {
me.parent().show();
}
});
我将
$(this)
存储在一个名为me
的变量中,因为我担心它会无缘无故地重新计算$(this)
。主要的JavaScript引擎是否足够聪明,知道它不必重新评估它?也许甚至JQuery在某种程度上也足够聪明?如果代码是这样说的,那么他们也不太聪明,不会再次重新评估$(这个)
。在变量中缓存jQuery对象是最佳实践
如果你的问题指的是你在问题中的方式,那么与这种方式相比
$('.filter-topic-id').each(function () {
if ($(this).text() == topics[k]) { // jQuery object created passing in this
$(this).parent().show(); // another jQuery object created passing in this
}
});
您的方式是最佳实践。这只不过是迭代中对当前DOM元素的引用,因此调用$(this)时很少或根本没有开销。它只是在DOM元素周围创建了一个jQuery包装器。您可以尝试使用$(这)来分析代码,看看是否多次使用$(这)会降低应用程序的速度。javascript无法确定以下情况是否属实:-
fn(x) == fn(x);
即使这是可能的,但只有在能够保证fn
没有其他副作用的情况下,不调用第二个fn
才有效。如果对fn
的调用之间存在其他代码,那么就更加困难了
因此Javascript引擎别无选择,只能在每次调用时实际调用fn
调用$()的开销很小,但并非微不足道。我当然会像您所做的那样将结果保存在局部变量中。我想您会发现,通过传递dom元素调用jQuery函数可能是构造对象的最简单的方法。它不必进行任何查找或查询DOM,只需将其包装并返回即可 也就是说,使用你在那里使用的方法肯定没有什么坏处,我自己也一直都是这么做的。当您创建嵌套闭包时,它当然有助于:
$('div').click(function() {
var $this = $(this);
$this.find("p").each(function() {
// here, there's no reference to the div other than by using $this
alert(this.nodeName); // "p"
});
});
主要的JavaScript引擎是否足够聪明,知道它不必重新评估它
不,但是如果您使用jQuery,那么您可能是为了可读性,而不是为了获得最佳性能
写下你认为最容易阅读和维护的版本,不要担心像这样的微优化,直到你的页面太慢,并且你已经耗尽了其他更重要的延迟源。调用
$(node)
…所涉及的工作并不多,这本身就有一些开销。