|
|
|
| Есть мнение, что скорость отработки селектора 'teg.class' быстрее, чем '.class'....
Оно вроде как и логично....
Вроде как перебрать в цикле все элементы страницы дольше, чем перебрать результат выборки getElementsByTagName();
Однако есть и другое мнение: "чем короче селектор, тем быстрее он отработает".
Как по мне, так это не логично. Экономия первого варианта должна быть намного существеннее.
Один опытный фронт-разработчик сказал мне на это буквально следующее: "Пути jQuery неисповедимы :-)" и дал мне ссылку с кучей тестов, подтверждающих второе утверждение.
К сожалению она сейчас уже не доступна (давненько дело было).
Поэтому я создал HTML-файл, в BODY положил контент одной из тем этого форума, в HEAD написал такой скрипт:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>$(function(){
start = new Date();
for(i = 0; i < 100000; i++)
var elements = $('.posttext');
console.log('.class: '+((new Date()-start)/1000)+' sec');
start = new Date();
for(i = 0; i < 100000; i++)
var elements = $('p.posttext');
console.log('teg.class: '+((new Date()-start)/1000)+' sec');
start = new Date();
for(i = 0; i < 100000; i++)
var elements = $('#id_bodydiv .posttext');
console.log('#id .class: '+((new Date()-start)/1000)+' sec');
start = new Date();
for(i = 0; i < 100000; i++)
var elements = $('#id_bodydiv p.posttext');
console.log('#id teg.class: '+((new Date()-start)/1000)+' sec');
});</script>
| и проверил в 5ти браузерах имеющихся под рукой.
Результат такой:
// Opera 12 - только в ней подтвердилась первая теория
.class: 5.039 sec
teg.class: 2.841 sec
#id .class: 3.034 sec
#id teg.class: 2.834 sec
// Opera 15 - тут уже все иначе
.class: 1.298 sec
teg.class: 2.058 sec
#id .class: 2.282 sec
#id teg.class: 2.179 sec
// Chrome 28
.class: 1.434 sec
teg.class: 2.267 sec
#id .class: 2.181 sec
#id teg.class: 2.315 sec
// FireFox 25
.class: 1.092 sec
teg.class: 2.656 sec
#id .class: 2.934 sec
#id teg.class: 2.842 sec
// IE 11 - удивил больше всего с самой большой разницей
.class: 0.504 sec
teg.class: 3.828 sec
#id .class: 4.145 sec
#id teg.class: 4.028 sec
|
Вот......
Хотелось бы услышать мнение местных профи на эту тему..... | |
|
|
|
|
|
|
|
для: Sfinks
(09.12.2013 в 09:42)
| | Вот кстати эта ссылка. Нашел http://jsperf.com/jquery-class-vs-tag-qualfied-class-selector/2
P.S. Если результатов тестов нет, то надо нажать кнопку [Run Tests] | |
|
|
|
|
|
|
|
для: Sfinks
(09.12.2013 в 09:42)
| | Засунуть этот тест этому фрондэнд... в общем сами знаете куда. А чтобы ему были "исповедимы пути", то лучше пусть подумает на чем основана jQuery, и почаще заглядывает в ее исходники.
Реальная DOM архитектура реальной страницы к этой туфте даже близко отношения не имеет. Нравится "голые" и никчемные тесты гонять, ну это можно. Вот только головой думать куда полезнее. | |
|
|
|
|
|
|
|
для: confirm
(09.12.2013 в 14:59)
| | Похоже на панику....
> Аааааааааа..... Как это???? Все во что я верил катится в тар-тарары!!!!.....
Иначе говоря - куча эмоций, ни одного аргумента, и уж тем более - ни одного факта.....
В отличие от моих "никчемных" цифр. Которые, как известно, не врут.
Ну если с последним утверждением еще можно поспорить, то то, что от вас я не услышал ни одного аргумента/факта - вот это факт. | |
|
|
|
|
|
|
|
для: Sfinks
(09.12.2013 в 22:20)
| | Знаю я ваши цифры.
Было бы из-за чего копья ломать, тем более спорить.
Вот когда html-разметка будет такой <"мой стиль"=class .... div=''это имя тега'> вот тогда можете возрадоваться.
А "секунд меньше", а остальное хрен с ним, ну так это ради потешить себя, тем более, что эта туфта как сказали бы революционеры "оторвана от народа".
Глупо спорить не о чем, ради спора. | |
|
|
|
|
|
|
|
|
для: psychomc
(10.12.2013 в 00:39)
| | Спасибо! Статья интересная.
Правда не объясняет почему ".class" оказывается быстрее, чем "teg.class"....
Разве что списать это на особенности реализации метода querySelectorAll().... Но это догадка. | |
|
|
|
|
|
|
|
для: Sfinks
(10.12.2013 в 08:38)
| | Рискну предположить, что не быстрее, а зависит от ситуации. А вообще, вряд ли эта тема стоит того, чтобы сильно заострять на ней внимание. | |
|
|
|
|
|
|
|
для: Sfinks
(09.12.2013 в 09:42)
| | Если важна скорость, то используйте Vanilla JS. Оч хороший фреймворк :-) | |
|
|
|
|
|
|
|
для: Enter
(10.12.2013 в 15:04)
| | Не.... Смысл был не в том, чтобы найти лучшую альтернативу, а понять аномалию (на мой взгляд). | |
|
|
|
|
|
|
|
для: Sfinks
(11.12.2013 в 08:37)
| | Ну, аномалия, на мой взгляд, в кроссбраузерности. Посмотрите тесты на второй ветке jQuery. Может, там будет иначе все. Так как поддержка старых браузеров была выкинута. | |
|
|
|