Які переваги існують для нативного розробки JavaScript? [зачинено]


33

З огляду на те, наскільки простіша розробка jQuery, порівняно з рідним JavaScript, що змушує людей взагалі відмовитися від бібліотек, таких як jQuery?

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


1
jQuery - це просто бібліотека - написання нативного JS, що використовує jQuery, все ще пише рідний JS. Це як запитати: "Які переваги є для рідного розвитку C ++?" коли ви говорите про "C ++ розробку без підвищення".
Зак


1
Основна мета jQuery та інших старих версій полягала в тому, щоб зробити фасад поверх різних браузерів з різними інтерфейсами js (наприклад, XMLHttpRequestvs ActiveXObject, або addEventListenervs. attachEvent, css selectorsvs xpath selectorsvs no selector supportтощо, тощо). В останніх браузерах більшість цих проблем не мають існують, оскільки вони відповідають тим же стандартам.
inf3rno

Відповіді:


89

Поговоримо про машини.

О, зачекайте, ми вже зробили - пам'ятаєте той час, коли ми познайомилися, якийсь час тому? Ми говорили про машини. Насправді ви, здавалося, були досить знавцем автомобілів. Ви змогли детально пояснити все, що правильно, неправильно та захоплююче щодо останньої гонки Формули-1. Ви знали напам’ять усі моделі Lamborghini, включаючи їх ціну та доступність. У вас навіть були думки придбати власний Ferrari 599 GTB Fiorano і заощаджували для цього (я думаю, що вечеря зі стейком не дуже допомогла).

Пояснюючи недоліки Toyota великим, схвильованим голосом, ви раптом зіскочили з крісла і кричали в повітря, махаючи кулаками: "Чорт забирай все, я чудовий фахівець у всьому, що стосується автомобілів! Я" я буду автомеханіком! "

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

Але як це могло бути? Ви знаєте все про машини! За винятком ... всього про машини. Ви можете дуже добре знати, що ваш автомобіль мрії має двигун V12, але ви не знаєте, що це насправді означає.

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

Тепер дозвольте запитати вас. Як $.fn.textпрацює? А про що $.fn? Що вони насправді означають? Як $(something)повертається гігантська річ, що містить речі, і що це саме? Чи можете ви хоч трохи теоретично повторити їх функціональність? Чи можете ви впоратися без jQuery?

Сказати, що "рідний JavaScript важкий" просто ... помилково. Перш за все, тому що JavaScript як мова не має нічого спільного з DOM , що в основному те, що абстрагує jQuery. По-друге, тому що, коли ви трохи дізнаєтесь про DOM, ви вже можете проїхати через найпоширеніші помилки в браузері. Але лише маленький секрет - спочатку все важко. Довгий відділ був суком у 5-му класі.

В якості другої аналогією для цієї відповіді: JQuery полягає в JavaScript-DOM (НЕ JavaScript на мові, тільки DOM) , як Array.prototype.forEachце for. Це працює в 99% випадків. І це добре працює. Але для тих 1%, які не охоплені, ви повинні знати, як користуватися forциклом, хоч щоб бути практичним. Вся ця відповідь ґрунтується на «чистішій» стороні питання, а не навіть на технічній стороні (наприклад, розмір бібліотеки та декількох інших речах, як пояснено у відповіді Майкла Дорранта). Тому що я люблю JavaScript, і коли люди, здається, просто відкидають його убік, недбало говорячи "так, ці нерозумні яваскрипти" та махаючи химерними білими рукавичками, це зводиться до моралі.

Якщо ви можете прийняти той факт, що ви завжди будете ентузіастом JavaScript, то хто я такий, щоб зупинити вас? Але якщо ви хочете бути програмістом JavaScript, спочатку ви повинні мати знання, принаймні, вибирати між використанням jQuery (або будь-якої іншої бібліотеки), а не використанням бібліотеки. Вивчіть ДОМ. Дізнайтеся, як ним користуватися. Напишіть власну невелику бібліотеку або просто якусь колекцію допоміжних функцій. І як тільки ви будете обізнані з DOM, і ви вирішите використовувати jQuery - Godspeed. Лінь присуджується тим, хто наполегливо працював.


15
Довгий поділ все ще важкий!
Райнос

13
@anonymousDownvoter Моліться поясніть. Це тому, що ти вегетаріанець? Я можу змінити стейк на тофу-бургер, але не можу чесно сказати, що є таке поняття, як "великий тофу-бургер"
Зірак

