Транспортир прикован против нецепных селекторов - PullRequest
2 голосов
/ 25 марта 2019

Мне кажется, я понимаю, что в транспортире

$(selector1).$(selector2)

обычно эквивалентно:

$(selector1 selector2)

Есть ли причина отдавать предпочтение одному над другим, возможно, эффективности? Я склоняюсь к тому, что комбинированная 2-я версия выполняет одиночный поиск, тогда как оригинальная версия выполняет несколько поисков, что звучит менее эффективно. Однако когда я читаю о том, как на самом деле работает CSS, сканируя весь dom для каждого дополнительного термина в выражении (и делая это справа налево, начиная с «ключевого селектора»), я задаюсь вопросом, делает ли код под Protractor более эффективным сначала выполнить простой селектор, чтобы уменьшить пространство поиска, в зависимости от того, как работает пунктир. "$ ()" при добавлении к предыдущему.

И изменится ли ответ на этот вопрос при сравнении:

$$(multiCss).$(singleCss)

против

$(multiCss singleCss)

А если нет проблем с эффективностью или правильностью, считается ли одна форма более читаемой, чем другая? Это может быть ориентированным на область основанных на мнении ответов, но я спрашиваю, является ли один или другой каноническим стилем. Если это просто личное мнение, а не вопрос канонического стиля, то забудьте эту часть вопроса.

1 Ответ

2 голосов
/ 25 марта 2019

Я нашел это чрезвычайно интересным. Обратите внимание, что это НЕ КАНОНИЧЕСКИЙ ОТВЕТ
Это всего лишь набор данных из некоторых тестов, которые я провел по этой теме Скорее всего, я проведу дополнительные тесты, когда у меня останется несколько часов, чтобы правильно настроить чистую среду тестирования, но это все, что я успел сделать прямо сейчас.

Для моего теста я перешел на страницу, а затем запустил функцию ожидаемого () для 10 отдельных элементов, чтобы проверить их текст. Это был локальный хостинг, поэтому скорость интернета не сыграла роли. Я выполнил тест 5 раз с элементами, выбранными как $().$(), а затем еще 5 как $('CSS CSS'). Затем я повторил тест в режиме без головы, чтобы увидеть, получу ли я другие результаты.


$ (). $ () Нет времени без головы:
1) 16,062
2) 16,297
3) 15,029
4) 15,773
5) 16,699
Средний: 15,972


$ (). $ () Время без головы:
1) 14,705
2) 15,081
3) 15.806
4) 14,944
5) 14.997
Средний: 15.107


$ ('CSS CSS') Нет времени без головы:
1) 16,172
2) 15,556
3) 16.604
4) 16,706
5) 15,733
Средний: 16,154


$ (CSS CSS) Времена без головы:
1) 15,288
2) 15,136
3) 15,11
4) 15,152
5) 14.805
Средний: 15,098


Как и вы, я ожидал, что $().$() будет быстрее, и хотя в моих тестах это было верно для не безголовых, ни в коей мере. Безголовые времена проходили в основном с одинаковой скоростью независимо от того, как вы делали селекторы. Единственный полезный вывод из этих данных заключается в том, что потенциальная разница в производительности в зависимости от селекторов достаточно мала, чтобы не иметь заметных различий, и ее необходимо будет протестировать в гораздо большем масштабе, чтобы, возможно, начать видеть значительно разные времена. Конечно, я хочу изучить кое-что еще, когда у меня будет достаточно свободного времени для настройки достаточно большого тестового примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...