Как стать автором
Обновить

Комментарии 88

Все зависит от масштаба приложения.
Чем приложение меньше, тем меньше смысла грузить немаленький jQuery, соответственно верно и обратное.

Я помню веб, когда все боролись за минимальный объем передаваемых клиенту данных, т.к. скорость никакая.
Т.е. понимая, что главная страница хабра грузит мне 12 Мб, то меня это немного печалит, т.к. тенденция такова, что некоторые сайты могут лего загрузить 50 и 100.
Думаю, считать кучу картинок и контента хабра в сумме с JS кодом не совсем корректно в эти 12 Мб.
Понятное дело. Я в общем и целом веду к тому, что сейчас есть сайты, где полезной информации на пару килобайт, а к тебе прилетает десятки мегабайт трафика.
НЛО прилетело и опубликовало эту надпись здесь
Как-то вы лихо связали объем JavaScript-а с CPU.
Каким образом кол-во кода говорит об аппетитах к CPU?
НЛО прилетело и опубликовало эту надпись здесь
Я понимаю, что на парсинг тратятся ресурсы CPU, как и на рендер страницы. Это, конечно, больше связано с ограничениями мобильных браузеров, многие из которых уже решены или планируются в ближайшем будущем.
В любом случае, информация интересная, спасибо.
Вот это было бы идеальным решением
Сейчас веб другой. Проблема с десятками мегабайт картинок на странице решается не сжатием, а lazyload. И это ппц.

И в итоге на мобильнике после окончания трафика на скорости 33кб/с любуешься не на сайт, а на набор пустых квадратов (ибо вебфонты тоже не грузятся).

Да, сейчас веб другой. Страничка в браузере может занимать 500 мб памяти
Чем приложение меньше, тем меньше смысла грузить немаленький jQuery

Насколько я понимаю, они со временем выпиливают слой совместимости с совсем уж древними браузерами, и как следствие размер библиотеки уменьшается со временем. Ради интереса посмотрел, текущая версия (3.4.1) занимает 86 kb и это ещё без gzip. По текущим реалиям будет точнее называть его "пренебрежимо маленький jQuery".

текущая версия (3.4.1) занимает 86 kb и это ещё без gzip
В jQuery 4 собираются выкинуть Sizzle и станет еще меньше (по моим оценкам на 17.5Кб).
используем jqLite, он вшит по умолчанию в AngularJS и как бы живем, не тужим)

Я не люблю jQuery в основном из-за кода, который она обычно порождает и из-за того, ч то если ты опечатаешься в селекторе, всё просто молча перестаёт работать.


В ванилле ошибки в селекторах будут видны сразу, но в остальном это будут точно такое же императивные спагетти. А когда прикинешь, чего стоит написать красивую и фичастую делегацию событий (кстати, YMNJQ не предлагает для этого ровно ничего), то сразу становится проще взять библиотеку. А если берешь библиотеку, то уж не лучше ли взять ту, которую все знают и которую отлично вылизали за больше чем 10 лет разработки.

Не понял чем опечатка в селекторе отличается в jQ и ваниле — оба варианта вернут что-то у чего можно будет проверять длину
Плюс не считаю что jQ что-то порождает, она как оружие, может защищать а может убивать, вопрос в том, в чьих руках она находится

оба варианта вернут что-то у чего можно будет проверять длину

Если забыть такую проверку, то в ванилле все упадет с эксепшеном. jQuery эти проблемы просто "проглатывает".


вопрос в том, в чьих руках она находится

Да-да, все так говорят. Но почему-то у всех получается спагетти. Потому что нет никакого способа как-то это структурировать и обеспечить повторное использование, кроме jQueryUI-плагинов, а ими никто не пользуется.

querySelector возвращает null и может вызвать эксепшен, но querySelectorAll (это какраз то что используется в jQ) возвращает NodeList и тут эксепшен может и не прийти, да, но он и ваниле не прийдет =) это надо иметь в виду и всё будет ок


Структурирование и повторное использование возможно на основе плагинов


это же библиотека, на ней можно сделать всё, вопрос в том, как далеко ты готов зайти =)


Ну и да, под каждую задачу нужно выбирать подходящий инструмент, а не ругать отвертку что она плохо забивает гвозди


Иногда тебе не нужен реакт, а хватит джиквери, но чаще и она не нужна

это же библиотека, на ней можно сделать всё, вопрос в том, как далеко ты готов зайти =)

Ну проблема в том, что когда заходишь достаточно далеко, то у тебя получается свой, маленький и глючный Knockout или Backbone. Тогда надо было сразу брать эти библиотеки:)


Ну и да, под каждую задачу нужно выбирать подходящий инструмент, а не ругать отвертку что она плохо забивает гвозди
Иногда тебе не нужен реакт, а иногда хватит и джиквери, но чаще и она не нужна

Речь как раз о тех случаях, когда условный реакт не нужен (или недоступен).

querySelectorAll (это какраз то что используется в jQ) возвращает NodeList и тут эксепшен может и не прийти, да, но он и ваниле не прийдет

С каких это пор эксепшен не прийдет? В любом случае прийдет.

Можно пример? Я рассматривал вариант с форичем, строка пропускается, ошибок нет

Не пойму о чем Вы, человек выше написал о не правильном селекторе, при чем тут форич?
А вот и пример:
document.querySelectorAll('.');
Только что проверил, он проглотил, только вот внутри уже сам JQuery выдал «Syntax error», что тоже как то странно, вот к примеру другой, более подходящий, пример:

document.querySelectorAll('>');

Да, можно создать ишью

Я не люблю jQuery в основном из-за кода, который она обычно порождает и из-за того, ч то если ты опечатаешься в селекторе, всё просто молча перестаёт работать.

Прям в точку, меня это тоже постоянно раздражает, если есть ошибка, то ее как минимум нужно вывести, можно обработать, и пойти дальше, но не уведомить программиста об этом, это какое то кощунство.
Но самый первый пример на этом сайте демонстрирует вескую причину jQuery использовать. Там строка простого кода на jQuery заменяется на 10 строк обычного JS!


Конкретно вот этот вот аргумент — так себе. В этом примере на 10 строк используется XMLHttpRequest, вместо которого сегодня смело можно использовать fetch.

Не смело, зависит от проекта. Только 90% посетителей поддерживают его, а в России только 80%: https://caniuse.com/#feat=fetch

круто! вместо одной надоевшей библиотечки можно собрать кучу полифиллов
НЛО прилетело и опубликовало эту надпись здесь
С одной стороны да, а с другой полифиллы можно загружать только при необходимости
window.fetch || document.write('<script src="fetch.js"><\/script>');
и со временем эта необходимость будет только падать.
звучит разумно, как и комментарий @ vlreshet, я сам большой поборник всяких оптимизаций и чистоты.

Но грязный исполнитель внутри меня пожевал прилипшую сигару и хриплым голосом спросил
— а что там насчет часов? время на эти таски оплатят?
НЛО прилетело и опубликовало эту надпись здесь
Я не старадю от использования JQuery никоим образом. Основной недостаток ее — из-за универсальности она может тормозить больше нативного кода. Ну и надо понимать где это применять, если это страница, куда будут идти миллионы пользователей в день — это одно, а если это специфическая страница в админке. куда будут заходить раз в неделю — это совсем другое…
Так что вопрос лиш в адекватности инструмента решаемой задаче.
Недостаток Jquery еще и в том, что вместе с ней подключается еще штук 5 всяких funcybox и прочих галерей и попапов, ~80% кода которых не используется и висят якорем. Хотя практически весь используемый функционал плагинов можно уместить в срипт в 20-30kb, вместо 100-200.
Качество over 90% полифилов таково, что у многих разработчиков на них стойкая аллергия как на класс. Многие «полифилы» делают не то и не так (ну вот автору лень было читать стандарт, он лучше знает, как должно быть), и при этом тормозят даже там, где их «услуги» не требуются (тут была пару месяцев назад весёлая статья на тему).
Особенно в этом плане отличается babel с его preset-env, который пихает в код непонятно что непонятно зачем.
НЛО прилетело и опубликовало эту надпись здесь
А Vue.js и jQuery в одном проекте — это уже малость перебор.

