有很多关于缓存 jQuery 对象的问题,但我找不到一个询问 jQuery 对象可以并且应该被缓存的确切位置。我有一个网页,其中包含一个带有一堆函数的 JavaScript 文件,如下所示。
$(document).ready(function () {
// do some setup
});
/* function queries the DOM with the same selector multiple times without caching */
function myFunctionOne() {
$('#name_input').css("border","1px solid #ccc");
$('#name_input').val(someValue);
}
/* function uses cached object from a single query */
function myFunctionTwo() {
var nameInput = $('#name_input')
nameInput.css("border","1px solid #ccc");
nameInput.val(someValue);
// do some other stuff with cached selector
}
在myFunctionOne
我查询 DOM 两次时效率低下,而在myFunctionTwo
我查询 DOM 一次时,将结果缓存在局部变量中,然后使用该变量。我知道这种方法myFunctionTwo
更有效,但我不确定我应该在哪里缓存这些对象。目前我正在方法级别缓存对象,但我想知道是否可以在更高级别缓存它,然后在多个函数中使用它。这样我只会查询一次 DOM,然后在这个文件的所有函数中重用结果。我建议的一个例子如下所示。
$(document).ready(function () {
// do some setup
var nameInput = $('#name_input')
});
/* function uses cached query result from .ready function above */
function myFunctionOne() {
nameInput .css("border","1px solid #ccc");
nameInput .val(someValue);
}
/* function uses cached query result from .ready function above */
function myFunctionTwo() {
nameInput.val(someValue);
// do some other stuff with cached selector
}
这种方法是明智的还是有更好的方法呢?也许使用 .ready 函数是做这种设置的不好的地方,因为它会减慢页面加载速度?是否有另一种方法可以在对象级别缓存 jQuery 对象,还是应该只在函数级别缓存?