jQuery性能优化28条建议你值得借鉴(2)


App.hiddenDivs = $('div.hidden');
// 之后在你的应用中调用:
App.hiddenDivs.find('span');


13. 采用jQuery的内部函数data()来存储状态
不要忘了采用.data()函数来存储信息:

复制代码 代码如下:


$('#head').data('name', 'value');
// 之后在你的应用中调用:
$('#head').data('name');


14. 使用jQuery utility函数
不要忘了简单实用的jQuery的utility函数。我最喜欢的是$.isFunction(), $isArray()和$.each()。
15. 为HTML块添加“JS”的class
当jQuery载入之后,首先给HTML添加一个叫”JS”的class

复制代码 代码如下:


$('HTML').addClass('JS');


只有当用户启用JavaScript的时候,你才能添加CSS样式。例如:

复制代码 代码如下:


/* 在css中 */
.JS #myDiv{display:none;}


所以当JavaScript启用的时候,你可以将整个HTML内容隐藏起来,用jQuery来实现你想实现的(譬如:收起某些面板或当用户点击它们时展开)。而当Javascript没有启用的时候,浏览器呈现所有的内容,搜索引擎爬虫也会勾去所有内容。我将来会更多的使用这个技巧。
三、关于优化事件性能的建议
16. 推迟到$(window).load
有时候采用$(window).load()比$(document).ready()更快,因为后者不等所有的DOM元素都下载完之前执行。你应该在使用它之前测试它。
17. 使用Event Delegation
当你在一个容器中有许多节点,你想对所有的节点都绑定一个事件,delegation很适合这样的应用场景。使用Delegation,我们仅需要在父级绑定事件,然后查看哪个子节点(目标节点)触发了事件。当你有一个很多数据的table的时候,你想对td节点设置事件,这就变得很方便。先获得table,然后为所有的td节点设置delegation事件:

复制代码 代码如下:


$("table").delegate("td", "hover", function(){
$(this).toggleClass("hover");
});


18. 使用ready事件的简写
如果你想压缩js插件,节约每一个字节,你应该避免使用$(document).onready()

复制代码 代码如下:


// 也不要使用
$(document).ready(function (){
// 代码
});
// 你可以如此简写:
$(function (){
// 代码
});


四、测试jQuery
19. jQuery单元测试
测试JavaSript代码最好的方法就是人来测试。但你可以使用一些自动化的工具如Selenium,Funcunit,QUit,QMock来测试你的代码(尤其是插件)。我想在另外一个专题来讨论这个话题因为实在有太多要说的了。
20. 标准化你的jQuery代码
经常标准化你的代码,看看哪个查询比较慢,然后替换它。你可以用Firebug控制台。你也可以使用jQuery的快捷函数来使测试变得更容易些:

复制代码 代码如下:


// 在Firebug控制台记录数据的快捷方式
$.l($('div'));


复制代码 代码如下:


// 获取UNIX时间戳
$.time();


复制代码 代码如下:


// 在Firebug记录执行代码时间
$.lt();
$('div');
$.lt();


复制代码 代码如下:


// 将代码块放在一个for循环中测试执行时间
$.bm("var divs = $('.testdiv', '#pageBody');"); // 2353 on Firebug 3.6


五、其他常用jQuery性能优化建议
21. 使用最新版本的jQuery
最新的版本往往是最好的。更换了版本后,不要忘记测试你的代码。有时候也不是完全向后兼容的。
22. 使用HMTL5
新的HTML5标准带来的是更轻巧的DOM结构。更轻巧的结构意味着使用jQuery需要更少的遍历,以及更优良的载入性能。所以如果可能的话请使用HTML5。
23. 如果给15个以上的元素加样式时,直接给DOM元素添加style标签
要给少数的元素加样式,最好的方法就是使用jQuey的css()函数。然而更15个以上的较多的元素添加样式时,直接给DOM添加style 标签更有效些。这个方法可以避免在代码中使用硬编码(hard code)。

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wddzgw.html