我最近阅读了一些关于jQuery性能的文章,我提出了一些奇怪的问题。
可以/应该缓存$(window)
吗?
如果我这样做,是否会影响resize
,scroll
,width
,scrollTop
等等?
可以/应该缓存$(document)
吗?
由于我们使用了很多鼠标操作,我应该var doc = $(document);
吗?
我可以总是在一大段代码中缓存$(this)
吗?
对于var self = $(this);
,self
可能与$(this)
有什么不同?
答案 0 :(得分:9)
所有三个问题:是的你可以!
Neccessery:没有
更好的表现:也许
你可以尝试做一个基准测试。但缓存的原因不是搜索整个DOM的选择器。查找文档和窗口不是问题,因为它们是2个根变量。缓存$(这个)取决于情况。见我的第二个提示。
始终缓存您运行查询的父对象:
var header = $('#header');
var menu = header.find('.menu');
// or
var menu = $('.menu', header);
链接jQuery方法比缓存选择器更好:
$('li.menu-item').click(function () {alert('test click');})
.css('display', 'block')
.css('color', 'red')
fadeTo(2, 0.7);
经常查询的缓存元素:
var header = $('#header');
var divs = header.find('div');
var forms = header.find('form');
免费的额外效果提示:
选择器适合最慢:
Id > Tag > classes
答案 1 :(得分:2)
是的,你可以缓存$(窗口),它确实有助于提高性能 有人已经在jsperf中做过测试。 http://jsperf.com/jquery-window-cache
测试结果有些混乱,但你仍然可以"运行测试"上 您的浏览器可以看到差异。
是的,您也可以缓存$(文档)。我不太多使用$(文件), 但基于我在jsperf中进行的测试 (http://jsperf.com/document-vs-cache),缓存$(文档)帮助 表现也有点。
是的,您可以缓存$(this)。但这个不同于 其他的cahces。如您所知,$(this)的价值将会发生变化 依赖不同的情况。例如,如果在鼠标中使用$(this) 像这样的倾听者......
$(".button").on("click",function(){
var $this = $(this);
});
当用户点击带有该类的按钮时,$(this)将会改变 "按钮"和$("此")将成为点击的对象 用户。
如果你经常使用$(this),缓存$(this)可以提高性能 在功能里面。但请记住,如果你在里面缓存$(this) 该函数,缓存将成为局部变量而不是全局变量, 并将在功能结束时销毁。所以你不能胜任 在功能之外使用它。
答案 2 :(得分:0)
实际问题是idreport = report_obj.search(cr, uid, conditions)[0]
如果要缓存窗口或文档以便在同一会话中进一步使用,可以。是的。
如果用户关闭窗口/会话,您创建的所有变量/函数都将被垃圾收集。