jQueryオブジェクトのキャッシュについて尋ねる質問はかなりありますが、正確にjQueryオブジェクトをキャッシュできる場所とキャッシュする必要がある場所を尋ねる質問は見つかりません。以下に示すように、一連の関数を含む単一のJavaScriptファイルを含むWebページがあります。
$(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を2回クエリしmyFunctionTwo
ますが、DOMを1回クエリし、結果をローカル変数にキャッシュしてから、その変数を操作します。のアプローチの方が効率的であることは理解していmyFunctionTwo
ますが、これらのオブジェクトを実際にどこにキャッシュする必要があるのかわかりません。現時点では、オブジェクトをメソッドレベルでキャッシュしていますが、実際にそれをより高いレベルでキャッシュして、複数の関数で使用できるかどうか疑問に思っています。このように、DOMを1回だけクエリしてから、このファイルのすべての関数で結果を再利用します。私が提案していることの例を以下に示します。
$(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オブジェクトをオブジェクトレベルでキャッシュする別の方法はありますか、それとも関数レベルでのみキャッシュする必要がありますか?