我可以在jQuery中缓存$(window)和$(document)吗?

我最近阅读了一些关于jQuery性能文章,我想出了一些奇怪的问题.

>可以/应该缓存$(窗口)吗?

如果我这样做,它会影响调整大小,滚动,宽度,scrollTop …等?
>可以/应该缓存$(文件)吗?

由于我们使用了很多鼠标操作,我应该做var doc = $(document);?
>我可以一直在一大块代码中缓存$(this)吗?

至于var self = $(this);,在什么条件下,self可能与$(this)不同?

解决方法

所有三个问题:是的你可以!

Neccessery:没有

更好的表现:也许吧

你可以尝试做一个基准测试.但缓存的原因不是搜索整个DOM的选择器.查找文档和窗口不是问题,因为它们是2个根变量.缓存$(this)取决于情况.看我的第二个提示.

始终缓存运行查询的父对象:

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

相关文章

jQuery插件的种类 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进...
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间。 入门 编写一个jQuery插件开始于给...
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js。 兼容性如图: ht...
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异...
AMD 模块 AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一...