Прототип VS jQuery - сильные и слабые стороны?

Я не хочу открывать еще одну ветку "Еще один Js VS Js".

Я предполагаю, что в конечном итоге Prototype и jQuery являются JS и имеют почти одинаковые методы и функции и нуждаются в почти одинаковых строках кода для одинаковых задач.

Каковы реальные сильные стороны и недостатки реального многофункционального интернет-приложения в Prototype по сравнению с jQuery?


person Luca Filosofi    schedule 15.04.2010    source источник
comment
У нас уже есть несколько дубликатов этого вопроса (см. этот поиск). Этот конкретный случай оказался чрезвычайно субъективным и аргументированным. За что проголосовать?   -  person Jørn Schou-Rode    schedule 15.04.2010
comment
Базовая проверка орфографии / грамматики имеет большое значение, если вы ожидаете, что другие найдут время, чтобы ответить на ваши вопросы.   -  person Yarin    schedule 17.11.2010
comment
@Yarin: как только вы достигнете адекватной репутации, необходимой для редактирования других сообщений, пожалуйста, не стесняйтесь редактировать грамматические ошибки и проверять все заклинания, которые вы хотите! tnx ...;)   -  person Luca Filosofi    schedule 17.11.2010


Ответы (14)


Изначально мне понравилась идея расширения элементов Prototype с помощью новых или модифицированных методов.

Однако я обнаружил ряд причин, по которым это плохо (TM)

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

Самым последним примером, который я обнаружил, был Prototype, связанный с JSON и stringify. Я использовал EasyXDM, и в некоторых случаях, когда загружалась библиотека prototype.js, он просто не работал. Поскольку я писал фреймворк для использования другими и, таким образом, не мог контролировать содержимое страницы, мне нужно было создать и сделать все в IFRAME, чтобы обеспечить такие вещи, как прототип .js не повредил тому, что я пытался сделать.

... так что jQuery выигрывает для меня, потому что я просто не считаю правильным, чтобы фреймворк автоматически нарушал стандартное поведение DOM и javascript. ВЫ должны контролировать эти вещи, Prototype забирает у вас часть этого контроля ....

person Graza    schedule 15.04.2010
comment
Я должен добавить, что в ограниченных случаях, когда вы полностью контролируете страницу, не полагаетесь на другие библиотеки и т. Д., Есть некоторые вещи, которые Prototype может делать хорошо, просто и легко (мне особенно нравится метод absolutize()). Но я не думаю, что это хороший выбор для фреймворка по умолчанию, который вы используете все время, тогда как jQuery и другие менее инвазивные библиотеки вполне безопасно включать (мне особенно нравится метод .noConflict() - все мои jQuery выполняется с помощью $j, а не $, с использованием window.$j = jQuery.noConflict(); - person Graza; 15.04.2010
comment
Я должен проверить твой ответ, приятель! ;-) здесь самый правильный! еще раз спасибо! - person Luca Filosofi; 15.04.2010
comment
@Graza Вы были в курсе easyXDM? Последняя версия фактически «выживает» PrototypeJs, поскольку она тестирует объект JSON перед его использованием. - person Sean Kinsey; 20.04.2010
comment
@Sean - не использую последнюю версию - у меня было несколько патчей, которые я собирался вам отправить, но когда я вернулся на ваш сайт, он появился (глядя на код, а не из-за его тестирования) они решены в последней версии. Одна из них была проблемой, если ENDPOINT содержал строку запроса (например, если hash.html или реализация его функциональности имела URI типа //some.domain/some.script?page=easyXDMhash&someOtherValueName=someOtherValue). При этом все сказано - в то время как ваш фреймворк обрабатывает Prototype, некоторые другие этого не делают (поэтому мне все еще не нравится, как Prototype делает что-то) - person Graza; 20.04.2010
comment
Между прочим, @Sean Kinsey - спасибо за отличный фреймворк. EasyXDM, безусловно, идеальный вариант для междоменной и кросс-фреймовой коммуникации :-) - person Graza; 20.04.2010
comment
Если вы не возражаете, не могли бы вы прислать мне исправленный файл или его описание (по крайней мере, те, о которых вы не можете утвердительно сказать, были исправлены)? Вероятно, есть некоторые варианты использования, которые я не предвидел :) - person Sean Kinsey; 20.04.2010
comment
@Sean Kinsey - Я отвел это обсуждение от Stack Overflow (это немного не по теме для этой страницы) и написал вам в Твиттере. tl.gd/v541p - person Graza; 21.04.2010
comment
а перафс это единственный ответ! вот задайте мой вопрос !!! и позвольте мне думать, что вы единственный, кто прочитал его полностью! ;-) - person Luca Filosofi; 29.05.2010
comment
Мне нравится bind () в прототипе, у jQuery его нет, потому что он заставляет все быть модульным. Но иногда это все равно, что забивать гвоздь кувалдой. Мне также нравится, что прототип возвращает (хорошо, я знаю, он расширен) элемент DOM вместо объекта jQuery. Хотя этот ответ ОЧЕНЬ хороший аргумент в пользу серьезного провала прототипов. - person HenchHacker; 24.11.2012
comment
@Graza Был ли конфликт вызван исключительно Prototype или можно винить и Prototype, и EasyXDM? Вы не вдавались в подробности, поэтому я только предполагаю, что возник конфликт, потому что и Prototype, и EasyXDM расширили один и тот же класс одной и той же функцией. Например, оба могли определить hide на Element. Последняя загруженная библиотека переопределит предыдущую, в результате чего первая не будет работать должным образом. В этом случае виноваты обе библиотеки. Так зачем вам использовать другую плохую библиотеку, если вы уже сочли Prototype плохим? - person JoJo; 01.02.2015

Я также использую jQuery вместо прототипа, просто посмотрите вверху этой страницы, чтобы узнать, почему:

вопросы с тегами jquery: 531 752
прототип вопроса с тегами: 2465
Обновлено 22.09.2014, 14.12.2011 jQuery - 135 641 / prototype - 2327

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

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

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

person Nick Craver    schedule 15.04.2010
comment
Количество вопросов ничего не значит. Это может означать, что jQuery нуждается в гораздо большем количестве вопросов для понимания / использования, или что jQuery используется в основном неопытными / неквалифицированными людьми ... В общем, это не означает ничего, связанного с вопрос. - person Alsciende; 15.04.2010
comment
@Alsciende - Покажите мне любую тему на SO с почти тридцатикратным количеством действий, где сообщество не больше ... это напрямую связано с вопросом, есть больше ответов для jQuery vs prototype. Размер сообщества имеет значение, количество вопросов было всего лишь непосредственной иллюстрацией. Если бы у прототипа было более широкое сообщество, их график выпуска не занял бы так много времени ... и поскольку 2.0 меняет их синтаксис из-за проблем с DOM, которые они представили через то, как работает их модель в целом ... Я бы сказал, что jQuery просто выбрал лучший path, и из-за этого он быстро растет. - person Nick Craver; 15.04.2010
comment
2.0? Стабильный прототип - 1,6, RC - 1,7. Prototype решил расширить прототипы js и никогда не оглядывался назад. jQuery выбрал другой путь и никогда не оглядывался назад. Разные потребности, разные подходы, и это тоже не так. Не будьте сектантами. - person Alsciende; 16.04.2010
comment
@Alsciende - Никогда не оглядывался назад ... Я полностью не согласен, главным образом потому, что члены основной команды Prototype также противоречат этому, вот один из них, оглядываясь назад и обсуждая 2.0: perfectionkills.com/whats-wrong-with-exnding-the-dom - person Nick Craver; 16.04.2010
comment
Глядя на то, сколько вопросов было задано по фреймворку, НЕТ указателя на качество фреймворка - на самом деле все может быть наоборот, поскольку более сложный или плохо спроектированный фреймворк с плохой документацией приведет к гораздо большему количеству вопросов! - person HenchHacker; 24.11.2012

В настоящее время я переписываю большие блоки приложения, чтобы перейти от Prototype к jQuery. Почему? Плагины, плагины, плагины, особенно виджеты пользовательского интерфейса. Элементы пользовательского интерфейса прототипа довольно фрагментированы и разрознены, в то время как jQuery имеет очень богатый набор «стандартных» элементов.

person Mark    schedule 18.04.2010
comment
Вот чего мне не хватает в прототипе: (хотя я считаю, что прототип (и скриптакусный) работает для меня, так как я использую только его небольшое количество - эффекты, селекторы и ajax. Благодаря хорошему пониманию сырого JS, прототип факта расширяет его легче обрабатывать, чем должным образом изучать методы jQuerys (так как он возвращает сам объект, а затем вам нужно использовать методы, а не необработанный js). Если бы я должен был сделать что-то более сложное в отношении прототипа или потребовалось много дополнительных функций, таких как лайтбокс и так далее, тогда это будет jQuery. - person HenchHacker; 24.11.2012

JQuery был создан, чтобы упростить добавление необычных эффектов на страницы. Достигла 100% успеха.

Поскольку добавление анимации и случайных вызовов ajax - это то, что обычно нужно людям и требовать от библиотеки Javascript, у JQuery большое сообщество. Девиз JQuery - «Я добавлю блеска и уйду с дороги», что нам, разработчикам, часто нужно.

Тем не менее, Prototype превосходит большинство других вариантов использования. Он имеет стабильную структуру для ООП на основе классов (единообразное решение таких проблем, как наследование конструкторов) и хороший набор абстракций общего назначения для работы с данными.

person fdreger    schedule 27.03.2011
comment
Я не буду голосовать против только потому, что я серьезный человек. PS: меньше пиши, больше делай. - person Luca Filosofi; 27.03.2011
comment
@aSeptik:? Вы спросили о реальном опыте использования Prototype и jQuery при создании RIA. Вы не упомянули, что целью было хвалить jQuery и критиковать Prototype. Обычно Javascript используется для управления DOM, добавления эффектов, выполнения некоторого ajax (больше операций чтения, меньше операций записи). В этом и сияет jQuery, его дизайн идеально подходит для таких случаев. Но в более крупных RIA вам может потребоваться сгенерировать сложный JSON, разбить код на модули путем создания классов (возможно, использовать наследование?) И т. Д. JQuery здесь не поможет, а Prototype поможет. Это почему вы хотите проголосовать за меня? PS: Не будь злым. - person fdreger; 28.03.2011
comment
+1 - в первом прочитанном мной ответе упоминаются преимущества прототипов в ООП;) - person HenchHacker; 24.11.2012

Я выбрал jQuery вместо Prototype, потому что:

  • "делай больше, пиши меньше ..."
  • сообщество jQuery больше (следовательно, больше плагинов и ресурсов)
person Mickel    schedule 15.04.2010

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

При быстром создании веб-сайтов со стандартным набором трюков jquery и его библиотека отлично подойдут. Нет смысла изобретать велосипед. Однако я сталкиваюсь с проблемой нечетной версии браузера, когда мой инструмент / трюк не работает, и всегда бывает, что именно клиент имеет эту конкретную версию. Обычно происходит при выпуске / обновлении версии браузера. Итак, мне нужно получить новую версию этого файла библиотеки jquery, чтобы обновить все мои сайты, то есть, если сообщество уже заметило и решило указанную проблему. Это моя единственная досада, потому что у меня нет времени разбираться в этом сам. Это случается не часто, но бывает.

При работе над более сложными веб-проектами, возможно, с сетью сайтов, поддерживаемых внутренними API-интерфейсами, я считаю, что прототип великолепен. Я полностью использую возможности объектно-ориентированного кодирования на стороне сервера и очень рад, что могу сделать то же самое с Prototype. Я чувствую, что у меня больше «контроля» над своими приложениями и я могу быстро все исправить, поскольку являюсь автором. Я действительно слышу, что люди говорят об накладных расходах, расширенных DOM и т. Д., Но я не сталкивался с какими-либо серьезными проблемами (постучите по дереву). Кроме того, проблема отсутствия оператора «для каждого» не является большой проблемой, когда я могу так же легко итерировать одну и ту же переменную с помощью .each (function () {}, ..) и с немного большим контролем.

Итак, каждому есть свое место, и вам нужно выбрать свое лекарство.

Нравится,

person Chris    schedule 11.10.2011

Ни то, ни другое не является «лучшим». Все зависит от обстоятельств. Попробуйте оба варианта и посмотрите, какой из них вам больше нравится. Я лично использую JQuery из-за простоты использования по сравнению с прототипом, который является довольно продвинутым и требует более длительного обучения.

Взгляните на:

Прототип против JQuery (в Ajaxian)

person Sarfraz    schedule 15.04.2010
comment
Я бы сказал, что это наоборот, если честно, после изучения как jquery, так и прототипа, и raw js. jQuery - это боль в **** с продолжением возврата объекта jquery (что означает, что вы должны изучить методы объекта jquery, чтобы правильно его использовать), в отличие от прототипа, который возвращает расширенный элемент dom, например, innerHTML все равно будет работать. Недостатком является кроссбраузерная совместимость, но для прототипа это еще не так сложно. Кроме того, метод прототипов bind () не заставляет вас делать все модульное (что-то еще, чему нужно научиться), как это делает jQuery. - person HenchHacker; 24.11.2012
comment
Хотя я хотел бы сказать - этот последний комментарий ТОЛЬКО с точки зрения кривой обучения. jQuery обеспечивает два хороших момента - возвращая объект jQuery и используя только его методы, помогающие в кроссбраузерном написании сценариев и модульном кодировании - неплохая вещь;) Хотя оба требуют большего обучения, чем прототип. - person HenchHacker; 24.11.2012
comment
Раньше я использовал прототип в течение долгого времени, а теперь использую jQuery. Я не вижу, чтобы прототип был более продвинутым, чем jQuery. - person ehsun7b; 11.04.2014
comment
+1 за фантастическую ссылку, несмотря на то, что уже годами. Не могу поверить, что не видел этого раньше. Я поделюсь этим со своими соавторами. - person isherwood; 26.05.2014

Это еще одна интересная статья о jQuery и MooTools (MooTools и Prototype в основном взаимозаменяемы, по крайней мере, в контексте этой дискуссии): http://jqueryvsmootools.com/

person Alsciende    schedule 15.04.2010
comment
MooTools - это фреймворк, который пытается реализовать JavaScript так, как он должен быть (по мнению авторов MooTools). Цель состоит в том, чтобы реализовать API, похожий на JavaScript и улучшающий все; не только DOM. jQuery - это набор инструментов, который дает вам простой в использовании набор методов в автономной системе, предназначенный для того, чтобы сделать саму модель DOM более приятной. Так уж получилось, что DOM - это то место, где большинство людей сосредотачивают свои усилия при написании JavaScript, поэтому во многих случаях jQuery - это все, что вам нужно. - возможно, Prototype также является скорее фреймворком. Большинство здесь, кажется, предпочитают инструментарий. - person ; 06.12.2014

jQuery использует селекторы и фильтры в стиле CSS, основанные на синтаксисе CSS. С точки зрения дизайна это дает много преимуществ. Я очень люблю CSS и хорошо разбираюсь в нем, поэтому лично для меня jQuery чувствует себя как дома. Если вы ищете синтаксис, который сделает ваше всестороннее программирование более приятным, и вы большой поклонник / опытный CSS, можно с уверенностью сказать, что вы предпочтете jQuery альтернативным вариантам. Я прошел базовый курс Prototype, и мне было до слез скучно. Я только что закончил "Основы jQuery" в Lynda's, и мне он очень нравится, потому что он тесно связан с CSS. Я программировал на обычном JavaScript около 10 лет и всегда находил его чрезвычайно сухим; и для меня это избыточный код (не так много денег). Хотя на протяжении многих лет он мне очень пригодился. Из того, что я видел до сих пор, jQuery - это то, чем ДОЛЖЕН быть JavaScript с первого дня. Но опять же, чтобы что-то улучшить, нужно много времени, тестирования и усилий. Так что jQuery для меня выигрывает.

person Illuin    schedule 09.02.2012
comment
Prototype также поддерживает селекторы CSS, используя $$ () вместо $ (). - person Vincent McNabb; 19.11.2012

У меня еще нет опыта работы с jQuery или Prototype. Собираюсь начать изучение одного из них, чтобы добавить его в свой набор инструментов в качестве старшего разработчика и руководителя проекта ColdFusion. Изначально я считаю, что новичок примет решение, поскольку это отражает принятие в отрасли, что, по-моему, является ключевым.

Основываясь на беглом осмотре и чтении нескольких туториалов по обоим, кажется, что каждый из них предлагает одни и те же основные возможности. Однако, глядя на доски объявлений и другие проекты, кажется, что jQuery пользуется гораздо большим «спросом», чем просто навык, который можно использовать. Для меня jQuery выигрывает с точки зрения принятия и спроса, поддержка сообщества и документация - это плюс. Ничего против Prototype, хорошо знать, требуется ли это для проекта из-за предсуществования, потому что какой-то разработчик выбрал его как первый, который он изучил.

person Clint    schedule 27.11.2010

Я использовал платформу прототипов и jquery, и что касается меня, мне лично нравится jquery, потому что его noConflict (); я предпочитаю использовать jq noConflict как это в моих файлах js

(function($){

}(jQuery));

таким образом вы будете использовать $ как селектор jquery для каждого файла js

person janbee    schedule 17.10.2011
comment
Я установил оба, так что лучшее из обоих миров - прототип использует $ и $$, а jquery использует noConflict: D - person HenchHacker; 24.11.2012

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

Underscore - это служебная библиотека для JavaScript, которая обеспечивает большую часть функциональной поддержки программирования, которую можно ожидать от Prototype.js (или Ruby), но без расширения каких-либо встроенных объектов JavaScript. Это галстук, который сочетается со смокингом jQuery и подтяжками Backbone.js.

person Lothre1    schedule 06.08.2012
comment
Жаль, что нет эффектов или ajax - поэтому вместо этого используются другие фреймворки. - person HenchHacker; 24.11.2012

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

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

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

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

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

person Micah Henning    schedule 09.08.2012

Краткий сжатый код, использующий операторы сокращенного стиля, также имеет тенденцию быть загадочным, поэтому он не обязательно лучше. Это может снизить удобочитаемость и сделать понимание происходящего менее ясным. За многие годы программирования я наткнулся на очень умный загадочный код, который дьявол должен был выяснить, когда у него возникли проблемы. Лично мне нравится код, который сам документирует и оптимизирован для конкретных ситуаций. Если ваша цель - максимально использовать минимум строк кода, тогда вам может подойти использование библиотек расширений DOM, таких как prototype и jQuery. Я лично считаю, что лучше полностью понять возможности самого языка JavaScript и реализации DOM браузеров и использовать их для решения поставленной задачи, будь то создание виджетов пользовательского интерфейса или что-то еще. Я действительно использую библиотеку script.aculo.us иногда для эффектов анимации, поэтому я обнаруживаю, что загружаю код библиотеки прототипов, поскольку от этого зависит scriptaculous. Я предлагаю любому, кто использует любую из библиотек, научиться писать JavaScript в стиле объектно-ориентированного программирования, прежде чем полностью зависеть от любой из этих библиотек, а затем включить ту, которая, по-видимому, лучше всего соответствует вашим потребностям. Отличная книга для изучения объектно-ориентированного JavaScript - это «Java Design Patterns».

person Jmyrons    schedule 24.06.2011
comment
Java! = Javascript. Почему вы рекомендуете книгу по Java для изучения Javascript? - person Robin Green; 24.05.2012
comment
@RobinGreen он порекомендовал книгу для изучения стиля OO Excellent book for learning OO style JavaScript is. Я могу быть не прав. - person Abdulaziz; 15.07.2012
comment
@AzizAG ОО-модели совершенно разные. Наследование на основе классов и прототипов. - person ; 19.11.2012