链接jQuery选择器是否有任何负面影响?
在选择器上链接jQuery API调用是否有任何负面影响? 我特别感兴趣的是处理性能、设计、易受内存泄漏影响的负面影响 那么,链接这样的语句:链接jQuery选择器是否有任何负面影响?,jquery,performance,jquery-selectors,chaining,Jquery,Performance,Jquery Selectors,Chaining,在选择器上链接jQuery API调用是否有任何负面影响? 我特别感兴趣的是处理性能、设计、易受内存泄漏影响的负面影响 那么,链接这样的语句: $('.myElement').css('color','green') .attr('title','My Element') .click(function(){ console.log('clicked') }); 是否让应用程序受到上述任何负面影响的影响 我个人对链接jQuery表达式
$('.myElement').css('color','green')
.attr('title','My Element')
.click(function(){ console.log('clicked') });
是否让应用程序受到上述任何负面影响的影响
我个人对链接jQuery表达式没有任何问题,但我见过很多人抨击链接,我想知道避免链接是否有任何具体好处,或者这只是可读性和个人风格的问题。链接实际上比这样做更好:
$('.myElement').css('color','green')
$('.myElement').attr('title','My Element')
$('.myElement').click(function(){ console.log('clicked') });
因为这样做会使jquery“跳入池”查找我的元素3次,而如果链接订单,它只会在池中查找一次(注意池是DOM:)链接只是调用返回对象上的方法。这本身没有什么好的或坏的。有些人喜欢,有些人不喜欢
关于内存泄漏,当您完成DOM遍历时,jQuery会保留一组缓存的jQuery对象。这实际上与链接没有多大关系,因为被引用的jQuery对象也会做同样的事情,但我认为如果保留对该对象的永久引用,可能会导致泄漏
例如,如果你这样做
var jq_obj = $('.my_class').parents('.another_class');
jq_obj.end();
…jQuery对象现在引用了“.my_class”
元素的祖先,这些元素具有”。另一个\u class“
类
问题是你可以这样做
var jq_obj = $('.my_class').parents('.another_class');
jq_obj.end();
…现在您有了对原始“.my_class”
元素的引用。这意味着保留了原始参考
因此,如果在调用
.parents()
之后,如果您停在那里(没有调用.end()
),并且如果您保留了对该jq\u obj
对象的全局引用,那么现在您将隐式引用所有“.my\u class”
元素以及”。另一个类“
元素
同样地,如果从DOM中删除了任何原始的“.my_class”
元素,则由于该引用,它们不能被GC化
这里有一个例子
len
变量将是被选中的“.my_class”
元素的原始数量,即使“.my_class”
元素已被删除
即使我们的
jq\u obj
对象正在引用”。另一个类“
元素,情况也是如此。原因是.prevObject
属性引用了执行原始DOM选择的jQuery对象,因此只要jq_obj
存在,就不会释放节点。除了设计之外,我看不出它是如何受语法影响的,您所问的其他负面影响似乎只可能是特定解释器实现的弱点。“很多人在我的工作中抨击链接”=>references?,最近我也在这里看到了一些例子。我会看看我是否能把它们挖出来,其中一个肯定是在最近的一个悬赏问题上,回答者告诉提问者“停止链接,这就是Hipster编写代码的方式,可能是您遇到问题的原因”:)链接是JQuery的主要优点之一。。。如果您使用JQuery,我不明白为什么您不应该链接。我认为更多的是对JQuery的抨击,这是有道理的。问题不在于JQuery的链接。对于jQuery本身,它会导致平均一个数量级的性能损失。是的,链接比您的示例更好,但您的意思是,通过不链接,您必须进行冗余DOM选择,而事实并非如此。