Переваги використання чистого JavaScript над JQuery


86

Які переваги використання лише Javascript порівняно з використанням JQuery?

Я маю обмежений досвід роботи з кодуванням JavaScript та JQuery. Я додав біти та фрагменти кожної сторінки HTML, але в основному я кодував речі на стороні сервера іншими мовами. Я помітив, що хоча ви можете теоретично робити те саме, використовуючи будь-який із двох підходів (і, звичайно, ви навіть можете змішати їх в одному проекті), схоже, є тенденція завжди починати використовувати JQuery з самого початку незалежно від того, що вимагає проект.

Тож мені просто цікаво, чи є якісь точні переваги не використовувати лише JQuery, а просто використовувати звичайний старий JavaScript?

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


Відповідно до коментаря scrwtp, я не маю на увазі лише частину обробки DOM. Моє питання швидше: JQuery - це бібліотека. Для Javascript. Що мені здається дивним у цій бібліотеці, на відміну від інших бібліотек для інших мов, це те, що у випадку JQyery, здається, створено так, щоб мати можливість ексклюзивно користуватися нею і не потрібно чіпати Javascript безпосередньо. Це навпаки, скажімо, Hibernate та SQL, де навіть незважаючи на те, що бібліотека (а точніше рамки в даному випадку, але я думаю, що аналогія все-таки застосовується) береться за багато аспектів, ви все одно користуєтеся SQL, використовуючи її , принаймні, для деяких випадків бахроми. Однак у випадку JQuery & Javascript ви можете робити все, що ви робите з Javascript, використовуючи лише JQuery (або, принаймні, так мені здається).


Відповідно до коментаря Stargazer712: так, я згоден з вами, питання тут полягає в тому, що ви ставите це "лише питання про те, як ви будете використовувати JavaScript". Це те, що я насправді процвітав запитати, але я зробив кілька поганих формулювань. Ось ще одна аналогія: Мова весняних виразів. Це бібліотека Java. Ви не можете користуватися нею без Java, вона заснована на Java, і через неї все, що ви все ще отримуєте для використання Java. Але на практиці те, що ти можеш зробити, - додати цю бібліотеку до проекту Java, а потім написати весь свій код, використовуючи мову вираження Spring EL, що ефективно робить ваш код зовсім не схожим на Java, і це навіть змінює парадигму (наприклад, у вас більше немає сильний тип примусового використання при використанні цього). Хоча я розумію, що JQuery - це лише бібліотека JS, мені здається, що на практиці це має такий же ефект, як і Spring EL у Java, тобто ви можете використовувати його API лише в рамках проекту та уникати API JavaScript. І мені було цікаво, чи це добре робити, які можуть бути підводні камені тощо.

