【发布时间】:2014-11-19 21:44:04
【问题描述】:
我在工作中遇到了一些代码如下:
var $divs = $('div');
var $jq = $([1]);
$divs.each(function () {
$jq.context = $jq[0] = this;
// ... do stuff ...
});
我在上面perf'd,它似乎比在函数顶部有$this = $(this); 快得多。在函数内部,$jq 变量有一个标准分类的典型 jQuery 方法,从它调用 (.hasClass(), .data(), .find(), ...),代码按预期工作。
我想知道这里的权衡是什么;即不每次都构造一个新对象,你会失去什么?我只是失去了“历史”(即.pushStack(), .end(), .andSelf(), ...)吗?我应该一直这样做吗?
另外,这是一个命名模式吗?我终其一生都想不出如何在 Google 上进行研究。
【问题讨论】:
-
你能链接到性能吗?
-
↑↑↑ 是的,不确定您是否正确比较它,因为
$this = $(this);将this包装在 jQuery 对象中,但您没有使用:$jq.context = $jq[0] = this; -
@Mathletics:添加了指向 jsperf 的链接。 @A.Wolff — 我知道这就是 为什么 重用的
$jq更快,但我正试图弄清楚权衡是什么。如,“是的,它更快,但它不再正确支持end(),它会杀死一只小猫。”如果可能,我是否应该始终使用上述模式而不是$this = $(this)?
标签: jquery performance object-lifetime