Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Скорость работы различных селекторов jQuery
 
 автор: Sfinks   (09.12.2013 в 09:42)   письмо автору
 
 

Есть мнение, что скорость отработки селектора '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 в 14:12)   письмо автору
 
   для: Sfinks   (09.12.2013 в 09:42)
 

Вот кстати эта ссылка. Нашел http://jsperf.com/jquery-class-vs-tag-qualfied-class-selector/2

P.S. Если результатов тестов нет, то надо нажать кнопку [Run Tests]

  Ответить  
 
 автор: confirm   (09.12.2013 в 14:59)   письмо автору
 
   для: Sfinks   (09.12.2013 в 09:42)
 

Засунуть этот тест этому фрондэнд... в общем сами знаете куда. А чтобы ему были "исповедимы пути", то лучше пусть подумает на чем основана jQuery, и почаще заглядывает в ее исходники.
Реальная DOM архитектура реальной страницы к этой туфте даже близко отношения не имеет. Нравится "голые" и никчемные тесты гонять, ну это можно. Вот только головой думать куда полезнее.

  Ответить  
 
 автор: Sfinks   (09.12.2013 в 22:20)   письмо автору
 
   для: confirm   (09.12.2013 в 14:59)
 

Похоже на панику....
> Аааааааааа..... Как это???? Все во что я верил катится в тар-тарары!!!!.....
Иначе говоря - куча эмоций, ни одного аргумента, и уж тем более - ни одного факта.....
В отличие от моих "никчемных" цифр. Которые, как известно, не врут.
Ну если с последним утверждением еще можно поспорить, то то, что от вас я не услышал ни одного аргумента/факта - вот это факт.

  Ответить  
 
 автор: confirm   (09.12.2013 в 23:01)   письмо автору
 
   для: Sfinks   (09.12.2013 в 22:20)
 

Знаю я ваши цифры.
Было бы из-за чего копья ломать, тем более спорить.
Вот когда html-разметка будет такой <"мой стиль"=class .... div=''это имя тега'> вот тогда можете возрадоваться.
А "секунд меньше", а остальное хрен с ним, ну так это ради потешить себя, тем более, что эта туфта как сказали бы революционеры "оторвана от народа".

Глупо спорить не о чем, ради спора.

  Ответить  
 
 автор: psychomc   (10.12.2013 в 00:39)   письмо автору
 
   для: Sfinks   (09.12.2013 в 09:42)
 

http://habrahabr.ru/post/111195/

  Ответить  
 
 автор: Sfinks   (10.12.2013 в 08:38)   письмо автору
 
   для: psychomc   (10.12.2013 в 00:39)
 

Спасибо! Статья интересная.
Правда не объясняет почему ".class" оказывается быстрее, чем "teg.class"....
Разве что списать это на особенности реализации метода querySelectorAll().... Но это догадка.

  Ответить  
 
 автор: psychomc   (10.12.2013 в 12:19)   письмо автору
 
   для: Sfinks   (10.12.2013 в 08:38)
 

Рискну предположить, что не быстрее, а зависит от ситуации. А вообще, вряд ли эта тема стоит того, чтобы сильно заострять на ней внимание.

  Ответить  
 
 автор: Enter   (10.12.2013 в 15:04)   письмо автору
 
   для: Sfinks   (09.12.2013 в 09:42)
 

Если важна скорость, то используйте Vanilla JS. Оч хороший фреймворк :-)

  Ответить  
 
 автор: Sfinks   (11.12.2013 в 08:37)   письмо автору
 
   для: Enter   (10.12.2013 в 15:04)
 

Не.... Смысл был не в том, чтобы найти лучшую альтернативу, а понять аномалию (на мой взгляд).

  Ответить  
 
 автор: Enter   (11.12.2013 в 12:11)   письмо автору
 
   для: Sfinks   (11.12.2013 в 08:37)
 

Ну, аномалия, на мой взгляд, в кроссбраузерности. Посмотрите тесты на второй ветке jQuery. Может, там будет иначе все. Так как поддержка старых браузеров была выкинута.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования