JQuery вважається шкідливим

Хех, мені завжди хотілося написати один із цих «Х вважається шкідливим» постів.

Перш ніж я почну, дозвольте сказати наступне: я вважаю, щоjQuery справив просто неймовірний вплив на просування Web. Він дав можливість розробникам робити такі речі, які раніше вважалися неймовірними. Змусив виробників браузерів реалізувати багато фічі нативно (без jQuery у нас напевно ніколи б не з'явився document.querySelectorAll). jQuery все ще потрібний тим, хто не може покластися на сучасні плюшки і змушений підтримувати релікти на кшталт IE8 чи гірше. Проте, як би я не співчувала цим бідним хлопцям, вони в меншості. Сьогодні існують уже тонни розробників, яким не потрібно підтримувати старі браузери з їхньою мізерною часткою на ринку. І давайте не будемо забувати тих, хто не є професійними розробниками: студенти та дослідники, їм не тільки бік вся ця кросбраузерність, часто їм взагалі нічого не потрібно крім одного єдиного браузера! Напевно, ви очікуєте, що в академічних колах, всі із задоволенням користуються новомодними плюшками Відкритої Веб Платформи? І близько ні, jQuery там просто скрізь. Чому? Тому що jQuery це все що вони знають, у них просто немає ні сил, ні часу стежити за новинками вебу. Їм не потрібна причина, щоб використовувати jQuery, він просто повинен бути використаний. Незважаючи на цей факт, і можливість вже робити всі ці речі нативно, я все ж таки вважаю, що це не це основна причина уникати jQuery.

Так, швидше за все, він вам не потрібний.

… але це все ж таки не та причина щоб відмовитися від його використання

Тим не менш, ці посилання постійно вилазять назовні в реальних проектах. Як би jQuery не намагався абстрагуватися від них, вам все одно постійно доводитьсяоперувати ними, навіть просто обертаючи ці посилання в $(). Наприклад, контекст коллбека у разі виклику методу jQuery .bind() буде посиланням на будинок елемент, а не колекцію jQuery. Також варто відзначити, що ви часто використовуєте бібліотеки з різних джерел, деякі з них потребують jQuery, а деякі ні. Все це призводить до того, що на виході на нас чекає пекельнасуміш з нативних будинків елементів, списків нод і jQuery-об'єктів.

Якщо розробник дотримується угоди про іменування jQuery-об'єктів (додаючи $ перед ім'ям змінної) і звичайних змінних, що містять посилання на нативні елементи, то це безумовно згладжує проблему (хоча люди мають властивість забувати про будь-які конвенції, але припустимо, що ми живемо в ідеальному світі). Як би там не було, в більшості випадків, розробники й не чули про подібні конвенції, і в результаті в їхньому коді надзвичайно важко розібратися незнайомим з ним людям. Кожна спроба відредагувати такий код, тягне за собою безліч помилок у стилі «Ох, млинець, це не jQuery-об'єкт, забув обернути його в $()» або «Чорт, тут же не будинок-елемент забув взяти його через $(..)[ 0]». Щоб уникнути конфузів, розробники часто закінчують тим, що починають взагалі все поспіль обертати $(), про всяк випадок. Читаючи код після, можна побачити, що та сама змінна обертається в $() безліч разів. З тієї ж причини стає дуже важко відрефакторити цей код так, щоб він не використовував jQuery. Так що по суті отримуємо безвихідну ситуацію.

Навіть якщо ви суворо дотримуєтеся угоди про найменування змінних, все одно часто виникає ситуація, коли вам потрібно викликати нативний метод для будинку-елемента або запустити функцію з коду, який не залежить від jQuery. І через якийсь час ваш код вже буде забитийзверху до низу перекладами об'єктів з jQuery в нативні та навпаки.

Візьміть будь-який випадковий скрипт із jQuery-залежністю і спробуйте його від цієї залежності позбавити. Розбіглися. Ви побачите, що основне ваше завдання не конвертувати методи в нативні, а взагалі зрозуміти, що тут за пекло відбувається.

Прагматичний шлях до чистого JS

Зрозуміло, сьогодні багато бібліотек вимагають jQuery і як я нещодавно твітнула, спроби повністю його позбутися будуть схожі на якесь цифрове веганство. І все ж таки це не означає, що вам потрібно продовжувати користуватися ним. Бібліотеки завжди можуть бути замінені в майбутньому, коли з'являться їх версії, що не використовують jQuery.

Крім того, багато бібліотек написано так, що вони не вимагають наявності саме змінної $ як синоніма jQuery. Просто викличте jQuery.noConflict() щоб забрати собі змінну $ та знайти їй найкраще застосування. Наприклад, я часто використовую ці функції-помічники, надихнувшись Command Line API:

Крім того, я думаю, що якщо вам доведеться щоразу замість $ набирати jQuery, то ви двічі подумаєте, а чи справді воно мені потрібне? ІМХО звичайно.

Тільки зареєстровані користувачі можуть брати участь в опитуванні. Заходьте будь ласка.

Ви можете допомогти і перевести небагато коштів на розвиток сайту