Почему кстати?
Vue 1.0 вполне отлично уживался с jQ, даже код красивый был.
Про v.2 не знаю, из за виртуального DOMа не возникают проблемы?

Если во вью вам нужен jquery да и в целом манипуляции с дом напрямую — вы делаете что-то не так.

Использую и других заставляю

Наконец-то кто это сказал! И я, конечно, про последний авторский абзац :)

как бы мы не стремились к перфекционизму, но "реальность полна разочарований". И бизнес требует решений здесь и сейчас, но денег нет, и надо держаться. Без бэкендеров жить нельзя, а фронт… фронт в немалой степени благодаря наличию jQ вполне становится подъёмен, понятен и сопровождаем при постоянной текучке кадров и использовании труда фрилансеров. Так что из наименьших зол — этот уровень абстракции как раз помогает избежать боли и страданий и хоть как-то крутиться. Ни разу не относя это к оправданиям, но если бы не эти спасительные 30кб, то я даже боюсь представить во что бы превратились наши и без того кучи метров говнокода без картинок в лендосах, написанные по сути бэкендерами, не от хорошей жизни, но… быть высокодоходным топом с кучей фронтендеров везёт не всем.

Я бы еще не оставил без внимания тот факт, что если забыть написать какую-то проверку в ванильном js, то все приложение может остановится, в то время как jQuery продолжит работу. jQuery экономит время на тестах и написании этих самых проверок, так как возвращает более предсказуемый результат. jQuery также удобно использовать когда хочешь быстро написать какую-то фичу, а потом уже работать над деталями или написанием под чистый js…
1 мес разработки. 
Dev. — На кой нам тут Vue, хватит и JQ.
6 мес разработки.
Заказчик: — Мы хотим отчеты, графики, панельки и чтоб все выезжало, крутилось и вертелось.
Dev. — Ок, у нас есть Vue, тока надо переписать JQ.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
В 2019ом году делать анимации на jQuery и гордиться этим…
«Он и нафиг не нужон нам, Vue этот ваш, сто лет без него жили и еще сто проживем»
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Возвращаясь к slideToggle я показывал удобство и продуманность в таким мелочах — одна строчка и не нужно ничего думать — и все.

В самом простом случае — одна строчка. Но стоит хоть немного усложнить задачу и вам придется городить велосипеды.
Например, если вам надо будет анимировать элементы при сортировке списка товаров — то количество кода на jquery будет уже гораздо больше чем на vue.
Фреймворки создаются для того чтобы решать стандартные задачи простыми способами.
Да, на jquery можно быстро и просто «налабать» и залить на прод по фтп. Но как-нибудь откроешь такой проект, слепленный из разрозненных кусков кода на jquery, с кучей заплаток в виде плагинов — и руки захочется оторвать этим горе-разработчикам.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
jquery уже достаточно взрослая либа являющаяся уже по сути языком чуть более высокого уровня чем javascript. Смысла не использовать примерно ноль, все равно как отказаться скажем от python/mysql и вернуться к си/файлБД ради «экономии места на сервере».
Размер пренебрежительно мал на фоне нынешних мегабайтных сайтов, так еще и нередко она уже предзагружена по cdn у юзера, а если нет — загружается один раз.
По уму лучше включили бы ее уже в браузеры, пусть даже в разных версиях, и вопрос был бы снят совсем.
По уму лучше включили бы ее уже в браузеры, пусть даже в разных версиях, и вопрос был бы снят совсем.

Сильно сказано
Jquery — это typescript прошлого поколения. Очень удобная и полезная штука.
jquery не только не дает профита лично мне, например при манипуляции атрибутами в svg картинках(в IE11и иже с ним), но и создает проблемы известные как blackhole SVG instance trees, другой момент что jquery снижает порог входа, как всепростительность у PHP, и порождает кучу плохих решений, но наверное эта проблема актуальна лишь на мелких сайтах, поэтому на всех собеседованиях прошу написать ajax запрос без jquery, хотя бы псевдокод
А насколько часто вы манипулируете атрибутами в svg? Просто интересно, у мня вот пока такой необходимости не возникало.

