Несколько раз я слышал, что самым сильным активом jQuery является то, как он запрашивает и манипулирует элементами в DOM: вы можете использовать CSS-запросы для создания сложных запросов, которые было бы очень сложно выполнить в обычном javascript. Однако, насколько мне известно, вы можете достичь того же результата с помощью document.querySelector
или document.querySelectorAll
, которые поддерживаются в Internet Explorer 8 и выше.
Таким образом, вопрос заключается в следующем: зачем «рисковать» издержками jQuery, если его самый сильный актив может быть достигнут с помощью чистого JavaScript?
Я знаю, что jQuery имеет больше, чем просто CSS-селекторы, например, кросс-браузерный AJAX, хорошее прикрепление событий и т. Д. Но его часть запросов - очень большая часть силы jQuery!
Есть предположения?
источник
querySelector
методах. (3) Делать вызовы AJAX намного быстрее и проще с jQuery. (4) Поддержка в IE6 +. Я уверен, что есть еще много моментов, которые можно сделать тоже.querySelectorAll
, что вам нужно для работы в старых браузерах, тогда jQuery - очевидный выбор. Я не говорю, что вы должны использовать это так .Ответы:
document.querySelectorAll()
имеет несколько несоответствий в разных браузерах и не поддерживается в старых браузерах.Это, вероятно, больше не вызовет проблем в наши дни . У него очень не интуитивно понятный механизм обзора и некоторые другие не очень приятные функции . Также с javascript вам сложнее работать с результирующими наборами этих запросов, что во многих случаях может потребоваться. JQuery предоставляет функции для работы на них , как:filter()
,find()
,children()
,parent()
,map()
,not()
и еще несколько. Не говоря уже о способности jQuery работать с селекторами псевдоклассов.Тем не менее, я бы не считал эти вещи сильнейшими функциями jQuery, а другими вещами, такими как «работа» над dom (события, стили, анимация и манипуляции) совместимым с кросс-браузером способом или интерфейсом ajax.
Если вам нужен только механизм выбора из jQuery, вы можете использовать тот, который использует сам jQuery: Sizzle. Таким образом, вы получаете мощь механизма выбора jQuerys без неприятных накладных расходов.
РЕДАКТИРОВАТЬ: Просто для записи, я большой фанат JavaScript JavaScript. Тем не менее, это факт, что вам иногда нужно 10 строк JavaScript, где вы бы написали 1 строку jQuery.
Конечно, вы должны быть дисциплинированными, чтобы не писать jQuery следующим образом:
Это чрезвычайно трудно прочитать, хотя последнее довольно ясно:
Эквивалентный JavaScript будет гораздо более сложным, что иллюстрируется приведенным выше псевдокодом:
1) Найдите элемент, рассмотрите возможность взять весь элемент или только первый.
2) Выполните итерацию по массиву дочерних узлов с помощью некоторых (возможно, вложенных или рекурсивных) циклов и проверьте класс (список классов доступен не во всех браузерах!)
3) применить стиль CSS
Этот код будет как минимум в два раза больше строк кода, которые вы пишете с помощью jQuery. Кроме того, вам придется учитывать кросс-браузерные проблемы, которые компрометируют серьезное преимущество в скорости (помимо надежности) нативного кода.
источник
querySelectorAll
между браузерами? И как с помощью jQuery решить эту проблему, поскольку jQuery использует,querySelectorAll
когда доступно?Если вы оптимизируете свою страницу для IE8 или новее, вам следует подумать, нужен ли вам jquery или нет. Современные браузеры изначально имеют множество ресурсов, которые предоставляет jquery.
Если вы заботитесь о производительности, вы можете получить невероятные преимущества в производительности (на 2-10 раз быстрее), используя собственный javascript: http://jsperf.com/jquery-vs-native-selector-and-element-style/2
Я преобразовал div-tagcloud из jquery в нативный javascript (совместимый с IE8 +), результаты впечатляют. В 4 раза быстрее, с небольшими накладными расходами.
Вы, возможно, не нуждаетесь Jquery предоставляет действительно хороший обзор, какие нативные методы заменяют для какой версии браузера.
http://youmightnotneedjquery.com/
Приложение: дальнейшее сравнение скорости, как нативные методы конкурируют с jquery
Array: $ .inArray vs Array.indexOf: Jquery на 24% медленнее
DOM: $ .empty vs Node.innerHtml: Jquery на 97% медленнее
DOM: $ .on против Node.addEventListener: Jquery на 90% медленнее
DOM: $ .find против Node.queryselectorall: Jquery на 90% медленнее
Массив: $ .grep против Array.filter: родной на 70% медленнее
DOM: $ .show / hide против отображения нет: Jquery на 85% медленнее
AJAX: $ .ajax против XMLHttpRequest: Jquery медленнее на 89%
Высота: $ .outerHeight против смещенияHeight: Jquery на 87% медленнее
Аттр: $ .attr против setAttribute: Jquery на 86% медленнее
источник
$(el).find(selector)
это не равно,el.querySelectorAll(selector)
а производительность нативных методов часто ужасна: stackoverflow.com/q/14647470/1047823Чтобы понять, почему jQuery так популярен, важно понять, откуда мы пришли!
Около десяти лет назад лучшими браузерами были IE6, Netscape 8 и Firefox 1.5. В те времена было мало кросс-браузерных способов выбора элемента из DOM
Document.getElementById()
.Итак, когда jQuery был выпущен в 2006 году , это было довольно революционно. Тогда jQuery установил стандарт того, как легко выбирать / изменять элементы HTML и инициировать события, потому что его гибкость и поддержка браузера были беспрецедентными.
Теперь, более десяти лет спустя, многие функции, которые сделали jQuery столь популярным, стали включены в стандарт javaScript:
$()
вы можете использоватьDocument.querySelectorAll()
$el.on()
Теперь вместо jQuery вы можете использоватьEventTarget.addEventListener()
$el.toggleClass()
Теперь вместо jQuery вы можете использоватьElement.classList.toggle()
Они вообще не были доступны еще в 2005 году. Тот факт, что они существуют сегодня, очевидно, ставит вопрос о том, почему мы вообще должны использовать jQuery. И действительно, люди все чаще задаются вопросом, стоит ли вообще использовать jQuery .
Так что, если вы думаете, что понимаете JavaScript достаточно хорошо, чтобы обходиться без jQuery, пожалуйста! Не пытайтесь использовать jQuery только потому, что так делают многие другие!
источник
Это потому, что JQuery может сделать гораздо больше, чем
querySelectorAll
.Прежде всего, jQuery (и Sizzle, в частности) работает для старых браузеров, таких как IE7-8, которые не поддерживают селекторы CSS2.1-3.
Кроме того, Sizzle (который является движком селектора позади jQuery) предлагает вам множество более продвинутых инструментов селектора, таких как
:selected
псевдокласс, расширенный:not()
селектор, более сложный синтаксис, такой как in$("> .children")
и так далее.И он делает это кросс-браузеров, безупречно, предлагая все, что может предложить jQuery (плагины и API).
Да, если вы думаете, что можете положиться на простые селекторы классов и идентификаторов, jQuery - это слишком много для вас, и вы будете платить слишком много. Но если вы этого не сделаете и хотите воспользоваться всеми преимуществами jQuery, используйте его.
источник
Селекторный движок jQuery Sizzle может использовать,
querySelectorAll
если он доступен. Это также сглаживает несоответствия между браузерами для достижения единообразных результатов. Если вы не хотите использовать все jQuery, вы можете просто использовать Sizzle отдельно. Это довольно фундаментальное колесо для изобретения.Вот некоторые черри из источника, которые показывают, что jQuery (w / Sizzle) выбирает для вас:
Режим причуда Safari:
Если этот охранник не работает, он использует версию Sizzle, которая не улучшена
querySelectorAll
. Кроме того, есть специальные маркеры несоответствий в IE, Opera и браузере Blackberry.И если все остальное терпит неудачу, это возвратит результат
oldSizzle(query, context, extra, seed)
.источник
С точки зрения удобства поддержки кода, есть несколько причин придерживаться широко используемой библиотеки.
Одним из основных является то, что они хорошо документированы и имеют сообщества, такие как ... скажем ... stackexchange, где можно найти помощь по библиотекам. С пользовательской кодированной библиотекой у вас есть исходный код и, возможно, документ с практическими рекомендациями, если только кодеры не потратили больше времени на документирование кода, чем на его написание, что крайне редко встречается.
Написание вашей собственной библиотеки может работать для вас , но стажеру, сидящему за соседним столом, может быть легче освоиться с чем-то вроде jQuery.
Назовите это сетевым эффектом, если хотите. Это не значит, что код будет лучше в jQuery; только то, что лаконичный характер кода облегчает понимание общей структуры для программистов всех уровней квалификации, хотя бы потому, что в просматриваемом файле сразу виден более функциональный код. В этом смысле 5 строк кода лучше, чем 10.
Подводя итог, я вижу основные преимущества jQuery как лаконичность кода и повсеместность.
источник
Вот сравнение, если я хочу применить тот же атрибут, например, скрыть все элементы класса "my-class". Это одна из причин использовать jQuery.
JQuery:
JavaScript:
Поскольку jQuery уже настолько популярен, они должны были заставить document.querySelector () вести себя так же, как $ (). Вместо этого document.querySelector () выбирает только первый соответствующий элемент, что делает его полезным только наполовину.
источник
document.querySelectorAll('.my-class').forEach(el => el.style.display = 'none');
. Тем не менее, даже если короче, производительность родной всегда лучше.как говорится на официальном сайте: «jQuery: пиши меньше, делай больше, библиотека JavaScript»
попробуйте перевести следующий код JQuery без какой-либо библиотеки
источник
addClass()
и наshow()
самом деле не считается. А что касается$('p.neat')
, вы можете взглянуть на querySelector / All.document.querySelectorAll('p.neat').forEach(p=>p.classList.add('ohmy'));
и пусть CSS сделает все остальное Чуть более длинный код, но гораздо эффективнее. Конечно, его решение было не так доступно в Legacy IE дней. Часть «Делай больше» иронична. JQuery требует около ста строк кода, чтобы найти что-то, поэтому делать больше не всегда продуктивно.Я думаю, что правильный ответ заключается в том, что jQuery был разработан задолго до того, как
querySelector/querySelectorAll
стал доступен во всех основных браузерах.Первоначальный выпуск jQuery был в 2006 году . На самом деле, даже jQuery не был первым, кто реализовал CSS-селекторы .
IE был последним браузером для реализации
querySelector/querySelectorAll
. Его восьмая версия была выпущена в 2009 году .Так что теперь селекторы DOM-элементов больше не являются сильной стороной jQuery. Тем не менее, у него все еще есть много положительных моментов, таких как ярлыки для изменения содержимого CSS и html элемента, анимации, привязка событий, ajax.
источник
Старый вопрос, но спустя пол десятилетия стоит вернуться. Здесь я обсуждаю только селекторный аспект jQuery.
document.querySelector[All]
поддерживается всеми текущими браузерами, вплоть до IE8, поэтому совместимость больше не является проблемой. Я также не нашел проблем с производительностью, чтобы говорить о (это должно было быть медленнее, чемdocument.getElementById
, но мое собственное тестирование показывает, что это немного быстрее).Поэтому, когда дело доходит до манипулирования элементом напрямую, оно должно быть предпочтительнее, чем jQuery.
Например:
это значительно выше:
Чтобы что-то сделать вообще, jQuery должен пройти через сто строк кода (я однажды проследил код, такой как приведенный выше, чтобы увидеть, что на самом деле делал с ним jQuery). Это явно пустая трата времени каждого.
Другая значительная стоимость jQuery заключается в том, что он оборачивает все внутри нового объекта jQuery. Эти издержки особенно расточительны, если вам нужно снова развернуть объект или использовать один из методов объекта для работы со свойствами, которые уже представлены в исходном элементе.
Однако преимущество jQuery заключается в том, как он обрабатывает коллекции. Если требуется установить свойства нескольких элементов, jQuery имеет встроенный
each
метод, который позволяет что-то вроде этого:Для этого с Vanilla JavaScript потребуется что-то вроде этого:
что некоторые находят пугающим.
Селекторы jQuery также немного отличаются, но современные браузеры (исключая IE8) не принесут особой пользы.
Как правило, я предостерегаю от использования jQuery для новых проектов:
Если ничего из вышеперечисленного не имеет значения, делайте что хотите. Однако jQuery уже не так важен для кроссплатформенной разработки, как раньше, поскольку современные JavaScript и CSS идут намного дальше, чем раньше.
Это не упоминает о других функциях jQuery. Однако я думаю, что им тоже нужно присмотреться.
источник
Дело в том, что с функцией $ () она создает массив, а затем разбивает его на вас, но с document.querySelectorAll () она создает массив, и вам нужно разбить его.
источник
Просто комментарий по этому поводу: при использовании lite design design, jquery selector по какой-то причине не возвращает свойство для design design.
Для:
Это работает:
Это не:
источник