提高jquery选择速度

时间:2013-06-24 18:00:52

标签: javascript jquery html performance cpu-speed

我有这个操作asp.net treeview html代码的代码。

此代码经常运行,因此它尽可能快地运行非常重要。

我想了解更多有关jquery选择器和提高速度的信息。到目前为止,我能够自己获取此代码。

我不确定的一些事情是,如果你想要第三个子元素,我是使用[2]还是.eq(2)还是:nth-child(2)?另外,如果我使用$来选择来自所选内容数组的内容,这是必要的,还是已经选中了?

有没有人知道我可以做些什么技巧或提示来提高我的jquery选择效率?

感谢。

function showResultsOnTreeview(treeviewID, filenameDictionary) {
    var sectionNodes = $("#" + treeviewID + " > table");
    var numOfSections = sectionNodes.length;
    var i, j, sectionName, divContainer, itemNodes, numOfItems, itemName, itemTag, itemPath;

    for (i = 0; i < numOfSections; i += 1) {
        sectionName = $(sectionNodes[i]).text();
        divContainer = $(sectionNodes[i]).next('div');
        divContainer.hide();
        itemNodes = $('table', divContainer);
        numOfItems = itemNodes.length;
        for (j = 0; j < numOfItems; j += 1) {
            itemTag = $('td', $(itemNodes[j])).eq(2);
            itemTag.removeClass('treeViewResult');
            itemName = getNameFromItem($(itemNodes[j]).text());
            itemPath = filenameDictionary[itemName];
            if (itemPath != null) {
                if (itemPath.indexOf(sectionName + "/" + itemName) != -1) {
                    itemTag.addClass('treeViewResult');
                    divContainer.show();
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您可以进行一些优化。第一个是肯定使用.eq()而不是[]。就像这里一样,你要创建一个jQuery对象:

var sectionNodes = $("#" + treeviewID + " > table");

但后来,你这样做了:

sectionName = $(sectionNodes[i]).text();
divContainer = $(sectionNodes[i]).next('div');

在这里你要创建另外两个不需要的jquery对象,你可以这样做:

sectionName = sectionNodes.eq(i).text();
divContainer = sectionName.next('div');

然后,我不知道你是否有不同的方法去做,但是如果你可以删除“循环中的循环”,那就太好了。

之后,使用find,而不是使用上下文选择($('selector', $element))。上下文使用find,这样可以减少函数调用的次数。以此行为例:

 $('td', $(itemNodes[j])).eq(2)

如果没有额外的对象就可以创建2个jQuery对象,并且可以使用.find()

itemTag = itemNodes.eq(j).find('td').eq(2);

基本上,使用.find()代替上下文,避免创建不需要的jQuery对象。希望这会有所帮助。