У меня недавно возникла такая проблема, когда я делал мини-игру, а в движке только jQuery. Но это первый раз за 12 лет фронтендерства, обычно я манипулирую SVG из Vue или чего-нибудь такого:)

Например в схеме вагонов ЖД поездов, когда пользователь выбирает себе посадочное место, насколько мне известно, небезызвестный монополист в данном деле вынужден пользоваться старыми версиями jquery, поскольку проблема остается вплоть до версии 3.1.1. Странно что кто то оценил реальную проблему в jquery дизлайком — отрицание проблемы не решение проблемы
НЛО прилетело и опубликовало эту надпись здесь
Vue — фреймворк, jQuery — библиотека. В этом вся разница.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

В чем разница между этими двумя строками?


new MyComponent().$mount('.selector') // Vue

$('.selector').myComponent() // jQuery

Почему одну из них принято считать фреймворком, а вторую – библиотекой?

Чтобы нормально писать приложение на Vue увы придется использовать webpack и прочее. Иначе не возможно внятно структурировать код и использовать .vue файлы
НЛО прилетело и опубликовало эту надпись здесь

Плюс в jQuery что он прост, чтобы заменить его чистым JS, надо искать кучу полифиллов, и все они подключаются по разному и имеет разное качество исполнения.

ИМХО, реальная проблема jQuery в том, что порог входа настолько низкий, что люди могут писать вполне рабочие приложения толком не освоив JavaScript.
Сам юзаю jQuery там, где нужно быстро что-то сделать, буквально в пару часов/дней, сдать и забыть.
На основном проекте перевожу с jQuery на Vue.js и чистый JavaScript.

Смотря какие возможности jQuery использовать. За ajax и Differed я в наше время руки бы отрывал :)

НЛО прилетело и опубликовало эту надпись здесь
Например, конструкция el.insertAdjacentElement('afterend', other), безусловно, работает. Но куда приятнее выглядит $(el).after(other)

Есть же Node.insertBefore. Не надо утрировать и пугать неосведомленных читателей.


Хотя мне никогда особо не нравился внешний вид функции $(), она несравненно лучше, чем то, что дают нам стандартные API для работы с DOM

если основное достоинство библиотеки – это лаконичное API, то можно просто добавить себе шорткатов:


var $ = document.querySelector.bind(document)
var on = function(element, event, handler) {element.addEventListener(event, handler)}

Этого с запасом хватит для базовых потребностей.


Если хочется ajax и анимаций, то есть 3кб библиотека https://blissfuljs.com/, что намного меньше заявленных 17 у минимального jQuery.

А вообще удивительно как jQuery до сих пор держит реноме простой и компактной библиотеки, хотя там внутри накручено много всего странного:



Это какой-то синдром утенка, когда-то давно с нее начинали и теперь не можем отвязаться, хотя оверхеда там больше чем пользы

Обёртка над кастомными событиями используются в jQuery, потому что даже в 18 Edge есть весьма нелепый баг.

НЛО прилетело и опубликовало эту надпись здесь
Вас не смущает, что Before и After это разные положения?

Упс, пропустил что там after. По своему опыту могу сказать, что и необходимости в нем особой не было. Для создания сортируемых списков insertBefore справляется прекрасно, а для всего остального – лучше использовать appendChild, а не вставлять что-то в середину.


И изучать их от проекта к проекту?

Что вы имеете в виду? Что изучать, с ними вроде и так все понятно.

НЛО прилетело и опубликовало эту надпись здесь

Если у вас меньше сотни строк джаваскрипта, то это нестрашно, все и так на виду.


А если больше, то есть намного лучшие решения для организации кода, чем jQuery

Что вы имеете в виду? Что изучать, с ними вроде и так все понятно.

Одни используют обёртки, другие не используют, третьи приходят на проект и пишут свои… В коде кавардак

Это было предложение для маленьких скриптов.


Если там много манипуляций с dom, то, наверное, лучше переписать на декларативный фреймворк (Vue какой-нибудь), а не приукрашивать спагетти-код короткими методами из jQuery

Зарегистрируйтесь на Хабре, чтобы оставить комментарий