imageМногие, когда речь заходит о jQuery, говорят так: «Просто пользуйтесь обычным JavaScript. Библиотека jQuery вам не нужна». Что тут сказать? Я не нуждаюсь во многих вещах, но, несмотря на это, хорошо, когда они есть. Так и jQuery. Я в этой библиотеке не нуждаюсь, но её, определённо, приятно иметь под рукой.

Сайты наподобие You might not need jQuery (YMNJQ) продвигают идею, в соответствии с которой от jQuery очень легко избавиться. Но самый первый пример на этом сайте демонстрирует вескую причину jQuery использовать. Там строка простого кода на jQuery заменяется на 10 строк обычного JS!

Большинство API JavaScript, в особенности те из них, которые нацелены на работу с DOM, оскорбляют мои эстетические чувства. Это — если мягко выразить моё к ним отношение. Если же говорить прямо, то я думаю, что эти API — полный кошмар. Например, конструкция el.insertAdjacentElement('afterend', other), безусловно, работает. Но куда приятнее выглядит $(el).after(other). Хотя мне никогда особо не нравился внешний вид функции $(), она несравненно лучше, чем то, что дают нам стандартные API для работы с DOM. Я знаю о том, что вместо $() можно использовать нечто вроде jQuery(sel) или window.jq = jQuery. Но программирую я не в безвоздушном пространстве. Поэтому предпочитаю пользоваться стандартными приёмами. Не знаю, хорошо это или плохо, но стандартом при использовании jQuery стала конструкция $().

Попытайтесь быстро вспомнить о том, как получить элемент-сосед другого элемента средствами DOM. Что для этого использовать — nextSibling или nextElementSibling? А в чём разница? А какие браузеры поддерживают тот или иной метод? Пока вы пытаетесь это вспомнить и заглядываете на MDN, проверяя себя, я, пользуясь jQuery, просто пишу next() или prev().

Выполнение многих обычных операций реализовано в JavaScript-API неудобно. Я мог бы привести тут целый список таких операций, но за меня это отлично сделано на странице YMNJQ.

Для решения различных простых задач средствами JS нужны вспомогательные функции. И на сайте YMNJQ, опять же, можно найти немало примеров. Использование jQuery представляет собой стандартный способ включения в код проектов таких вспомогательных функций. При этом программисту не нужно каждый раз, когда ему что-то подобное понадобится, выхватывать куски кода из первых подвернувшихся под руку ответов на Stack Overflow.

Хотя в наши дни проблемы совместимости браузеров потеряли былую остроту, они всё ещё актуальны. Особенно — для тех, кто не относится к лагерю разработчиков, считающих, что если что-то работает в 85% браузеров, то им это подходит. Кстати, вот материал о том, почему Hello CSS не использует CSS-переменные.

Следует ли всегда пользоваться jQuery? Нет, конечно нет. Любая дополнительная зависимость — это рост сложности проекта и рост объёма его кода. Но jQuery — библиотека не такая уж и большая. Стандартная сборка, минифицированная и сжатая, занимает 30 Кб. Кастомная сборка без ajax и без редко используемых возможностей — это 23 Кб. А сборка, в которой вместо SizzleJS используется querySelector, занимает всего 17 Кб. Меня, для решения множества задач, вполне устраивает и стандартная сборка размером 30 Кб, и оптимизированная, размером 17 Кб.

Тут можно посмотреть на то, сколько усилий приложено к тому, чтобы убрать jQuery из Bootstrap и перейти на обычный JS.

Разработчики написали собственные вспомогательные функции. Им пришлось отказаться от поддержки IE, так как такую поддержку оказалось очень сложно реализовать. Они сделали несовместимым API («мы всё сломали») и потратили на всё это полтора года. Не могу сказать, что то, что получилось, намного лучше того, что было.

