只是想问一下以下哪个是与 Jquery 一起使用的更好选择
$('#thisontainer div.thisWrapper')
或者
$('#thisontainer .thisWrapper')
第二个更快吗?
我也很想知道为什么将 html 标签添加到 Jquery 选择器时性能会降低,我也相信 CSS 选择器?
谢谢你
我会做$('#thisontainer').find('.thisWrapper');
如果您有类属性,请不要将其与标签名称一起使用,只需使用类名称即可
看看这个jspref测试
有一个排名。
http://www.vanseodesign.com/css/css-selector-performance/
它想说的是 id 最快,然后是 classes,然后是 tags。
标签速度较慢的原因是浏览器在后台映射出页面上的所有数据。当你说这样的事情时a.mySweetClass
,从左到右解析。所以所有a
标签都被抓取,然后从 A 标签中,它被减少到mySweetClass
. 我读过一篇更好的文章,我希望我能找到它。我会继续看下去,我也会很快为您提供一些更好的时序图。
CSS 选择器从右到左评估:
我的错:但这里有一些有趣的结果 http://jsperf.com/jquery-tag-vs-class
我认为这两种方式都不会有显着差异。
渲染 html 标签和处理 css 规则或 jQuery 选择器是昂贵的任务,为了保持可接受的性能,必须小心使用它们。我发现即使是非常简单的 CSS 规则也会导致严重的性能问题。
所以这里有一些建议:
每当您创建 CSS 规则时,请考虑如何处理它。作为每个节点的背景的动画 gif 可能会大大降低站点速度,因为必须为每个节点独立处理图像: * { background:url(bkg.gif); }
不要在整个 DOM 中重复节点搜索,而是在您已经找到的 DOM 树的部分中搜索节点。所以代替:
for(var i=0; i < 100; i++)
$('#thisontainer .something').somecall();
利用:
var c = $('#thisontainer');
for(var i=0; i < 100; i++)
$('.something', c).somecall();
请注意您在 setInterval 或 setTimeout 调用中对 DOM 所做的更改。对 DOM 的更改通常比简单的变量处理更昂贵,因此不是将重要值存储为属性,而是使用 jQuery 的 .data() 将它们存储在 javascript 对象中