Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用$的JQuery/JavaScript性能(此)_Javascript_Jquery - Fatal编程技术网

使用$的JQuery/JavaScript性能(此)

使用$的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在某种程度

我发现自己做了很多这种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)

…所涉及的工作并不多,这本身就有一些开销。