Применимость JQuery в современной разработке
Я думаю каждый веб-разработчик слышал о библиотеке JQuery которая в свое время была легендарной и использовалась повсеместно. Даже в настоящее время полно сайтов использующих ее. Эта библиотека была впервые опубликована в начале 2006 года и быстро стала популярной, а ее автор Джон Резиг надолго стал авторитетной знаменитостью в мире веб-разработки.
Так вот недавно этому проекту исполнилось 20 лет и к этому юбилею был опубликован релиз JQuery 4.0.0. С учетом того, что ранее я много пользовался этой библиотекой, да и сейчас иногда применяю, я захотел порассуждать о ее применимости в прошлом и в текущем времени.
Причины популярности JQuery
Я в своей профессиональной деятельности застал времена когда при разработке сайтов приходилось обязательно поддерживать печально известный IE6. В то время кроссбраузерная верстка была довольно трудозатратной, особенно если еще и требовался "pixel perfect" подход. К сожалению не каждый заказчик в то время был готов отказаться от аудитории IE6 (а также IE7 и IE8). Как-никак доля пользователей IE6-7-8 была долгое время значительной и игнорировать их было затруднительно.
Вообще с требованием обязательной поддержки IE6 был один довольно интересный момент. Для его поддержки приходилось использовать довольно тяжелые костыли которые сильно влияли на производительность, что в свою очередь вызывало негативную реакцию у пользователей. Т.е. типичный владелец интернет-магазина, думая что он получал больший охват аудитории за счет поддержки пользователей IE6, в реальности зачастую получал себе толпу раздраженных пользователей. Причем это также задевало и пользователей более продвинутых браузеров Firefox и Opera, поскольку перегруженная верстка также негативно влияла на производительность.
С IE7 и IE8 тоже было непросто в плане кроссбраузерной разработки. На мой взгляд с кроссбраузерностью полегче стало только с выходом IE9, который был значительно ближе к общим стандартам и с поддержкой HTML5, CSS3, SVG. Но IE9 вышел в марте 2011 года, а тогда уже были Firefox 4, Google Chrome 10 и Opera 11 (которая еще была на собственном движке Presto). При этом IE9 ставился на системы начиная с Windows Vista, хотя Windows XP все еще была популярной, а значит IE8 оставался еще какое-то время актуальным в плане поддержки.
Но помимо проблемной верстки сложности добавляла и необходимость писать кроссбраузерные скрипты под весь этот зоопарк браузеров с их отличающимся API, поэтому неудивительно что в то время среди веб-разработчиков повсеместно использовалась библиотека JQuery которая ощутимо облегчала написание кроссбраузерных скриптов, предоставляя при этом еще и удобный API.
Например для использования AJAX приходилось использовать код наподобие этого:
function getXmlHttpRequest() {
var xhr;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else {
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
xhr = false;
}
}
}
return xhr;
}
Библиотека JQuery намного упрощала всё до более простого и лаконичного варианта:
$.get("ajax/test.html", function(data) {
…
});
Помимо удобной работы с AJAX библиотека также давала кроссбраузерную реализацию поиска элементов по селектору. Причем этот функционал в JQuery в виде отдельного встроенного движка Sizzle появился задолго до появления в браузерах нативных методов DOM API querySelector() и querySelectorAll():
$(".result").html("Hello World!");
Вообще JQuery давал довольно комфортный API для кроссбраузерного взаимодействия с DOM, а также API для различного рода анимаций, чем в то время пользовались многие.
JQuery и плагины
Огромная популярность JQuery среди разработчиков привела к появлению для этой библиотеки большого количества плагинов. Всякие лайтбоксы, модальные окна, слайдеры, анимации, перетаскивалки, галереи и пр. Плагины в отличие от самого JQuery не всегда были качественными но тем не менее среди них были хиты, как например LightBox и более функциональный FancyBox (который я до сих пор местами использую), которые часто применялись дя создания модальных окон.
Нельзя не упомянуть и про JQuery UI, которая предоставляла набор кроссбраузерных виджетов для сайтов. Мне нередко приходилось работать с этими виджетами, хотя если честно большой любви к JQueryUI я не испытывал, поскольку на мой взгляд она плохо кастомизировалась под конкретный дизайн. Хорошо если дизайнер изначально учитывал типовой внешний вид тем JQuery UI но вот если внешний вид в дизайн-макете сильно отличался, то использовать JQuery UI становилось очень тяжело.
Снижение популярности JQuery
Развитие браузеров не стояло на месте. На замену IE пришел браузер Edge основанный на Chromium. Еще раньше на использование Chromium перешел браузер Opera. При этом у пользователей браузеры стали обновляться гораздо чаще. В общем веб-разработчикам в плане поддержки кроссбраузерности стало полегче.
Помимо этого развивался и JavaScript, стали повсеместно использоваться ES5, ES6 и т.д., а также появился Babel для обеспечения обратной совместимости. В дополнение к XMLHTTPRequest пришел fetch, который позволял как и JQuery делать HTTP-запросы в одну строчку. Соответственно при написании новых скриптов уже вполне можно было обходиться без JQuery.
Также стали набирать популярность реактивные фреймворки React/Vue/Angular/AlpineJS, которые местами конфликтовали с JQuery и его плагинами. Многие выросшие в отдельные проекты популярные JQuery плагины стали постепенно переводить код на нативное браузерное API, а также обзаводиться интеграциями с вышеперечисленными фреймворками.
В общем совокупность сразу множества факторов привела к тому что популярность JQuery стала постепенно падать и от ее применения стали все чаще отказываться. Но снижение популярности не значит что она заброшена и ей до сих пор находится применение в веб-разработке.
Применимость JQuery в настоящее время
Что касается применимости JQuery в современной разработке, то в большинстве случаев эта библиотека уже не является такой необходимой как раньше, да и выглядит чужеродно. Для реализации интерактивного UI она не так удобна, как современные реактивные фреймворки и тот же AlpineJS может оказаться в разы удобнее и гибче.
Тем не менее эта библиотека остается очень полезной в тех проектах, где есть много стабильного легаси кода или в тех проектах, где нужно обеспечить поддержку старых браузеров. Как известно доработка старого кроссбраузерного легаси кода это как хождение по минному полю, т.е. черт знает где и что может поломаться при очередном изменении, а JQuery все-таки предоставляет хорошо протестированный кроссбраузерный API.
Также JQuery можно использовать и как набор проверенных утилитарных функций для работы с DOM, особенно в проектах с планируемой длительной поддержкой.
В общем полностью списывать со счетов эту библиотеку не стоит, тем более как мы видим разработчики эту библиотеку не забрасывают и продолжают поддерживать. Недавно вот вышла JQuery 4.0.0 в которой убрали функционал который давно реализован нативно в браузерах, убрали поддержку совсем старых браузеров (за исключением IE11) ну и куча еще других изменений. Правда из-за таких изменений в API какие-то старые плагины и скрипты могут быть несовместимыми с новой версией JQuery и поэтому тем кто подключает эту библиотеку с CDN стоит зафиксировать мажорную версию чтобы что-нибудь на сайте не поломалось.
Заключение
В свое время библиотека JQuery сыграла значимую роль в веб-разработке. Многие идеи которые были реализованы в JQuery, вскоре были стандартизированы и реализованы нативно в браузерах. Например тот же поиск элементов по селекторам. Или например нативные методы append(), prepend(), after(), before(), которые еще были в первых версиях JQuery (см. реализации JQuery: append(), prepend(), after(), before()). В стандартах можно найти немало мест, где явно прослеживалось влияние JQuery.
В ближайшем будущем как мне кажется не стоит ждать в этой библиотеке появления какого-нибудь прорывного функционала. Видно что разработчики стараются не раздувать из JQuery типичный bloatware, а акцентрируются на качественной кроссбраузерной поддержке определенного функционала в течение долгого времени. Такой вот в мире веб-разработки островок стабильности.