10
+1 "Як $ (щось) повертає гігантську річ, що містить речі, і що це за штука?" Га!
ДумаючиСтиф

3
Крім того, @Mike це злочинець, він ніколи не отримав відповіді, оскільки він чистий! @ # $ Ing геній.
Ерік Реппен

5
"чудовий стейк" у публікації - це добровільна помилка, не намагайтеся редагувати його. Якщо потрібно, перегляньте цю мета-дискусію про це
gnat

12

Я знаю причини:

  1. Коли потреба вкрай мінімальна, скажіть 1 клік.

  2. Коли швидкість завантаження критична, а бібліотека jQuery занадто велика, і вам не доведеться писати багато (спеціальний) код, щоб замінити її.

  3. При інтеграції з іншими технологіями іноді кращий js краще.

  4. Під час роботи над успадкованою системою (так званий «виробництво») вже написано у js із встановленими зразками.


13
Цікаво, як часто №2 насправді виявляється правдою. Ви зберігаєте 92K, потенційно кешоване завантаження, але ви закінчуєте писати набагато більше JS-коду.
Адам Ракіс

4
Я не знаю про це. Ви можете тримати JS до необхідного , а не включати всю бібліотеку для підмножини функціоналу.
Райан Кінал

4
@Ryan Kinal - Адам Ракіс має хороший момент, і якщо ви використовуєте API Google для завантаження Jquery, ви можете завантажити його з того самого місця, з якого користувач, ймовірно, вже отримав його.
Бен ДеМотт

Я не згоден з №4. Якщо застарілий код жахливий, і всі в команді згодні, і це гарна ідея, щоб додати jQuery і використовувати його в майбутньому коді.
ThiefMaster

7

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

З деяких причин ви можете написати "чистий" JavaScript без jQuery:

  • Сторінки завантажуються швидше, не включаючи додаткові файли jQuery
  • Деякі рамки можуть бути несумісними з jQuery
  • Написаний код не робить нічого, з чим допомагає jQuery
  • Код пишеться для використання іншими користувачами, а необхідність jQuery як залежності зробить обмін складнішим
  • Автор коду хоче більше контролю, ніж надає jQuery

5

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

Крім того, я не знаходжу жодної іншої причини, щоб не використовувати його:

  • Накладні витрати мінімальні, особливо якщо ви користуєтеся розміщеною версією Google ,
  • Це допомагає менш досвідченим розробникам Javascript писати чистіший та ефективніший код,
  • Це здебільшого крос-платформа, яка може врятувати життя, коли вам доведеться мати справу зі старими браузерами,
  • Величезна галерея плагінів допомагає мені писати прототипи за дуже короткий час,
  • DOM має сенс,
  • бла-бла-бла...

АЛЕ його ніколи не слід використовувати як заміну знань Javascript. Якщо ви не знаєте, як це зробити в чистому Javascript, ви можете спочатку відійти від бібліотеки, але з часом ви заплатите за неї.

І звичайно, є всі ми, хто вже кілька років перебуває в загибелі в IE6 у смертельному бою, і не можемо легко відпустити наші старі шкільні трюки на користь блискучої нової іграшки.


2
Ви використовуєте плагіни jQuery? Хіба більшість із них не жахливо баггі та повна повільного, поганого коду?
Райнос

@Raynos The huge gallery of plugins help me write prototypes in very short times... Просто прототипи, я уникаю їх на виробничому коді, коли це можливо. Є декілька плагінів із прекрасним кодом, звичайно, але вам потрібно дуже важко їх шукати ...
yannis

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

@Raynos прототипування стосується не лише викидних прототипів. Еволюційне прототипування - це основний процес веб-розробки ... - як це, для запізнення у відповідь: P
yannis

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

5

У середовищі браузера потрібен інструмент для нормалізації перехресного перегляду. Такий засіб випускається у двох смаках

  • обертає об’єкти хоста новими об'єктами, які поводяться однаково у веб-переглядачах
  • розширити хост-об’єкти для реалізації API DOM.

Зазвичай ці утиліти можна використовувати одним із трьох способів

  • використовувати невеликі функції, як-то addClassабо в setTextусьому коді, коли і де вони вам потрібні
  • написати власну бібліотеку нормалізації перехресного браузера
  • використовувати існуючий.

Вам потрібен якийсь механізм нормалізації, інакше ви отримаєте нульову підтримку крос-браузера.

