高级 jQuery:让好的应用程序变成强大的应用程序
2010-01-14 00:00:00 来源:WEB开发网
清单 2. 经过优化的小部件
// handles the selection/unselection of all checkboxes
function selectAll()
{
var checked = $("#selectall").attr("checked");
selectable.unbind("click", changeNumFilters);
selectable.each(function(){
var subChecked = $(this).attr("checked");
if (subChecked != checked)
{
$(this).click();
}
});
selectable.bind("click", changeNumFilters);
changeNumFilters();
}
通过这些优化之后,复选框的运行速度提高到约 900 毫秒,从而大大改进了性能。这些改进源于返回去检查您的算法正在做什么,以及贯穿代码的操作。您可以仅调用函数 1 次,而不是 100 次。通过在本系列的其他文章中不断改进该函数,您最后会让它变得更快、更高效。但不一定非得这么做,我还发现一个最快的算法,以前从来没有透露过。此外,如果我过早地向您展示这个最快的算法,我就不能将其作为本文的题材了。希望它能使您看到在代码中使用 bind/unbind 特性带来的好处(如果没有更好的方法的话)。
记住:在不希望触发默认事件时才使用 bind/unbind,或作为向页面元素添加或删除事件的临时方法
清单 3 显示了编写该算法的最快方法(如果您的代码中有这个小部件)。它运行该函数仅需 40 毫秒,远远胜过之前的其他方法。
清单 3. 使用超快算法的小部件
function selectAll()
{
var checked = $("#selectall").attr("checked");
selectable.each(function(){
$(this).attr("checked", checked);
});
changeNumFilters();
}
更多精彩
赞助商链接