jQuery 中很方便的方法是否在性能上造成不必要的浪费~
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
点击显示其他隐藏:
$('li').on('click', function () {
$(this).show().siblings().hide();
});
var li = $('li');
li.on('click', function () {
li.hide();
$(this).show();
});
第二种方法是否比第一种更加优化 第一种的 siblings 方法是不是每次都去重复的获取相邻元素 等同于频繁的操作 dom 了
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
这个问题不是绝对的说第一种方式好还是第二种方式好
第一种方式程序具有更好的可读性,代码基本就能对应到你的编程思路,这样的代码很明确
第二种方式效率会高一点,但是在浏览器中这点性能基本可以忽略不计
所以说第一种方式是有性能浪费,但是并不是不必要的,有时候还很有必要!
如果在比较复杂的系统中建议使用第一种方式,便于后期可持续开发和维护,对于明显对性能有影响的地方,应该是单独提出来一个方法,比如
showCurrentItem
,函数里面是你优化的代码,外层一定要保持良好的可读性我个人认为,第二种更快一些。因为间接的少了一部siblings。我个人理解,操作DOM是指花在渲染上的时间,并不是你parent什么的。
jQuery 查询是个比较耗时的过程,所以,每次都进行
siblings()
查询肯定性能会低一些。但注意第二种方法有两个问题
全局污染。当然如果你的 li 不是全局,这个情况会好一些。但至少这里它只在 click 方法中用到,应该尽可能小的限定其作用域,可以适当的采用闭包(如果它所在的作用域本来就很小了,可以不管)
li
这个集合一开始就已经取了,如果后面还有代码修改 DOM 添加或者删列表项,那这里就会有问题。这种情况下应该使用第一种方案。总的来说,这点性能差是可以不用考虑的,毕竟这不是一个密集计算的环境。
2种方式都不好!
这种情况最好的方式是把点击事件绑定在li的父级元素ul上。利用事件委托的方式来搞定。
性能几乎一致,因为底层都会遍历所有节点
开发阶段还是优先考虑可读性。