(і так, прочитавши відповіді всіх, я розумію, що:

а. моє запитання до певного моменту дещо нечуттєве

б. навіть якби питання було абсолютно точним, відповідь на нього буде майже "ні, ви не можете просто використовувати JQuery весь час)


25
Неправильно сказати "використовувати тільки JQuery" _ JQuery - це бібліотека JavaScript.
superM

4
Ні для циклів або під час, ні змінних, ні функцій? Все це JavaScript.
superM

2
Під звичайним старим JavaScript ви, мабуть, маєте на увазі API DOM JavaScript. Ви можете перевірити це та відредагувати питання, щоб уникнути плутанини.
scrwtp

4
Чи недостатня причина сумісності між браузерами?
Саймон Уайтхед

10
"Здається, що він (jquery) розроблений так, щоб мати можливість використовувати його виключно і не потрібно безпосередньо торкатися Javascript". Це просто фактично неправильно. jQuery - це просто сукупність функцій JavaScript (хоч із дивними іменами на зразок "$"). Однією з важливих частин розуміння jQuery є ця реалізація. ЇЇ ПРОСТІ додаткові функції, які керують DOM маніпуляцією та циклічним циклом.
Грем

Відповіді:


113

По-перше - неможливо використовувати лише jQuery, все, що jQuery - це додати об’єкт $ до вашої глобальної сфери, з ним є безліч методів. Ще більш маніпулятивні бібліотеки на зразок прототипу не є альтернативою javascript, вони є інструментом для вирішення поширених проблем.

Основними перевагами додавання jQuery до вашої панелі інструментів були:

  • сумісність браузера - робити щось на кшталт .attr () набагато простіше, ніж рідні альтернативи, і не перебиватиметься у веб-переглядачах.
  • спрощення звичайно складних операцій - якщо ви хочете побачити добре написану крос-браузерну сумісну версію методу XHR, погляньте на джерело за $ .ajax - лише для цього методу це майже варто, ніж накладні витрати на jQ.
  • Вибір DOM - прості речі, такі як пов'язування подій та вибір елементів DOM, можуть бути складними та відрізнятися залежно від браузера. Не маючи багато знань, вони також можуть бути легко написані і сповільнити вашу сторінку.
  • Доступ до майбутніх функцій - такі речі, як .indexOf та .bind, є нативним JavaScript, але ще не підтримується багатьма браузерами. Однак використання jQuery версій цих методів дозволить вам підтримувати їх у крос-браузері.

Javascript - це вже не лише клієнтська мова, і оскільки jQuery настільки залежить від DOM, це жахливий кандидат перейти на сервер. Я настійно рекомендую вкласти час, щоб зрозуміти, чому ви використовуєте jQuery (задавати це питання - це перший крок!), А також оцінити, коли це необхідно. jQuery може бути небезпечним, кілька основних небезпек:

  • якість коду - jQuery має величезне співтовариство та низьку криву навчання. Це ідеальна буря для безлічі написаних плагінів з відкритим кодом.
  • неефективність - jQuery легко писати неефективно. Наприклад, використання jQuery для кожного замість циклів є непотрібним і може мати вплив на продуктивність у деяких випадках. Багато хорошої інформації про цей матеріал на JSPerf
  • bloat - jQuery - це величезна бібліотека. Значну частину часу ви будете використовувати невеликий набір його функцій та захопити всю бібліотеку. Є кілька чудових альтернатив, які дадуть вам підмножини функцій, наприклад, zepto.js та underscore.js - залежно від вашої ситуації ви можете зберегти кілька байт, вибравши потрібну бібліотеку для своїх потреб.

Зрештою, jQuery - це неймовірно корисна та корисна бібліотека при правильному використанні. Однак це не альтернатива JavaScript. Це бібліотека, як і zepto.js , YUI , Dojo , MooTools та Prototype - одна з яких може бути набагато кращим вибором для вашого поточного проекту.

Javascript - це неправильно зрозуміла мова, і лише останнім часом більшість людей розглядаються як щось більше, ніж сценарій мови. Я дуже рекомендую прочитати докладніше, ось кілька хороших місць для початку:

Редагувати 07/2014 - Я помітив, що ця публікація все ще привертає увагу, тому я додала купу посилань. Вони не мають особливого порядку, але повинні бути корисними.

  • Блог Бен Альмана - тут багато найкращих найкращих практик. Я не погоджуюся з усіма ними, але я постійно дізнаюся нові речі з його блогу.
  • Code Academy - базове навчання JavaScript та jQuery. Іноді повернення до основ допомагає.
  • Javascript Garden - публікація про більш хитрі чи неправильно зрозумілі функції javascript. Будь ласка, читайте це час від часу, поки все не має сенсу.
  • Бокоп - це тренінгові заняття. Якщо ви біля одного, перейдіть до нього. Цьому навчають багато кращих спікерів та викладачів JS.
  • Блог Пола Ірландського - не суто JS, але тут написано багато найкращих практик. Йому і Бентеві щебетати канали - це чудово слідкувати.
  • Javascript: Хороші частини - часто її називають «Біблією Javascript», ця книга Дугласа Крокфорда - це дивовижне місце для початку розуміння JavaScript.
  • Блог Ісаака Шлютера - Ісаак є творцем npm і працює над ядром вузла. Він багато пише про спільноту javascript, а не про конвенції коду, але якщо ви дійсно потрапляєте до js, це чудово читати.
  • Javascript Дугласа Крокфорда - якщо Брендан Ейх є батьком javascript, Дуглас - відвертий дядько Javascript. Він є автором специфікації JSON, біблії javascript і безлічі дивовижних публікацій про вигадки і метеоричний підйом JavaScript.
  • Блог Брендана Ейха - Брендан є творцем javascript - він пише про всілякі нерозумні речі у своєму блозі, і хоча у нього є недоліки як особи, його повідомлення в JavaScript є цінними.
  • Блог Джеймса Халлідейда (@substack) - Substack - це, мабуть, найважливіший розробник node.js у спільноті - з приблизно 400 (та щодня зростаючими) модулями npm та керівною філософією крихітних, схожих на Unix модулів, все, що він пише, варто читання.
  • Блог Макса Огдена Макс Огден - ще один плідний автор node.js, і він чудово пише письмовий пост у блогах, які чогось навчають. Він також є автором (з іншими, я вважаю,) javascript для котів.
  • Javascript для котів - Це короткий підручник, який перегляне основи javascript з точки зору кота. Якщо ви новачок, прочитайте це. Це весело, і навчає за годину того, що багатьом книгам потрібні тижні для спілкування.
  • Блог Ніколя Закаса Ніколас є автором кількох фантастичних книг javascript: Об'єктно-орієнтоване програмування на Javascript , Підтримуваний Javascript , Професійний Javascript для веб-розробників та Високопродуктивний Javascript . Він зосереджується в основному на клієнті, але має низку кращих практик та порад щодо ефективності.
  • Блог Гільєрмо Рауча - Гільєрмо є ще одним плодовитим розробником node.js, в основному відомим Socket.io та Mongoose. Його блог (і його нова книга Smashing Node.js - це чудові ресурси).

Я впевнений, що є набагато більше чудових ресурсів, про які я не думаю і не знаю про них, інші відповідачі повинні сміливо додати до цього списку.


3
+1 за зауваження про те, що JS більше не є лише клієнтською мовою, і як JQuery вписується у все це.
Shivan Dragon

1
Зауважте, що всі функції - це об'єкти, але це так нітрохи не в усьому JavaScript. $ краще описується як функція із закріпленими на ній властивостями "класового рівня", наприклад ( $.ajax), яка випилює набір об’єктів обгортки наборів елементів dom, що робить методи DOM взагалі набагато меншими від PITA, роблячи їх більш стислими, маючи методи автоматичного циклу наборів об'єктів dom, коли це має сенс, та спільного використання загального передбачуваного API у веб-переглядачах (що менше, ніж IE <= 8).
Erik Reppen

1
Це чудовий пост, але я хочу взяти питання з одним моментом - "Величезна бібліотека ... використовуйте Zepto / Підкреслення" - По-перше, Underscore - це зовсім інший тип бібліотеки - в основному для роботи з масивами / об'єктами - плюс використовувати LoDash натомість швидше. По-друге, Zepto менший, оскільки він не покриває те, що робить jQuery. Це може призвести до помилок, які виправили б jQuery. Нарешті, jQuery вже НЕ такий величезний / монолітний, це приблизно 30 Кбіт один раз gzipped, і ви можете зберегти це, використовуючи зображення на 1 менше. Мені здається, що ефективність розробленого розробника вартує цих байтів.
LocalPCGuy

1
@LocalPCGuy, безумовно, кілька хороших моментів. Ця посада була (рівно!) 2 роки тому, і з того часу все неодмінно змінилося в екосистемі js. Наприклад, я особисто використовую веб-переглядачі та невеликі модулі замість будь-якої бібліотеки з простором простором імен взагалі. Однак, я вважаю, що основна передумова все-таки є правдою - це те, що для багатьох (більшості?) Випадків бібліотека кухонних мийок рідко потрібна. Я ставлю це до більшості розробників, щоб переконатися, що вони належним чином виправдали розмір вартості бібліотек, перш ніж вирішити використовувати його, просто тому, що це простіше, ніж конкретизувати те, що вам потрібно.
Джессі

1
Реагуйте на всі речі, я правий!?!?! / сарказм - як щодо того, щоб вибрати правильний інструмент для роботи @Andy, і це не завжди реагує. Я думаю, що React робить якісь добрі речі, але давайте не робити вигляд, що це ліки для всього світу JavaScript.
LocalPCGuy

17

Є переваги, але дискусійно, чи справді вони переважають недоліки.

Головне - ви економите пропускну здатність і отримуєте швидші реакції. jQuery додає ще ~ 30 кбіт до вашої відповіді. У деяких мережах (а в деяких країнах) це може означати ще кілька мілісекунд. З іншого боку, проте ви можете налаштувати кешування для нього досить легко за допомогою свого веб-сервера (або, як сказав Xion, використовуйте його з веб-сайту Google, щоб він не впливав на ваш власний і все одно кеширувався).

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

І, нарешті, ви можете скористатись власними рамками, що, як правило, погана ідея, але деякі люди мають свої причини.

Якщо ви відкинете jQuery просто тому, що вас залякує крива навчання, то вам слід переглянути. Тим більше, що це досить ніжно.


Домовились, особливо щодо частини пропускної здатності. JQuery 1.8.2 має 92Kb у мінімізованій / затуманеній версії. Погодився також, що це, однак, не дуже вагомі причини не використовувати JQuery. Дякую!
Shivan Dragon

1
@ShivanDragon: Ви забули gzip. Це робить його значно меншим.
ThiefMaster

@TentistMaster: це правда, дякую, що вказали на це.
Shivan Dragon

10
Якщо ви використовуєте jQuery з CDN (як-от Google), велика ймовірність, що користувачі мали б його передзавантажити відвідування інших сайтів. Отже, вплив на середній (хоча і не максимальний) час відповіді буде меншим.
Xion

1
@Phil Чому ти взагалі його використовуєш?!?! jQuery ніколи не був і ніколи не знадобиться. Це чисте сатанинське зло (поряд з рештою демонічної банди: ReactJS, Underscore, LoDash, Modernizr, CommonJS, Angular, Google Analytics, особливо AMD тощо). Особисто я ніколи не включав цілу бібліотеку (хоча я рідко вилучаю і оптимізую конкретні функції, які мені потрібні з бібліотек), я ніколи не включатиму цілу бібліотеку, і майже на кожній веб-сторінці я створюю навантаження на комутований Інтернет менше ніж 11 кадрів (1/59 секунди).
Джек Гіффін

14

Наскільки мені відомо, дійсно є лише дві переваги використання ванільного javascript у порівнянні з бібліотекою, такою як JQuery , MooTools тощо.

  • Бібліотеки мають корисну навантаження, яка їсть пропускну здатність. Але як люди вже зазначали в інших відповідях, ви можете обмежити це gzipping та кешування. Якщо ви хочете лише підмножину jQuery, ви можете робити з SizzleJS і з MooTools, ви можете вибрати набір функцій, які ви хочете, так само, як і Modernizr .
  • Бібліотеки великі і на навчання потрібно певний час. Знову ж таки, це разова інвестиція для розробників ... і у вашому резюме виглядає приємно знати бібліотеки javascript.
  • (БОНУС) Бібліотеки - це не срібна куля, тому якщо ви хочете винаходити колесо, то це безумовно.

Варто зазначити, чому ви хочете використовувати бібліотеку javascript, для якої є багато:

  • Вам не потрібно писати власні рамки для підтримки вашого розвитку. Якщо вам цікаво, як все працює, ви можете перевірити код, оскільки він є відкритим кодом.
  • Бібліотеки вирішують сумісність браузера. І DOM, і javascript мають деякі відмінності між браузерами. Повірте, це величезна раковина часу, якщо вам доведеться зламати виправлення.
  • Інтернет-стандартом фактично є використання бібліотек javascript, більшість із них добре документально підтверджені на даний момент, і більшість веб-розробників (які знають javascript) знають, як ними користуватися.
  • Ви дійсно не відмовляєтесь від JavaScript, використовуючи бібліотеку. Вам ще потрібно знати Javascript з його типами, об'єктами, способами роботи закриття тощо.
  • Більшість бібліотек модульовані, і писати плагіни чи використовувати потрібно не потрібно багато часу та шаблон AMD .
  • Вибір елементів CSS з DOM - це величезна допомога.
  • (БОНУС) Ви також можете їх використовувати з CoffeeScript .

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

Як я вже говорив, я там працював ... в інших місцях були зелені пасовища. : ^)


