我正在寻找优化我的单页应用程序的方法,我目前专注于 jQuery 选择器。
我不是 javascript 专家,但据我了解,将 jquery 选择器的结果存储在变量中以供重复使用比重新查询 dom 的性能要高得多。
因此,例如,而不是这样:
$("#myItem").doSomething();
$("#myItem").doSomethingElse();
这样做更有意义:
var result = $("#myItem");
result.doSomething();
result.doSomethingElse();
此外,据我了解,使用附加到现有 jQuery 对象的 find() 选择器可以显着提高性能,从而减少必要的查询量:
$("#myItem").find(".highlighted");
我有兴趣探索存储我们在应用程序中不断重用的许多选择器的可能性,不仅在局部变量中,而且可能在某个地方的散列或外部函数中。我不知道这是否是最优的,但我很好奇这会收到什么回应。
我尝试(未成功)使用 Underscore.js 的 memoize 函数来执行此操作,但它没有按我预期的方式工作。但是,这个概念看起来像这样:
jquerySelect = function () {
var elements = _.memoize(function (selection) {
return $(selection);
});
return elements;
};
这里的想法是“return $(selection)”的实际结果工作被执行一次,之后结果被缓存并返回。
我希望能够通过以下方式使用它:
utils.jquerySelect(".highlighted").find("span")
在这个简单的例子中,缓存的关键是“.highlighted”,实用函数知道如何访问结果,从而避免了遍历 DOM 的工作再次完成。我的实现目前不起作用,因为每次都会命中“return”语句。
我不确定这种方法是否有缺陷,但我觉得它可能是。但是,请让我知道您是否看到了一种可行的方法,或者您是否看到了更好的方法。