Вы можете использовать наибольший общий делитель (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);
}
Править: Результаты ниже для jQuery 1.2.6, вероятно, в Firefox 3.5. Улучшения скорости браузеров и самого jQuery в значительной степени представили эту устаревшую информацию.
Я просто записал быстрый тест сравнительного тестирования:
$('form.myForm')
10000 раз занял 1,367 с$('.myForm')
10000 раз занял 4,202 с (307%)$('form.myForm')
10000 раз занял 1,352 с$('.myForm')
10000 раз занял 1,443 с (106%)Кажется, что поиск элементов конкретного имени намного более быстр, чем поиск всех элементов для конкретного класса.
Править: Вот моя тестовая программа: http://jsbin.com/ogece
Программа запускается с 100 <p>
теги и 4 <form>
s, запускает два различных теста, удаляет <p>
теги и запускают тест снова. Странно, при использовании этой техники, form.myForm медленнее. Смотрите на код для себя и сделайте из него, что Вы будете.
Первый селектор должен быть быстрее, потому что jQuery может использовать встроенную функцию "getElementsByTagName" для сокращения числа элементов, которое это должно отфильтровать. Второй должен получить все элементы в DOM и проверить их класс.
Попробуйте slickspeed, где Вы видите, что грубые скорости селекторов через несколько js освобождают включая jQuery.
form.myForm IMO намного более быстр, поскольку это только должно быть взглядом на набор подмножества/фильтровать элементов и не должно было бы выполнять итерации целого документа.
Первый пример идет НАМНОГО быстрее при использовании с контекстом. Второй пример идет быстрее также, но не очень. Я развернул Ваш пример для сравнения контексту:
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)
Приехать в парней? Действительно ли Вы являетесь сумасшедшими? Самым быстрым способом выбрать элемент является самый короткий путь:
$ ('.myForm') является путем быстрее, чем $ ('form.myform'), потому что второй вариант должен сделать дополнительную проверку, чтобы удостовериться, что элемент имеет указанный tagName. ВОЗМОЖНО, новый jquery 1.3 изменит эту вещь, но на последней стабильной версии, является неправильным указать tagName также. Необходимо читать здесь.
Я думаю, что считал где-нибудь, что MooTools является путем быстрее этот путь. Хорошо.. Возможно, в Мычании, не знайте, но в jQuery это - самый быстрый путь.
смотрите на этого профилировщика:
сначала только с идентификатором, второй с form#ID (протестированный на моей странице блога), и работайте точно то же на селектор класса.