100

我最近升级了我的 PHPStorm IDE 版本,它现在警告我 jQuery 使用效率低下。

例如:

var property_single_location = $("#property [data-role='content'] .container");

提示此警告:

检查 jQuery 选择器是否以有效的方式使用。它建议拆分以 ID 选择器开头的后代选择器,并警告可能缓存的重复选择器。

所以我的问题是:

为什么这效率低下,执行上述选择器的有效方法是什么?

我猜:

var property_single_location = $("#property").find("[data-role='content']").find(".container");

这是正确的方法吗?

4

3 回答 3

156

我今天也有同样的问题,感谢Scott Kosman 在这里找到了解决方案。

基本上答案是单独选择 ID,然后用于.find(...)以下任何内容。以你为例:

$("#property [data-role='content'] .container");

把它改成这样会让 PhpStorm 很开心,而且速度显然可以提高一倍以上

$("#property").find("[data-role='content'] .container");
于 2013-05-18T02:14:01.167 回答
19

我相信在使用最新版本的 jQuery 和浏览器时这两种方法之间的差异可以忽略不计。我构建了一个测试,表明现在执行组合选择器而不是在 id 上选择然后找到一个非常简单的情况实际上要快 10%:

http://jsperf.com/jquery-find-vs-insel

对于在任何深度按班级选择多个孩子,“查​​找”似乎确实更快:

http://jsperf.com/jquery-find-vs-insel/7

在 jQuery 论坛上对此进行了一些讨论,但它已有 3 年历史: https ://forum.jquery.com/topic/which-jquery-selection-is-efficient 正如他们在此处指出的那样,如果您正在做很多对同一 id 选择器的操作,通过缓存顶级元素可以找到最大的性能改进。另一方面,如果您只进行几个选择,则几乎没有性能差异。

因此,我认为 IntelliJ 夸大了这种代码风格的重要性。

于 2013-10-17T16:07:04.293 回答
14

The first question is to hit Alt+Enter, and select the first tip in the list, then hit Enter, you'll see what it thinks the most efficient way.

于 2015-04-17T08:24:05.373 回答