2010-01-14 6 views
8

Я занимаюсь созданием сайта Ruby on Rails в последние месяцы, и я использовал только небольшое количество встроенных функций JavaScript. Однако в ближайшие недели и месяцы я буду делать гораздо больше JavaScript-разработки, и я буду обсуждать, на какой платформе JavaScript работать.Каковы текущие различия между jQuery и Prototype?

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

Так что мои вопросы к людям, которые использовали как (предпочтительно недавно):

  • Какая разница в использовании либо Prototype и JQuery из чистого JavaScript и из Ruby On Rails перспективы?
  • Есть ли существенная разница между ними или они довольно близки друг к другу с точки зрения функциональности и написания кода?
  • Насколько высока стоимость переключения с точки зрения вещей, которые необходимо переучивать, и кода, который должен быть переписан?

Благодаря

ответ

13

Предыдущее обсуждение

Многое, если не все, ваш вопрос уже обсуждался уже. См search или:

Переход от прототипа к JQuery

Я в процессе перехода от Protoype к JQuery, главным образом из соображений производительности (я видел слишком много тестов, когда Prototype всегда приходил последним к JQuery, MooTools и Dojo.) Я бы сказал, что стоимость переключения не ужасно, потому что большинство базовых понятий (Selection, Effects, Ajax) очень похожи. Тем не менее, каждая строка кода прототипа должна быть тщательно переписана - особенно потому, что многие вспомогательные функции и конструкции ($$$) выглядят обманчиво похожими.

Если ваш код содержит множество сложных цепочечных конструкций, которые могут быть доступны и в JQuery, но работают по-другому, миграция может стать очень громоздкой задачей. Если вы используете его только для быстрого выбора элементов $(), эффектов и немного Ajax, не так много.

В любом случае, будьте готовы к фазе интенсивного обучения. Конструкции JQuery являются маленькими и умными, но ужасно читать IMHO (и выглядеть ужасно ужасно по сравнению с блоком собственного Javascript, но это другое обсуждение). Это определенно требует времени, чтобы ознакомиться с синтаксисом и принципами, если вы исходите из другой структуры или собственного Javascript.

+0

+1 отличный ответ Pekka! –

3

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

Самым большим препятствием в начале является тот факт, что Прототип сразу же подключается к дому. Как только вы включите его в страницу, все элементы dom, которые вы ищете, будут иметь прикрепленные к ним прототипы. С jQuery он оставляет все элементы отдельно, пока вы не получите доступ к нему с помощью селектора jQuery $ ('css-class'). Объект, который вы получите от этого вызова, будет иметь приложенные методы jQuery.

Если вы хотите облегчить себя в jQuery, вы можете оставить все, используя прототип, и включить jQuery и позвонить jQuery.noConflict();http://docs.jquery.com/Core/jQuery.noConflict. Это вернет метод «$» к прототипу и позволит вам использовать jQuery, вызывая jQuery ('css-class').

Если вы хотите полностью перейти в jQuery, я бы порекомендовал использовать плагин jRails (http://github.com/aaronchi/jrails). Он заменит все помощники ajax рельсов и попросит их использовать jQuery вместо прототипа. Я сделал это в ряде проектов и никогда не испытывал никаких проблем.

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

2

jQuery более эффективен для небольших, умных клиентских эффектов. prototypejs более эффективен для глубокой разработки javascript.

В jQuery есть множество плагинов для надежных эффектов пользовательского интерфейса. prototypejs имеет полную библиотеку для Enumerables, Functions, hashes.

+0

Что заставляет вас сказать, что прототип более эффективен для глубокой разработки Javascript? Сама библиотека более эффективна? Вы как разработчик более эффективны? –

+0

Почти все в jQuery связано с DOM. Но prototypejs предлагает множество невероятно полезных методов функций (curry, wrap ...: http://api.prototypejs.org/language/function.html) и объект Enumerable с замечательным API (invoke, pluck ...: http : //api.prototypejs.org/language/enumerable.html) – Alsciende

+0

Так что я имею в виду, что «более эффективно для» - это «предлагает расширенные функции для», и поэтому «делает нас более эффективными». – Alsciende

9

Ответ Pekka велик, но нужно добавить одно: Rails сильно движется в сторону агностики JavaScript. Хотя, когда Rails впервые появилась, интеграция AJAX была новаторской, с тех пор пейзаж Javascript сильно изменился, и интеграция Rails больше не соответствует лучшим практикам. Таким образом, интеграция Prototype не должна считаться сегодня основным фактором в Rails 2.3, и это будет даже менее значительным фактором в Rails 3.0, который, скорее всего, будет выпущен в течение следующих нескольких месяцев. Недавно я прочитал an interesting article, в котором описываются некоторые из наиболее значительных изменений в интеграции Javascript Rails за многие годы.

В моем текущем проекте есть тысячи строк устаревшего кода прототипа, но мы недавно начали использовать jQuery, потому что его преимущества были слишком велики, чтобы уйти. Мои впечатления:

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

JQuery это новая структура, которая была в состоянии использовать некоторые из уроков ранних яваскрипта рамок, как прототип, чтобы создать что-то более модульное, менее навязчивое, и значительно более мощное и лаконичное. Мне все еще нравится Prototype, но jQuery DOM-манипуляция и плагиновая экосистема просто слишком хороши, чтобы игнорировать больше. Если бы я начинал проект greenfield, мне пришлось бы работать с jQuery, потому что это похоже на то, где происходит инновация (по крайней мере, между этими двумя вариантами).

Смежные вопросы