JQuery dir, шипение и фильтр - PullRequest
       1

JQuery dir, шипение и фильтр

1 голос
/ 09 сентября 2009

Когда я запустил профилировщик на интенсивной странице JQuery во время настройки производительности, я заметил, что эти функции JQuery занимают значительное количество времени (в таком порядке)

dir (9.42%)
Sizzle (3.79%)
filter (3.79%)

Мои функции jquery слишком велики для вставки. Могу ли я получить указатели, по которым функции JQuery внутренне вызывают эти функции?

Кроме того, есть ли способ получить дерево функций JS, используя профилировщик IE8 (или любым другим способом), который сообщает мне, какая функция JS вызывала какую?

Спасибо

1 Ответ

2 голосов
/ 09 сентября 2009

Большинство внутренних компонентов jQuery являются частными анонимными функциями. Я не вижу, как вы можете профилировать это. (Я тоже пытался, но безуспешно).

Sizzle - это механизм выбора , обеспечивающий работу jQuery. И я подозреваю, что Sizzle часто использует filter () при запросах DOM, используя более сложные селекторы.

Так что, по крайней мере, эти вызовы функций в порядке, работают так, как задумано, и максимально оптимизированы с точки зрения скорости.


Обновление:

Это реализация функции dir():

jQuery.dir = function( elem, dir ){
    var matched = [], cur = elem[dir];
    while ( cur && cur != document ) {
        if ( cur.nodeType == 1 )
            matched.push( cur );
        cur = cur[dir];
    }
    return matched;
};

nodeType 1 - это ELEMENT_NODE. Функция dir() фильтрует (или «очищает», если хотите) набор результатов данного запроса, чтобы убедиться, что возвращаются только элементы DOM, а не атрибуты, текстовые узлы и так далее. (Погода dir() исполняется, скорее всего, определяется Sizzle).


Подытожить:

Вы не можете пропустить ни одну из этих функций, так как они являются ядром реальной возможности овладеть чем-либо в DOM. (Делаем запрос).


Каждый раз, когда вы запрашиваете DOM ($("#something")), эти функции будут выполняться. В простых запросах может быть выполнена только одна или две из трех функций. Это, вероятно, причина, почему есть различия в количестве звонков.


Как указывает Chetan Sastry : вы можете значительно повысить производительность, кешируя свои запросы и так далее. Взгляните на этот пост , чтобы узнать о некоторых хитростях jQuery.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...