Що стосується використання наявного, це добре. Я просто не користувався б jQuery. Особисто я зараз пишу свою власну бібліотеку ( DOM-shim вона виправляє браузери, не піддаючи іноземному API пропітанції. Він перетворює ваші браузери в єдиний стандартизований веб-переглядач).


3

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

Це випадок, коли ви розробляєте розширення браузера, сценарії жирмейкі (іноді), стискання цифр, розробляють для Node.js або інших середовищ, які не є браузером.


2

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

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

Один із прикладів - коли я хотів змінити непрозорість position: fixedелемента стосовно того, наскільки далеко вниз на сторінці прокручується користувач. Ефект був занадто повільним, коли для цього я використовував jQuery, внаслідок чого прокрутка була хиткою, а ефект зникання був зіпсований. Я перейшов на використання прямого JavaScript, і все було шовковисто гладким у всіх, крім IE <= 8.


2

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

jQuery робить багато речей ...

Так, ви можете додати плагіни
Так, ви можете розширити селектори.
Так, це спрощує анімацію

але jQuery робить не все

Ви коли-небудь намагалися працювати в декількох контекстах вікна з jQuery? jQuery відмовляється мати справу з різними контекстами вікон, оскільки він зберігає оригінал windowта documentконтекст у вікні, в яке його викликали.

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

* придумайте спливаюче вікно Gmail для створення електронної пошти у новому вікні, а не спам-реклами

Використовуйте його, коли код спрощує

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

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


2

Як вам відомо, jQuery - це загальноприйнята структура, яка забезпечує безліч методів, які багато хто з нас не використовують у своїх проектах. (Деякі з них я взагалі не використовував.)

Існує дві основні причини не використовувати jQuery або будь-які інші усталені рамки.

1. Проект недостатньо великий або складний, щоб використовувати такий фреймворк: У цьому випадку кодер приймає обгрунтоване рішення на основі свого досвіду та знань у JavaScript. Це допоможе йому зменшити вагу сторінки, а також більше контролю над кодом.

2. Кодер розробляє власні рамки. У своїй компанії я бачив проект, який має власну структуру JavaScript. Причина, яку вони цитують, полягає в тому, що якщо вони використовують jQuery і в ньому є помилка, яку потрібно виправити, їм доведеться почекати наступної версії. Більше того, якщо є функція, яку потрібно додати, їм потрібно попросити команду jQuery або додати плагін, навіть якщо зробити плагін не буде гарною ідеєю (вони навели приклад використання .liveподібної речі у своїх фреймворк ще до того, як він був офіційно доданий до JQuery). Наявність власного фреймворку дає вам більше контролю над кодом. Недоліком є ​​те, що вам потрібно винайти колесо щодо питань сумісності веб-переглядачів тощо. Більше того, якщо процес розробки не буде хорошим, ваша структура розквітне і лише збільшить час на її підтримку.


0

Майк

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

Але давайте обережно пам’ятати, що мови з часом ідуть, як бібліотеки, з часом.

Тож, можливо, це часова сфера. Можливо, люди вагаються вкладати кошти в бібліотеку, якої просто не може бути там, - або мають стільки обертів за нею в перспективі.

Я сам? Я не заперечую проти використання JQuery зокрема. Я також дивлюсь на скажімо Box2d.js або three.js і міг би скоріше охопити їх, навіть якщо короткотерміновий термін зберігання, ніж пропустити, які фрукти вони можуть запропонувати.

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


0

Я б сказав, що головне питання полягає в тому, що все більше людей (переважна більшість?) Вже не знають, як кодувати JavaScript. Якщо jQuery не може щось зробити, вони не можуть цього зробити.

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

Не тільки це. Знаючи ванільний JavaScript, це набагато веселіше грати та експериментувати з новими можливостями, а не чекати на базі рамкової реалізації. Крім того, я не звинувачую в цьому jQuery, оскільки це головним чином бібліотека DOM , але масштабування масштабних проектів може бути болючим. Інші рамки в цьому краще справляються; Прототип приходить на думку.

Коротше кажучи, це чудовий каркас, але не все-таки кінець - всі люди це роблять.


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

цю публікацію досить важко читати (стіна тексту). Ви б не хотіли відредагувати його на кращу форму?
гнат

0

