Предположим, что я хочу получить первый элемент среди всех элементов класса ".answer"
$($(".answer")[0])
Я могу сделать выше, но какой лучший баланс между элегантностью и скоростью?
* изменил вопрос, чтобы отразить текущую дискуссию
Предположим, что я хочу получить первый элемент среди всех элементов класса ".answer"
$($(".answer")[0])
Я могу сделать выше, но какой лучший баланс между элегантностью и скоростью?
* изменил вопрос, чтобы отразить текущую дискуссию
В функциональности (хотя и не в скорости) все эквивалентны:
var a0 = $($('.answer')[0]);
var a0 = $('.answer').first();
- см. http://api.jquery.com/first/var a0 = $('.answer:first');
- см. http://api.jquery.com/first-selector/var a0 = $('.answer').eq(0);
- см. http://api.jquery.com/eq/var a0 = $('.answer:eq(0)');
- см. http://api.jquery.com/eq-selector/ Что лучше?
Было высказано предположение , что селекторные версии должны быть быстрее, чем версии метода (и логика имеет смысл), но я еще не нашел надежного кросс-браузера, multi -документ, который доказывает, что это правда.
И в некоторых случаях вы не можете использовать селектор, так как у вас есть объект jQuery, полученный в результате цепочечных результатов, и он должен позже pare it down.
Изменить. Основываясь на отличной информации из нижеприведенных тестов @yc, следуют текущие (2011-февраль-4) результаты тестов, суммированные и сравниваемые с базовым уровнем .answer:first
:
:first :eq(0) .first() .eq(0) $($('...')[0]) Chrome 8+ 100% 92% 224% 266% 367% FF 3.6 100% 100% 277% 270% 309% FF 4.0b 100% 103% 537% 521% 643% Safari 5 100% 93% 349% 352% 467% Opera 11 100% 103% 373% 374% 465% IE 8 100% 101% 1130% 1246% 1767% iPhone 4 100% 95% 269% 316% 403% ===================================================== Weighted 100% 92% 286% 295% 405% Major 100% 95% 258% 280% 366%
Вкратце: гипотеза (в настоящее время) неверна. Методы значительно быстрее, чем селектор Sizzle, и почти без исключения код OP $($('.answer')[0])
является самым быстрым из всех!
Я не могу говорить об аспекте элегантности, но здесь здесь очень важны аспект производительности.
Похоже, из набора тестов JavaScript, что ваш оригинальный метод на самом деле является наиболее эффективным, и вопреки гипотезе что принятый ответ, связанный с селекторами Sizzle без CSS, как правило, намного менее эффективен, чем селекторы методов. Там причина для этого. $('.answer')
может использовать родной браузер getElementsByClass()
без необходимости вручную перемещать результаты. Селектор :first
усложняет это. В этом случае использование селекторов sizzle, похоже, замедляет выбор в 4-5 раз.
Я бы сказал, что с jQuery производительность должна превосходить элегантность, и все доказательства (каждый браузер, который я тестировал до сих пор!), по-видимому, указывают на то, что OP inelegant solution является самым быстрым из-за справедливой суммы.
Вот результаты браузеров с наибольшим количеством тестовых прогонов:
(Числа - "операции в секунду", поэтому более высокие числа быстрее, более низкие числа медленнее.)
Используйте селектор :first
или .first
фильтр:
$(".answer:first");
или
$(".answer").first();