10

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

Також я часто роблю щось на замовлення. Очевидним чином, як і інші, ви не повинні винаходити колесо заново. Але коли вас попросили зробити якийсь божевільний функціонал, мені часто стає набагато простіше написати його потім спробувати зламати плагін jquery, який є близьким, але не ідеальним.

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

У якийсь момент веб-розробки вам запропонують зробити щось, що не було упаковано в бібліотеку. Тож тоді краще переконайтесь, що ви розумієте, як насправді функціонує основна мова.

Тож TLDC : Використовуйте і те, і інше, ви перебуваєте в невигідному становищі, використовуючи лише ваніль, і ви перебуваєте в невигідному становищі, якщо ви не знаєте ванілі всередині і зовні і наполягайте на тому, щоб завжди використовувати jquery.


3
чистий ванільний js - це шлях!
marko

Мало що Райан знає, що jQuery таємно зловживає document.querySelectorAllза лаштунками.
Джек Гіффін

6

Єдине, про що я можу подумати, що вам не обійтися без JQuery, було б використовувати плагіни JQuery; навіть тоді ви можете написати власну бібліотеку JS, яка б забезпечувала саме те, що потрібно плагіну.

Подумайте про це так: JQuery - це бібліотека Javascript з відкритим кодом, написана на Javascript; ви можете подивитися джерело і тим самим навчитися робити все, що робить.

