【发布时间】:2014-10-22 19:15:22
【问题描述】:
我正在开发一个与主页有大量交互的 Intranet 网站。该站点广泛使用 jQuery。所以我考虑在第一次请求它们时缓存 jQuery 选择,并为每个后续请求从缓存中提取它们。 (如果我想强制重新选择,我还内置了一个覆盖)。
这是我想知道的基本 sn-p 代码:
( function(window, $, undefined) {
var mp = {};
mp.cache = [];
mp.get = function ( selector, force) {
return ( !force || !mp.cache[ selector ] ) /*separating for readability */
? mp.cache[ selector ] = $( selector )
: mp.cache[ selector ];
}
/* more functions and code */
window.mp = mp;
window.$$ = mp.get;
})(window, jQuery);
它将像普通的 jQuery 选择一样使用,但会检查该选择器是否已经存在于 cache 数组中,如果存在,则从那里返回结果。
更新示例
$('#mainmenu').on('click','.menuitem', highlightSelectedMenuItem );
function highlightSelectedMenuItem () {
var menuitems = $$('.menuitem'); //selected first time, from cache every other time
menuitems.find('.current').removeClass('current');
$(this).addClass('current');
}
代码中有大约 20 - 30 种不同的选择。所以每个都会在第一次调用时被缓存。此代码将仅在桌面客户端(无手机/平板电脑)上运行。
好主意?这可能会导致什么问题?有没有一种好方法来测试这是否有助于/损害性能?您能提出的任何优点/缺点将不胜感激。
如果需要更多信息,请告诉我。
这是一个fiddle 来“摆弄”。
谢谢!
【问题讨论】:
-
不是重复的。我不是在谈论根据您提到的问题在同一个函数调用中缓存选择器。我特意说了....
标签: javascript jquery performance caching