Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 29.05.2014, 12:39
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

http://jsperf.com/jquery-eq-method-v...udo-selector/6
WorM32, он правильный с точки зрения логики и абстракции. То что он работает медленнее - вопрос реализации в jquery.
__________________
29375, 35
Ответить с цитированием
  #12 (permalink)  
Старый 29.05.2014, 12:47
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от Aetae
он правильный с точки зрения логики и абстракции
Почему? Одинаково же, не?
Ответить с цитированием
  #13 (permalink)  
Старый 29.05.2014, 12:54
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

Sweet,
Нет. Если смотреть абстрактно:
$("div.b").eq(1) - взять все элементы с классом "div.b", вернуть второй из них.
$("div.b:eq(1)") - взять элемент имеющий класс "div.b" и идущий вторым.

Соответственно второе должно выполнятся как минимум не медленнее первого.
Почему же реальность так несовершенна - вопрос к авторам jq.)
__________________
29375, 35
Ответить с цитированием
  #14 (permalink)  
Старый 29.05.2014, 13:58
Профессор
Отправить личное сообщение для WorM32 Посмотреть профиль Найти все сообщения от WorM32
 
Регистрация: 11.02.2014
Сообщений: 303

Сообщение от Aetae Посмотреть сообщение
Sweet,
Нет. Если смотреть абстрактно:
$("div.b").eq(1) - взять все элементы с классом "div.b", вернуть второй из них.
$("div.b:eq(1)") - взять элемент имеющий класс "div.b" и идущий вторым.

Соответственно второе должно выполнятся как минимум не медленнее первого.
Почему же реальность так несовершенна - вопрос к авторам jq.)
С точки зрения jQuery ваши определения равнозначны, тк второй вариант это сахар для первого (и забегая вперед, он не может быть ни при каких условиях быть быстрее первого именно по этой причине)

Цитата:
Because :eq() is a jQuery extension and not part of the CSS specification, queries using :eq() cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use $("your-pure-css-selector").eq(index) instead.
http://api.jquery.com/eq-selector/

А вот с точки зрения браузера, если бы это был нативный селектор, ваше определение в корне неправильное.
Определение в таком случае должно было быть такое: "Выбрать все элементы идущие вторыми. Из этих элементов выбрать с классом b и тегом div".

Последний раз редактировалось WorM32, 29.05.2014 в 14:02.
Ответить с цитированием
  #15 (permalink)  
Старый 29.05.2014, 14:36
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

Мде. А ничего что мы работаем с абстракциями? Внутренняя кухня должна оптимизироваться и подстраиваться под логику человека, а никак не наоборот. Выбор одного элемента должен быть быстрее выбора всех. Как это достигается - меня не волнует.
__________________
29375, 35
Ответить с цитированием
  #16 (permalink)  
Старый 29.05.2014, 15:05
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от WorM32
второй вариант это сахар для первого
В чём сахар-то? Вообще же одно и тоже: одинаковое количество символов и разница только в одном символе (:eq вместо .eq).
Сообщение от Aetae
Если смотреть абстрактно
Причём тут абстракция и "смотреть абстрактно". Абстакция подразумевает абстрагироваться от реализации, не? А оба варианта имеют захардкоженную структуру DOM.
Посоны, вы просто холиварите. Это одно и тоже:
$("div.b").eq(1)
$("div.b:eq(1)")
$("div.b").find(":eq(1)")
$(":eq(1)", "div.b")
Ответить с цитированием
  #17 (permalink)  
Старый 29.05.2014, 15:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,114


<!DOCTYPE HTML>

<html>

<head>
    <title>Untitled</title>
</head>

<body>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    <ul>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    <script>
        var time1 = new Date()
         for (var i = 0; i < 1000; i++) {
            $("div.b:eq(1)").html()
        }
        time1 = ((new Date()).getTime() - time1.getTime());
        var time2 = new Date()
         for (var i = 0; i < 1000; i++) {
            $('div.b').eq(1).html()
        }
        time2 = ((new Date()).getTime() - time2.getTime());
        var time3 = new Date()
         for (var i = 0; i < 1000; i++) {
            $("div.b").find(":eq(1)").html()
        }
        time3 = ((new Date()).getTime() - time3.getTime());
        var time4 = new Date()
         for (var i = 0; i < 1000; i++) {
            $(":eq(1)", "div.b").html()
        }
        time4 = ((new Date()).getTime() - time4.getTime());
        alert([time1, time2, time3, time4])
    </script>
</body>

</html>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно спроектировать приложение? Alex Danilov ExtJS 7 22.05.2012 19:00
extjs 4 mvc, разбираемся с model & store Lord Daedra ExtJS 1 18.08.2011 22:36
динамические списки Shaci jQuery 0 14.12.2009 15:03
Как правильно писать классы с использованием jQuery? Tpona jQuery 7 13.10.2009 15:16