Самый эффективный способ найти элементы в jQuery

Вы можете использовать наибольший общий делитель (gcd), чтобы помочь.

a * b / c = (a / gcd(a,c)) * (b / (c / gcd(a,c)))

Редактировать: ОП попросил меня объяснить вышеприведенное уравнение. По сути, мы имеем:

a = (a / gcd(a,c)) * gcd(a,c)
c = (c / gcd(a,c)) * gcd(a,c)

Let's say x=gcd(a,c) for brevity, and rewrite this.

a*b/c = (a/x) * x * b 
        --------------
        (c/x) * x

Next, we cancel

a*b/c = (a/x) * b 
        ----------
        (c/x) 

Вы можете сделать это еще дальше. Пусть y = gcd (b, c / x)

a*b/c = (a/x) * (b/y) * y 
        ------------------
        ((c/x)/y) * y 

a*b/c = (a/x) * (b/y) 
        ------------
           (c/(xy))

Вот код для получения gcd.

static long gcd(long a, long b) 
{ 
  if (b == 0) 
    return a; 
  return gcd(b, a % b);  
} 
11
задан nickf 6 January 2009 в 06:33
поделиться

7 ответов

Править: Результаты ниже для jQuery 1.2.6, вероятно, в Firefox 3.5. Улучшения скорости браузеров и самого jQuery в значительной степени представили эту устаревшую информацию.


Я просто записал быстрый тест сравнительного тестирования:

  • На странице с 4 формами и приблизительно 100 другими элементами:
    • Используя $('form.myForm') 10000 раз занял 1,367 с
    • Используя $('.myForm') 10000 раз занял 4,202 с (307%)
  • На странице только с 4 формами и никакими другими элементами:
    • Используя $('form.myForm') 10000 раз занял 1,352 с
    • Используя $('.myForm') 10000 раз занял 1,443 с (106%)

Кажется, что поиск элементов конкретного имени намного более быстр, чем поиск всех элементов для конкретного класса.

Править: Вот моя тестовая программа: http://jsbin.com/ogece

Программа запускается с 100 <p> теги и 4 <form>s, запускает два различных теста, удаляет <p> теги и запускают тест снова. Странно, при использовании этой техники, form.myForm медленнее. Смотрите на код для себя и сделайте из него, что Вы будете.

22
ответ дан 3 December 2019 в 01:34
поделиться

Первый селектор должен быть быстрее, потому что jQuery может использовать встроенную функцию "getElementsByTagName" для сокращения числа элементов, которое это должно отфильтровать. Второй должен получить все элементы в DOM и проверить их класс.

7
ответ дан 3 December 2019 в 01:34
поделиться

Попробуйте slickspeed, где Вы видите, что грубые скорости селекторов через несколько js освобождают включая jQuery.

4
ответ дан 3 December 2019 в 01:34
поделиться

form.myForm IMO намного более быстр, поскольку это только должно быть взглядом на набор подмножества/фильтровать элементов и не должно было бы выполнять итерации целого документа.

1
ответ дан 3 December 2019 в 01:34
поделиться

Первый пример идет НАМНОГО быстрее при использовании с контекстом. Второй пример идет быстрее также, но не очень. Я развернул Ваш пример для сравнения контексту:

http://jsbin.com/uluwe

1
ответ дан 3 December 2019 в 01:34
поделиться

enobrev, Интересный. Я просто выполнил Ваш пример, но бету 2 jquery 1.3 использования сюда

результаты.... (1.2.6 скорости в скобках)

// With 100 non-form elements and Context:
$('.myForm', '#someContainer') : 4063ms (3707ms)
$('form.myForm', '#someContainer') : 6045ms (4644ms)

// With 100 non-form elements: 
$('.myForm') : 3954ms (25086ms)
$('form.myForm') : 8802ms (4057ms)

// Without any other elements with Context: 
$('.myForm', '#someContainer') : 4137ms (3594ms)
$('form.myForm', '#someContainer') : 6627ms (4341ms)

// Without any other elements: 
$('.myForm') : 4278ms (7303ms) 
$('form.myForm') : 8353ms (4033ms)
0
ответ дан 3 December 2019 в 01:34
поделиться

Приехать в парней? Действительно ли Вы являетесь сумасшедшими? Самым быстрым способом выбрать элемент является самый короткий путь:

$ ('.myForm') является путем быстрее, чем $ ('form.myform'), потому что второй вариант должен сделать дополнительную проверку, чтобы удостовериться, что элемент имеет указанный tagName. ВОЗМОЖНО, новый jquery 1.3 изменит эту вещь, но на последней стабильной версии, является неправильным указать tagName также. Необходимо читать здесь.

Я думаю, что считал где-нибудь, что MooTools является путем быстрее этот путь. Хорошо.. Возможно, в Мычании, не знайте, но в jQuery это - самый быстрый путь.

смотрите на этого профилировщика: alt text

(большой рис.)

сначала только с идентификатором, второй с form#ID (протестированный на моей странице блога), и работайте точно то же на селектор класса.

-6
ответ дан 3 December 2019 в 01:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: