Какие преимущества есть у нативной разработки JavaScript? [закрыто]


33

Учитывая, насколько проще разработка jQuery по сравнению с нативным JavaScript, что заставляет людей вообще отказываться от таких библиотек, как jQuery?

Это потому, что у jQuery есть ограничения или он медленный? Я имею в виду, если jQuery настолько прост по сравнению с нативным javascript, то по каким причинам люди все еще должны использовать чистый javascript?


1
jQuery - это просто библиотека, пишущая нативный JS, использующий jQuery, все еще пишет нативный JS. Это все равно что спросить: «Какие преимущества есть у нативной разработки C ++?» когда вы говорите о "разработке на C ++ без Boost".
Зак


1
Основная цель jQuery и других старых библиотек состояла в том, чтобы сделать фасад поверх различных браузеров с различными интерфейсами js (например, XMLHttpRequestvs ActiveXObject, или addEventListenervs. attachEvent, или css selectorsvs, xpath selectorsи 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, и когда люди, кажется, просто отбрасывают его, небрежно говоря «тьфу, эти глупые javascriptians» и размахивая причудливыми белыми перчатками, это сводится к морали.

Если вы можете принять тот факт, что вы всегда будете энтузиастом JavaScript, то кто я такой, чтобы остановить вас? Но если вы хотите стать программистом на JavaScript, вам сначала нужно иметь знания, чтобы хотя бы выбрать между использованием jQuery (или любой другой библиотеки) и не использованием библиотеки. Узнайте DOM. Узнайте, как его использовать. Напишите свою собственную маленькую библиотеку или просто некоторую коллекцию вспомогательных функций. И как только вы узнаете о DOM, и вы решите использовать jQuery - GodSpeed. Лень награждается тем, кто много работал.


15
Длинное деление все еще сложно!
Рейнос

13
@anonymousDownvoter Прошу объяснить. Это потому что ты вегетарианец? Я могу превратить стейк в гамбургер тофу, но не могу честно сказать, что существует такая вещь, как «великий гамбургер тофу»
Зирак

10
+1 "Как $ (что-то) возвращает гигантскую вещь, содержащую вещи, и что это за штука именно?" Хах!
ThinkingStiff

3
Кроме того, @Mike - это преступник, он так и не получил статуса ответа, потому что он чистый! @ # $ Ing genius.
Эрик Реппен

5
"отличный стейк" в посте - это добровольная опечатка, не пытайтесь ее редактировать. Если необходимо, обратитесь к этому мета-дискуссии об этом
комнат

12

Причины, которые я знаю:

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

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

  3. При интеграции с другими технологиями иногда лучше использовать raw js.

  4. При работе над устаревшей системой (она же «производство») уже написана в js с установленными шаблонами.


13
Интересно, как часто № 2 на самом деле оказывается правдой. Вы сохраняете 92 Кб, потенциально кэшированную загрузку, но в итоге вы пишете гораздо больше стандартного JS-кода.
Адам Рэкис

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

4
@ Райан Кинал - Адам Ракис имеет хорошую точку зрения, и если вы используете 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 Prototyping - это не только одноразовые прототипы. Эволюционное прототипирование - это основной процесс веб-разработки ... - как это, для позднего ответа: P
yannis

«Эволюционное прототипирование» называется «теперь не нужно делать большие углы», и мы надеемся, что от этого мы выиграем больше, чем стоимость всего долга, который мы получим ». Что, конечно, справедливо только в том случае, если срезание углов приведет вас к тому волшебному периоду времени, который необходим вашему бизнесу для успеха. Это кредит.
Рейнос

5

В среде браузера вам необходим инструмент нормализации кросс-браузера. Такой инструмент поставляется в двух вариантах

  • оборачивает хост-объекты новыми объектами, которые ведут себя одинаково во всех браузерах
  • расширить хост-объекты для реализации DOM API.

Как правило, вы можете использовать эти утилиты одним из трех способов

  • используйте небольшие функции, такие как addClassили setTextв коде, когда и где они вам нужны
  • написать собственную кросс-браузерную библиотеку нормализации
  • использовать существующий.

Вам нужен какой-то механизм нормализации, иначе вы получите поддержку кросс-браузеров с нулевым значением.

Что касается использования существующего, это нормально. Я бы просто не использовал jQuery. Лично я в настоящее время пишу свою собственную библиотеку ( DOM-shim исправляет браузеры, не выставляя чужой полезный API. Он превращает ваши браузеры в единый стандартизированный браузер с хорошим поведением).


3

Если вам не нужна абстракция DOM, поддержка кросс-браузера и устаревшего браузера - вы можете легко обойтись без jQuery.

Это тот случай, когда вы разрабатываете расширения для браузера, скрипты greasemonkey (иногда), что-то интересное, разрабатываете для 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, когда это необходимо. В то же время, есть вещи, которые он может выполнить с помощью нескольких строк кода, которые займут у вас несколько дней, поэтому, если это сработает, используйте эти две строки. Если это не так, сверните свое. Сказать, что все это ужасно, все равно что купить отвертку, а потом жаловаться, что это ...
ДХМ

... ужасный инструмент для забивания гвоздей, потому что рукоятке не хватает веса
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 каждый раз вместе со страницей. Это недостаток веб-сайта для быстрой обработки запросов.
  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 селекторы через sizzle, не имеет ничего общего с DOM.
Инкогнито

ну, это нормально .. даже я узнал от вас об этом материале .. можете ли вы дать мне любую ссылку или информацию об этом материале ... Я обновил ответ ..
Ниранджан Сингх

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.