Можу додати ще дві причини, про які не згадували:

  1. Коли я багато разів підбираю нові технології, я б починав із конструкцій нижчого рівня, перш ніж переходити до вищих. Я в першу чергу розробник C ++ / C #, але деякий час тому, коли я вперше почав грати з HTML / CSS / JavaScript, я вирішив не використовувати жодних фреймворків, бо хотів спочатку зрозуміти технологію (тобто JavaScript мова), що ці рамки побудовані поверх.

    • Сказавши це, я з того часу виявив jQuery і ніколи не хотів би повернутися до кодування вручну, що jQuery може зробити для вас в 1-2 рядках коду.
  2. Я не знаю, наскільки це поширене, але мені здається, що є дуже багато людей, які, побачивши наступний фреймворк / технологію / мову, першою їхньою відповіддю є "не інший API для мене, щоб вивчити!" Їм не байдуже, наскільки простий jQuery, але вони просто бачать, що він стоїть на шляху між ними та забезпечує роботу, використовуючи свої "справжні та перевірені" методи. Це та сама категорія людей, яка відмовляється користуватися бібліотекою Boost або будь-якою з STL і продовжує використовувати malloc майже для всього. Ви запитали, чому вони вибирають чистий JavaScript над jQuery, а насправді вони ніколи не здійснювали вибір, оскільки більшість часу вони відмовлялися оцінювати jQuery в першу чергу і цілком задоволені їх поточним темпом розвитку, незалежно від того, наскільки це повільно.


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

Звичайно, він приховує відмінності між браузерами, і це велика річ сама по собі
Кос

@Raynos: Я насправді не експерт з веб-технологій і ледве не любитель цього, тому не можу реально захищати jQuery. Але з того, що я мало бачив, мені це було дуже добре. jQuery додає ще один інструмент до вашої панелі інструментів. Ви можете використовувати його скільки завгодно або якомога менше. Це ніколи не заважало вам писати чистий Javascript при необхідності. У той же час, є деякі речі, які вона може виконати за допомогою декількох рядків коду, на які вам знадобиться кілька днів, тому якщо це працює, використовуйте ці 2 рядки. Якщо це не так, скрутіть свою. Сказати, що вся справа жахлива - це як купити викрутку, а потім скаржитися, що це ...
DXM

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

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

-1

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

Що робить jQuery кращим у використанні:

  • Швидкий
  • Легка бібліотека JavaScript
  • CSS 3 сумісний
  • Підтримується безліч браузерів.
  • Рамка jQuery є розширюваною та обробляє маніпуляції з DOM, CSS, Ajax , події та анімації.

JavaScript - це мова, тоді як jQuery - це бібліотека, написана за допомогою JavaScript.

Ось причини, завдяки яким JavaScript краще використовувати, а не jQuery:

  1. Він завантажує всю сторінку всю бібліотеку сценаріїв jQuery. Це є недоліком для веб-сайту peed / швидкої обробки запитів.
  2. Іноді фреймворк jQuery руйнується / конфліктує з іншими рамками.
  3. Якщо ви пишете простий код для просто вибору елемента і показуєте alter, то рідний JavaScript набагато краще.
  4. Якщо операції невеликі і виконуються в межах декількох рядків коду JavaScript, тоді недобре використовувати jQuery.

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

Навіть якщо ви хочете розширити їх, вам потрібно написати код у JavaScript. Що також велика розмова. Розробники залежать від цих бібліотек, тому для контролю над проектами JavaScript краще, ніж використання фреймворків.


1
"дуже добре справляється з маніпуляціями DOM" LOL ЩО?
інкогніто

дякую @Incognito за те, що дав мені знати про це. Але це набагато краще, ніж інші бібліотеки. keyframesandcode.com/resources/javascript/deconstructed
Ніранджан Сінгх

1
Посилання абсолютно невірно. jQuery, що підтримує селектори psudo-css через шиплячі, не має нічого спільного з DOM.
інкогніто

ну це нормально .. навіть я дізнався від вас про цей матеріал .. чи можете ви дати мені будь-яке посилання або інформацію про ці речі .. я оновив відповідь ..
Niranjan Singh

yuiblog.com/blog/2006/10/20/video-crockford-domtheory - це гарний початок, тоді прочитайте специфікацію w3c на DOM.
інкогніто

-4

Я думаю, що люди використовують jQuery тому, що це простіше, простіше та потужніше, і тому, що це допомагає їм забути про IE. Крім того, для налаштованих функцій люди користуються javascript. Спробуйте звернутися до DOC для отримання більш детальної інформації

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