jQuery性能优化的38点建议

首先,当您注意jQuery变量的定义时,添加var关键字
这不仅是jQuery,而且需要注意所有Javascript开发过程。请不要将其定义如下:
美元美元(#加载加载= '); / /这是全局定义的,不知道哪里不好位置参考相同的变量名,会郁闷死
两。请使用var来定义变量。
如果使用多个变量,请将其定义如下:
复制代码如下:var页= 0,
负荷=(#美元美元加载),
身体= $(美元'body);
不要为每个变量添加var关键字,除非你有严重的强迫症。
三。定义jQuery变量是添加一个$符号。
在声明或定义一个变量时,请记住,如果在jQuery中定义一个变量,向这个变量添加一个$符号,如下所示:
复制代码代码如下:var = $(#美元加载加载);
这里定义的优点是,可以有效地提示自己或任何其他读取代码的用户,这是jQuery的一个变量。
四,DOM操作必须记住缓存(缓存)。
在jQuery代码的开发中,我们经常需要操作DOM,而DOM操作是一个耗费资源的过程,很多人喜欢使用jQuery:
复制代码代码如下所示:
$(#加载),Html(完成);
$(#加载)FadeOut();
代码没有任何问题,你也可以运行出结果,但在这里,你的每一次定义和调用$(' #加载)当他们实际上创造了一个新的变量,如果你需要重用它,记住,一个变量的定义,该变量可以缓存的内容有效,如如下:
复制代码代码如下:var = $(#美元加载加载);
loading.html美元('finished ');loading.fadeout美元();
演出会更好。
五。利用连锁经营
上面的例子,我们可以写得更简洁:
复制代码代码如下所示:
无功负荷= $(美元的#加载);
loading.html美元('finished)。FadeOut();

六。流线的jQuery代码
试着把一些代码集成在一起。不要为此编码:
复制代码代码如下所示:
/ /!相反的性格!
button.click美元(函数(){()
target.css美元('width,50 %);
target.css美元('border','1px固体# 202020);
target.css美元(色彩、# FFF);
});
应该用这种方式写:
复制代码如下:button.click美元(函数(){()
target.css美元({ 'width:50 %,'1px 'border':固体# 202020、色彩:# FFF});
});
七。避免使用全局类型选择器
请不要写如下:$(;
写得更好:$(东西);
八。不要覆盖多个ID
请不要写如下:$(' #东西#儿童);
这就够了:$(' #儿童);
九、使用逻辑判断或加快| |
请不要写如下:
复制代码代码如下所示:
如果(!{ $){
$ =(美元的#东西);
}
这样写起来更好:
复制代码代码如下:什么东西| |美元=美元美元(#东西);
十。尽可能少使用代码
而不是写:如果(string.length > 0){等}
如写:如果(字符串长度){ }
十一。尽可能地使用方法。
如果你使用一个新的jQuery库,版本使用。,和任何其他的方法,最终实现using.on。
十二。尽可能使用jQuery的最新版本
jQuery的最新版本有更好的表现,但最新的版本可能不支持IE6 / 7 / 8,所以你需要选择的实际情况。
十三。尽可能使用本机Javascript
如果使用原生Javascript也可以实现jQuery提供的功能,建议使用本机Javascript来实现它。
十四。总是从# ID选择器
这是jQuery选择器的一条黄金法则。jQuery选择元素的最快方式是用ID.选择它。
复制代码代码如下:$(' #内容隐藏());
或从id选择器继承以选择多个元素:
复制代码代码如下:$(p #内容隐藏());
十五。在课前使用标签
jQuery中的第二快速选择器标签选择器(如$())因为它直接来自本地Javascript方法getelementbytagname()。所以最好总是使用标签来修改类(别忘了最近的ID)
The copy code code is as follows: VAR receiveNewsletter = $('#nslForm input.on');
在jQuery选择器类是最慢的,因为它穿越所有的DOM节点下的IE浏览器。尽量避免使用选择器类。不要使用标签修改ID。下面的例子贯穿所有div元素找到节点ID is'content:
复制代码如下:var = $('div内容#内容'); / /很慢,不使用
使用ID修改ID是多余的:
复制代码如下:var traffic_light = $(#内容# traffic_light '); / /很慢,不使用
十六。Use subqueries
缓存父对象以备将来使用

复制代码代码如下:var = $(头#头);
菜单= header.find('菜单');

var菜单= $(菜单,头);
十七。Optimizes the selector to apply the right to left model of Sizzle
1.3以后的版本,jQuery使用嘶嘶的图书馆,这是从选择器引擎以前的版本有很大的不同。它采用左-右模型代替右-左模型,确保最有权选择装置在身体左侧的选择有一个更广泛的选择范围:
复制代码代码如下:var linkcontacts = $('。联系人链接div.side-wrapper);
不要使用它
复制代码代码如下:var linkcontacts = $('a.contact-links。侧包装);
十八。使用find()而不是上下文查找
find()函数实际上更快,但是如果页面中有许多需要来回查看的DOM节点,则可能需要更长的时间:
复制代码如下:var div = $('。testdiv ',' # pagebody '); / / 2353萤火虫3.6
var div = $(# pagebody)。找到('。testdiv '); / / 2324萤火虫3.6的最佳时间
var div = $(# pagebody。testdiv '); / / 2469萤火虫3.6
十九。写下你的选择
如果你在代码中经常使用一个选择器,然后扩展jQuery。expr {:' }对象,写你自己的选择。在下面的例子中,我创建了一个abovethefold选择器来选择看不见的元素:
复制代码如下:$(美元。延长。expr { ':' },{
abovethefold:功能(EL){
返回(EL)。偏移()。顶< $(窗口),ScrollTop()+ $(窗口)Height();
}
});
无功nonvisibleelements = $('div:abovethefold '); / /选择元素
二十。缓存jQuery对象
缓存经常使用的元素:
复制代码代码如下所示:
标题= $(var的#头);
var div = header.find('div);
VaR形式= header.find(‘形');

当进行DOM插入时,所有元素都封装到元素中。

二十一,直接DOM操作速度慢,尽可能少地改变HTML结构。
复制代码代码如下所示:
var菜单=;
对于(var i = 1;i < 100;i + +){
菜单+++;
}
菜单+;
$(#头)Prepend(菜单);
不要这样做:
$(#头)Prepend();
对于(var i = 1;i < 100;i + +){
$(#菜单)。追加('+我+的);
}
二十二。虽然jQuery没有抛出异常,但是开发人员也应该检查对象。

虽然jQuery不会抛出大量例外的用户,开发商不依靠this.jquery通常执行大量无用的功能来确定一个对象是否存在。所以在一系列的参考是,检查对象的存在。
二十三。使用直接函数,而不是使用与之等价的函数。
为了获得更好的性能,您应该使用直接的功能如美元。Ajax()代替美元。有()、()、美元。getJSON美元。后(),因为后者将调用Ajax()美元。
二十四。缓存jQuery结果供以后使用
你经常会得到一个javascript应用-您可以使用的应用程序。为了保存您经常选择的对象以备将来使用:
复制代码代码如下所示:
app.hiddendivs = $('div.hidden);
在应用程序中调用之后:
App.hiddenDivs.find('span);
二十五,使用jQuery的内部函数数据()来存储状态
不要忘记使用数据()函数来存储信息:
复制代码代码如下所示:
$(#头),数据('name',币值的);
在应用程序中调用之后:
$(#头)数据('name');
二十六。使用jQuery实用程序函数
别忘了jQuery的简单实用的实用功能。我最喜欢的是美元。功能()(),()和ISArray美元美元每()。
二十七,为HTML块添加JS类
加载jQuery时,首先将一个名为js的类添加到HTML中。
复制代码代码如下:$('html)。AddClass('js);
只有当用户启用Javascript时,您才能添加CSS样式:
复制代码如下:
js # mydiv {显示:无;}
所以当启用Javascript,你可以隐藏整个HTML内容,使用jQuery实现你想达到的目标(例如,当你把一些面板或扩大时,用户点击它们)。当不启用Javascript,浏览器呈现的所有内容,和搜索引擎的爬虫也会去所有的内容,我将在未来使用这一技术的更。
二十八,延期到$(窗口)。
使用$(窗口)Load()有时比$(文档)Ready()要快,因为后者在下载所有DOM元素之前都要执行。
二十九。使用事件代理
当你有很多节点在一个容器中,你想绑定一个事件的所有的节点,和代表团非常适合这样的应用场景。代表团,我们只需要将事件绑定在母公司层面,然后看它的子节点(目标节点)时触发事件。你有一个表的数据很多,你想建立在TD节点事件,这使得它非常方便。先表,然后设置委托所有TD结:
复制代码如下:$(表)。委托()
$(这)。ToggleClass(悬停);
});
三十。使用就绪事件
如果你想压缩的js插件,节省每一个字节,你应该避免使用$(document)的Onready()。
将代码复制如下:请不要使用
$(文档)Ready(函数(){)
代码
});
你可以这样做:
$(函数(){())
代码
});
三十一,jQuery单元测试
测试javascript代码的最好方法是通过人的测试。但你可以使用一些自动化的工具,如硒、Funcunit、退出,并qmock测试你的代码(尤其是插件)。我想谈谈这个话题的另一个话题,因为有太多要说的了。
三十二。标准化jQuery代码
常规范你的代码,看看它的查询速度慢,取代它。你可以使用Firebug控制台,您还可以使用jQuery的快捷功能使测试更容易:
复制代码代码如下所示:
在快捷 / / Firebug控制台数据记录
美元。L($('div '));

获取UNIX时间戳
时间();

记录在Firebug / 代码的执行时间
美元();
$('div);
美元();

测试执行周期中的代码块
美元。BM(var div = $('。testdiv ',' # pagebody ');); / / 2353萤火虫3.6
三十三。使用hmtl5
新的HTML5标准带来了更轻量级的DOM结构,较轻的结构意味着jQuery的使用要求更少的遍历性和更好的加载性能,所以如果可能的话,请使用HTML5。
三十四,如果将样式添加到15多个元素中,则直接将样式标签添加到DOM元素中。
添加一些元素,一些元素的最佳方法是使用jquey的()()的CSS功能。当15多个元素添加到风格,这是更有效地添加样式标签DOM直接。这种方法避免了使用硬编码(硬编码)在代码。
复制代码代码如下所示:
$('')
appendto(很);
三十五。避免加载多余的代码
将Javascript代码放在不同的文件中是在需要的时候加载它们的好方法,这样就不会加载不必要的代码和选择器。
三十六,压缩成一个主js文件,将下载次数保持在最低限度。
当你决定哪些文件应该被加载,把它们装进一个文件。一些开源的工具可以帮助您自动完成,如使用缩小(与您的后端代码集成)或使用jscompressor,YUI压缩器或院长爱德华兹JS封隔器和其他工具来压缩文件给你。我最喜欢的是JSCompressor。
三十七。使用原生javascript需要时
使用jQuery是一件很棒的事情,但不要忘了它也是Javascript的框架,所以当jQuery代码是必需的时候,您可以使用原生Javascript函数,这样您就可以获得更好的性能。
三十八。慢加载不仅可以提高加载速度,而且可以提高SEO优化(延迟加载内容的速度和SEO好处)。
使用Ajax加载Web站点,从而节省服务器端加载时间。