优化选择器
Prev Chapter 9. 性能调优的最佳实践 Next

优化选择器

随着越来越多浏览器实现了document.querySelectorAll(), 选择器的重担从 jQuery 转移了给浏览器,其优化已经没有以前那么重要了。 不过,有些 tips 还是需要紧记的。

ID 选择器

选择器以 ID 开始总是最好的。

//  快
$('#container div.robotarm');

// 非常快
$('#container').find('div.robotarm');

使用 $.fn.find 的方式会更快是因为在第一步里只有 ID, 根本没用到快速选择器引擎,而是使用了浏览器内置的极速的 document.getElementById()。

具体指定

选择器的右侧部分应该尽可能具体,左侧则不需要那么具体。

// 未优化的
$('div.data .gonzalez');

// 优化过的
$('.data td.gonzalez');

如果可以,尽量在选择器靠右侧的部分使用 tag.class, 而左侧只有 tag 或者只有 .class。

避免过度的具体

$('.data table.attendees td.gonzalez');

// 如果可以不写中间的部分会更好
$('.data td.gonzalez');

清爽的 DOM 结构也有助于改善选择器的性能, 选择器引擎可以少跑几层去寻觅那个元素了。

避免使用无定向选择器

如果选择器指明或者暗示匹配的元素可能在任何地方出现,那可能会是非常慢的。

$('.buttons > *');  // 极慢
$('.buttons').children();  // 快很多

$('.gender :radio');  // 暗示这是一个无定向的搜索
$('.gender *:radio'); // 同上,这只不过是说出来了
$('.gender input:radio'); // 这就差不多了

Copyright Rebecca Murphey, released under the Creative Commons Attribution-Share Alike 3.0 United States license.


Prev Up Next
当心匿名函数 Home 使用事件委派