Я понимаю причины перевода Bootstrap на обычный JS. Например, разработчики хотят использовать Bootstrap с Vue.js, или ещё с чем-то подобным. А Vue.js и jQuery в одном проекте — это уже малость перебор. Я — большой сторонник сокращения объёмов ненужного кода в вебе (вот и вот — пара материалов об этом). Но тут я предлагаю смотреть на ситуацию с прагматичной и реалистичной точки зрения. Неужели включение в Bootstrap 17 Кб кода jQuery — это так плохо? Когда я говорю, что для просмотра сайтов вроде Medium или New York Times нужно загрузить больше мегабайта JavaScript-кода, меня, защищая сложившуюся ситуацию, спрашивают о том, не сижу ли я на какой-нибудь 56-килобитной модемной линии. Мегабайт JS — это нормально. Неужто 17 Кб jQuery — это неподъёмная ноша?
Существуют и веские причины jQuery не использовать. Например, jQuery не нужна в том случае, если вы пишете код, которым вы хотите поделиться с другими, или если вы создаёте какую-нибудь маленькую функцию. Но зачем выворачиваться наизнанку только ради того, чтобы не пользоваться jQuery? Зачем все эти усилия, если можно просто написать $()? Я не думаю, что jQuery стоит использовать везде и всегда, но и не считаю правильным фанатичный отказ от jQuery.

Хочу отметить, что я не женат на jQuery. Я с удовольствием буду пользоваться чем-то вроде «jQuery light» — некой библиотекой, которая перекрывает недостатки стандартных API, давая программисту что-то более приятное. Сайт YMNJQ рекомендует, кроме прочих, библиотеки bonzo и $dom, предназначенные для решения разных задач. Но многие из них, как кажется, давно не поддерживаются. Кроме того, многие уже знают jQuery. Зачем менять jQuery на что-то другое без веских причин?

Многие читатели могут задаться вопросом о том, что я, в русле этого материала, могу сказать по поводу Vue.js, React и других современных фреймворков. Но цель этой статьи — сопоставить обычный JavaScript и jQuery, а не предлагать сообществу «Грандиозную общую теорию фронтенд-разработки».

Учитывая вышесказанное, я полагаю, что могу обнаружить совсем немного причин использовать обычный JS там, где можно воспользоваться jQuery. Это так преимущественно из-за того, что я хочу создавать быстрые страницы и использовать при этом простейшие рабочие конструкции. При этом я стремлюсь к тому, чтобы мои страницы смогло бы просмотреть как можно большее количество пользователей Сети. Опыт подсказывает мне, что кратчайшим путём к достижению этой цели служат шаблоны, сгенерированные на сервере, которые слегка, в стиле «прогрессивного улучшения», приправлены JavaScript. Если сравнить такие проекты с чем-то, в чём используется нечто более сложное, то оказывается, что их часто бывает проще разрабатывать. Такие проекты обычно быстрее, в них обычно меньше ошибок, а в ходе работы над ними вентилятор ноутбука не издаёт шум, способный разбудить весь дом.

Означает ли это, что современные веб-фреймворки и мощные библиотеки — это всегда плохо? Нет, не означает. Очень немногое достойно того, чтобы «всегда» называться плохим или хорошим. Но использовать фреймворк — значит идти на некие компромиссы (это, конечно, справедливо и для jQuery).

В целом, веб мне видится средой для просмотра документов, а не чем-то вроде операционной системы. И «документный подход» хорош не только для обычных сайтов, но и для многих «веб-приложений» (что бы так ни называли).

Уважаемые читатели! Пользуетесь ли вы jQuery?