Ви не можете використовувати JQuery без використання простого старого Javascript. Напевно, ви не будете використовувати document.getElementById, але ви все одно визначатимете функції та змінні стандартними способами Javascript; Ви можете навіть написати стандартний forцикл.

Основна вигода від використання JQuery майже однакова, як і будь-яка інша стороння бібліотека будь-якою мовою: вам не доведеться писати стільки коду, щоб реалізувати логіку, характерну для вашої програми.

Не дозволяйте розміру відлякати вас. Версія CDN - це завантаження ~ 33k, яке буде кешоване браузером користувача після звернення на першу сторінку.


6

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

якщо ви працюєте над мобільними додатками чи іграми (або обома комбінованими), вам спочатку потрібна ефективність та ефективність використання ресурсів.

jQuery та плагіни можуть прискорити ваш розвиток, але особливо якщо ви покладаєтесь на сторонні плагіни jquery, ви повинні знати, що вони роблять всередині. Багато з них є поганими прикладами якості та ефективності коду.

jQuery може бути в 2 - 10 разів повільніше, ніж рідний JavaScript. І це може легко заохотити розробників не правильно розробляти інтерфейс і покладатися на селектори jQuery занадто багато, які набагато повільніше, ніж рідні.


+1, я погоджуюсь з вами, що створення ігор - це вагомий привід відкинути JQuery на користь ванілі JS через причини продуктивності. Це в значній мірі справедливо для більшості мов, коли мова йде про гру з ними. Наприклад, хлопці Google рекомендують у своїх документах Android не тільки викопувати бібліотеки під час створення ігор (на Java, для Android), але й додатково викопувати деякі добрі практики кодування на користь швидкості.
Дракон Шиван

... якщо ви знаєте стільки ж про ефективні маніпуляції з DOM, скільки люди, які пишуть jQuery, так.
Ерік Реппен

@ErikReppen, будь ласка, вивчіть справжній вихідний код у "людей, які пишуть jQuery." Мене засліпили майже місяць від жахів, які я побачив лише за перші 23 рядки.
Джек Гіффін

Багато що змінилося в JQ з 2013 року
Ерік Реппен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.