Комментарии (82)


  1. UrbanRider
    10.06.2019 13:10

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

    Я помню веб, когда все боролись за минимальный объем передаваемых клиенту данных, т.к. скорость никакая.
    Т.е. понимая, что главная страница хабра грузит мне 12 Мб, то меня это немного печалит, т.к. тенденция такова, что некоторые сайты могут лего загрузить 50 и 100.


    1. helgihabr
      10.06.2019 13:19

      Думаю, считать кучу картинок и контента хабра в сумме с JS кодом не совсем корректно в эти 12 Мб.


      1. UrbanRider
        10.06.2019 13:41

        Понятное дело. Я в общем и целом веду к тому, что сейчас есть сайты, где полезной информации на пару килобайт, а к тебе прилетает десятки мегабайт трафика.


      1. Drag13
        11.06.2019 13:19

        JavaScript-а там больше 2mb. И 500kb JS намного критичнее чем 5mb картинок. Потому что вы можете подключиться к хорошему WiFi, а к хорошему процессору уже никак.


        В идеале (наверное кто-то это уже даже сделал) разбить JQuery на функции и импортить только то что реально нужно, как сделали с Lodash.


        1. helgihabr
          11.06.2019 13:24

          Как-то вы лихо связали объем JavaScript-а с CPU.
          Каким образом кол-во кода говорит об аппетитах к CPU?



          1. Drag13
            11.06.2019 13:37

            Потому что JS (даже который не выполняется) требует ресурсов CPU для того что бы его распарсить. И если это синхронный скрипт размещенный в хеде, то пока вы его не распарсите, вы ничего не увидите. Эта проблема не очень актуальна для декстопов, а вот для мобильных телефонов не первой свежести встает в полный рост. Подробнее можно почитать тут.
            Ну и заодно моя статться тут


            1. helgihabr
              11.06.2019 13:45

              Я понимаю, что на парсинг тратятся ресурсы CPU, как и на рендер страницы. Это, конечно, больше связано с ограничениями мобильных браузеров, многие из которых уже решены или планируются в ближайшем будущем.
              В любом случае, информация интересная, спасибо.


        1. inoyakaigor
          11.06.2019 13:29

          Вот это было бы идеальным решением


    1. 0x131315
      10.06.2019 22:11

      Сейчас веб другой. Проблема с десятками мегабайт картинок на странице решается не сжатием, а lazyload. И это ппц.


      1. vladkorotnev
        11.06.2019 03:12

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


      1. OlegTar
        11.06.2019 14:54

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


    1. Source
      11.06.2019 00:36

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

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


      1. mobi
        11.06.2019 14:00

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


  1. fgeniy
    10.06.2019 13:16

    используем jqLite, он вшит по умолчанию в AngularJS и как бы живем, не тужим)


  1. k12th
    10.06.2019 14:02

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


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


    1. toptalo
      10.06.2019 15:42

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


      1. k12th
        10.06.2019 15:56

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

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


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

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


        1. toptalo
          10.06.2019 16:31
          -1

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


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


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


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


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


          1. k12th
            10.06.2019 16:45

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

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


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

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


          1. WanSpi
            10.06.2019 17:31

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

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


            1. toptalo
              10.06.2019 17:47

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


              1. WanSpi
                10.06.2019 17:48

                Не пойму о чем Вы, человек выше написал о не правильном селекторе, при чем тут форич?
                А вот и пример:

                document.querySelectorAll('.');


                1. toptalo
                  10.06.2019 17:53

                  jQ тоже не глотает такое


                  Uncaught Error: Syntax error, unrecognized expression: .


                  1. WanSpi
                    10.06.2019 17:57

                    Только что проверил, он проглотил, только вот внутри уже сам JQuery выдал «Syntax error», что тоже как то странно, вот к примеру другой, более подходящий, пример:

                    document.querySelectorAll('>');


                    1. toptalo
                      10.06.2019 18:41

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


    1. WanSpi
      10.06.2019 17:38
      +1

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

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


  1. Perlovich
    10.06.2019 14:35

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


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


    1. Finesse
      11.06.2019 03:44

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


      1. Shugich
        11.06.2019 06:50

        Решается небольшим полифилом: https://github.com/github/fetch


        1. Zoolander
          11.06.2019 11:06
          +1

          круто! вместо одной надоевшей библиотечки можно собрать кучу полифиллов


          1. vlreshet
            11.06.2019 11:21

            Ну да. Они будут себе лежать, и никому не мешать. А через пару лет их можно будет выкинуть не меняя код. Взамен вы получаете полноценный, чистый js.


          1. mobi
            11.06.2019 11:22
            +1

            С одной стороны да, а с другой полифиллы можно загружать только при необходимости

            window.fetch || document.write('<script src="fetch.js"><\/script>');
            и со временем эта необходимость будет только падать.


            1. Zoolander
              11.06.2019 11:37

              звучит разумно, как и комментарий @ vlreshet, я сам большой поборник всяких оптимизаций и чистоты.

              Но грязный исполнитель внутри меня пожевал прилипшую сигару и хриплым голосом спросил
              — а что там насчет часов? время на эти таски оплатят?


              1. vlreshet
                11.06.2019 12:57

                Иногда лучше где-то напрячься, выкроить время из других тасков, и сделать что-то по-человечески, чем идти строго по пути «а это оплатят?» и страдать восемь часов в день.


          1. 4tlen
            11.06.2019 13:01

            Недостаток Jquery еще и в том, что вместе с ней подключается еще штук 5 всяких funcybox и прочих галерей и попапов, ~80% кода которых не используется и висят якорем. Хотя практически весь используемый функционал плагинов можно уместить в срипт в 20-30kb, вместо 100-200.


        1. vanxant
          11.06.2019 12:58

          Качество over 90% полифилов таково, что у многих разработчиков на них стойкая аллергия как на класс. Многие «полифилы» делают не то и не так (ну вот автору лень было читать стандарт, он лучше знает, как должно быть), и при этом тормозят даже там, где их «услуги» не требуются (тут была пару месяцев назад весёлая статья на тему).
          Особенно в этом плане отличается babel с его preset-env, который пихает в код непонятно что непонятно зачем.


  1. ArsenAbakarov
    10.06.2019 15:07

    Все пользуются, но прячут в C:\windows\systems32\drivers


  1. Rastishka
    10.06.2019 15:36

    А Vue.js и jQuery в одном проекте — это уже малость перебор.

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


    1. xakepmega
      12.06.2019 07:19

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


  1. toptalo
    10.06.2019 15:36

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


  1. 1nd1go
    10.06.2019 16:18

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


  1. Marwin
    10.06.2019 22:58
    +2

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


  1. Get-Web
    10.06.2019 23:04
    +1

    Я бы еще не оставил без внимания тот факт, что если забыть написать какую-то проверку в ванильном js, то все приложение может остановится, в то время как jQuery продолжит работу. jQuery экономит время на тестах и написании этих самых проверок, так как возвращает более предсказуемый результат. jQuery также удобно использовать когда хочешь быстро написать какую-то фичу, а потом уже работать над деталями или написанием под чистый js…


  1. Wladgaint
    10.06.2019 23:38

    1 мес разработки. 
    Dev. — На кой нам тут Vue, хватит и JQ.
    6 мес разработки.
    Заказчик: — Мы хотим отчеты, графики, панельки и чтоб все выезжало, крутилось и вертелось.
    Dev. — Ок, у нас есть Vue, тока надо переписать JQ.


  1. al6dy
    10.06.2019 23:38

    Юзаю JQ с 2010 года по сегодняшний день — проблем вообще не знаю. Никаких других более легких и функциональных альтернатив нет и не будет. И потом… да камон люди :) проекты на фрилансе, которые нужно жарить как пирожки по быстрому с jq просто на ура летят.


    1. v1z
      11.06.2019 03:00

      del


    1. vlreshet
      11.06.2019 11:23

      Подключаешь VueJS из CDN (точно так же как подключается jquery), и погнал. Код чище, проще, понятнее. Проекты на фрилансе точно так же можно пилить.


      1. al6dy
        12.06.2019 00:55

        Попросят тебя сделать slideToggle элемента… я посмотрю как ты будешь это делать на своем VueJS, вернее нет..., не посмотрю т.к я пропишу просто $(element).slideToggle() и забуду об этой задаче и пойду дальше, а ты и дальше будешь «городить огород».


        1. YemSalat
          12.06.2019 07:16

          В 2019ом году делать анимации на jQuery и гордиться этим…
          «Он и нафиг не нужон нам, Vue этот ваш, сто лет без него жили и еще сто проживем»


        1. vlreshet
          12.06.2019 11:09

          Ой, да блин, делов то) Вот. Можно сказать, из коробки фича. Ты же не считал что на современном фреймворке ну никак не продумали возможность анимаций появления/исчезновения?


          1. al6dy
            13.06.2019 00:59
            +1

            Слушай, не позорься, серьезно. Изучи получше, что такое jquery и что он делает. Ты хотя бы элементарно понимаешь разницу между фреймворком и библиотекой? В каких случаях, что нужно применять?

            У тебя, что называется — «каша в голове» в перемешку с максимализмом и ты не понимаешь элементарно, где потолок, а где пол. Другими словами ты пытаешься гонять на заточенном под треки спортивном болиде по городу, где удобнее и правильнее ездить на обычном городском авто. Может так тебе станет понятнее (вроде в профиле мотиками увлекаешься должен провести параллель).

            Возвращаясь к slideToggle я показывал удобство и продуманность в таким мелочах — одна строчка и не нужно ничего думать — и все. В vue отведена добрая часть страницы на это решение (и то через классы, а если я не хочу использовать классы?), неужели не можешь понять?


            1. YemSalat
              13.06.2019 08:29

              Возвращаясь к slideToggle я показывал удобство и продуманность в таким мелочах — одна строчка и не нужно ничего думать — и все.

              В самом простом случае — одна строчка. Но стоит хоть немного усложнить задачу и вам придется городить велосипеды.
              Например, если вам надо будет анимировать элементы при сортировке списка товаров — то количество кода на jquery будет уже гораздо больше чем на vue.
              Фреймворки создаются для того чтобы решать стандартные задачи простыми способами.
              Да, на jquery можно быстро и просто «налабать» и залить на прод по фтп. Но как-нибудь откроешь такой проект, слепленный из разрозненных кусков кода на jquery, с кучей заплаток в виде плагинов — и руки захочется оторвать этим горе-разработчикам.


            1. vlreshet
              13.06.2019 12:57

              «Не позорься» — мощнейшая аргументация.
              Аналогии — тоже полная херня. Спортивный болид по городу будет тяжело управляться, не везде проедет, дорого стоит, картошку не перевезёшь. Что из этого относится к Vue? Тяжеловесный? Нет. Требует каких-то особых скиллов? Нет. Где-то «не проедет»? Ну да, на IE6 не запустишь. Только для сложных решений? Да нет, хоть формочку на два инпута им обрабатывай. Итого — снова «мощнейший» аргумент.

              Возвращаясь к slideToggle я показывал удобство и продуманность в таким мелочах — одна строчка и не нужно ничего думать
              Вот это вот «и не нужно ничего думать» — и проблема в jQuery. Не нужно думать, просто бабахни ещё один $ и какую-то функцию. Надо вот тут анимацию? Ну сюда ещё строчечку, ай как ловко всё продумали. А вот там тоже анимация? Ну сейчас туда ещё привяжемся. В итоге — тормозящая лапша, с кучей дублирования кода. Зато ничего думать не надо, и без классов, да.

              Остальное отлично сказал YemSalat чуть выше, не вижу смысла повторяться.


              1. al6dy
                13.06.2019 16:15
                -1

                image

                Конечно аналогия херня, ты даже читать не умеешь :), как же ты вообще работаешь!!! Бедные твои клиенты.


  1. stardust_kid
    11.06.2019 00:34
    +1

    Автор исходит из ложной посылки, что jQuery — это абсолютное зло. На самом деле Коран не запрещает использовать эту либо, или любую другую в качестве слоя абстракции над методами управления DOM. Другое дело, что jQuery будет очень неэффективен, если попытаться написать на нем сложную логику. А для маркетингового лендоса самое то.


  1. edogs
    11.06.2019 03:12

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


    1. androidovshchik
      11.06.2019 05:29

      По уму лучше включили бы ее уже в браузеры, пусть даже в разных версиях, и вопрос был бы снят совсем.

      Сильно сказано


    1. androidovshchik
      11.06.2019 05:30

      del


    1. Terras
      11.06.2019 08:22

      Jquery — это typescript прошлого поколения. Очень удобная и полезная штука.


  1. RedComrade
    11.06.2019 08:04

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


    1. ilya_1986
      11.06.2019 11:44
      +1

      А насколько часто вы манипулируете атрибутами в svg? Просто интересно, у мня вот пока такой необходимости не возникало.


      1. k12th
        11.06.2019 12:00

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


  1. vlreshet
    11.06.2019 11:29
    +1

    Топил, и буду топить за переход на Vue взамен jQuery. У Vue есть киллер-фича — он может работать без вебпаков, сборщиков, и т.д. Подключил его точно так же как jQuery — и он готов к работе. Плюсы — НАМНОГО понятнее код. Проблема jQuery в том, что HTML и JS отвязаны друг от друга, всё шевелится только на id и классах. В итоге мы видим отдельно HTML, отдельно JS, и надо как-то в голове держать что тут, чёрт побери, происходит, почему вон тот блок прячется, и откуда вот там появилась картинка. Vue же позволяет прямо видеть логику работы. У нас не где-то там по какому-то условию срабатывает .show(), а чётко видно: «v-if='condition'». Можно не заглядывая в js понять суть. Видишь кнопку — видишь на ней v-on:click, и не надо искать по id где там какой обработчик на неё навесили. Плюсы, в общем, можно перечислять очень долго.

    Единственный кейс когда можно оправдать jQuery — это анимации. Вот тут да. Хотя, опять таки, решается сторонними библиотеками вроде Anime.JS.


    1. namikiri
      11.06.2019 12:45

      Vue — фреймворк, jQuery — библиотека. В этом вся разница.


      1. vlreshet
        11.06.2019 12:55

        Кроме терминов «фреймворк» «библиотека» — в чём разница? И первое и другое подключается одним файлом. И первое и второе нужно изучить для использования. И первое и второе задаёт «архитектуру» страницы (jQuery — заставляет обмазывать всё айдишниками и классами. Vue — заставляет использовать атрибуты). В чём же разница?


    1. norguhtar
      11.06.2019 21:20

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


      1. vlreshet
        12.06.2019 11:11

        Если писать полноценное SPA — то да, придётся. В иных случаях однофайлового подключения хватает. Прямо сейчас у меня проект на Laravel плюс такой способ. Изначально там был jquery, теперь вот перекочевал на ву. Компоненты, при желании, тоже можно использовать, хотя и не так удобно как однофайловые, да.

        P.S. чтобы структурировать код в «урезанном» варианте Vue — можно использовать несколько корневых точек на странице. Например, на блок комментариев — один экземпляр ву, а на меню сверху — второй. Тогда не возникает проблемы с огромной data и кучей методов. На производительность практически не влияет.


  1. smarthomeblog
    11.06.2019 12:24

    У авторов была прекрасная статья — Переход с jQuery на Vue.js. ИМХО путь, описанный в ней, более перспективный в плане замены jQuery


  1. PaulZi
    11.06.2019 15:12

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


  1. namelesss
    11.06.2019 15:52

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


  1. VolCh
    11.06.2019 16:23
    -1

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


  1. sumanai
    11.06.2019 21:59

    А сборка, в которой вместо SizzleJS используется querySelector, занимает всего 17 Кб.

    Есть у кого гайд по такой сборке?


  1. justboris
    11.06.2019 23:20

    Например, конструкция 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.


    1. justboris
      11.06.2019 23:54

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



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


      1. PaulZi
        12.06.2019 10:54

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


    1. sumanai
      12.06.2019 01:26

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

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

      Вас не смущает, что Before и After это разные положения? А Node.insertAfter не существует.
      Вот такие не консистенции и отваживают от написание на ванили.
      то можно просто добавить себе шорткатов

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


      1. justboris
        12.06.2019 09:11

        Вас не смущает, что Before и After это разные положения?

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


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

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


        1. sumanai
          12.06.2019 15:44

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

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


          1. justboris
            12.06.2019 18:49

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


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


        1. VolCh
          12.06.2019 16:28

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

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


          1. justboris
            12.06.2019 18:55

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


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