Является ли RJS злой и почему? - PullRequest
9 голосов
/ 17 ноября 2009

Я слышал, как разработчик рельсов сказал, что RJS - это зло. Я никогда не использовал его, так как мне всегда удавалось делать то, что я хотел, используя классический javascript или jquery, поэтому я не обращал внимания. Теперь я вхожу в какой-то унаследованный код, и повсюду RJS.

Так ... это правда? Каковы недостатки / преимущества использования RJS?

Ответы [ 7 ]

30 голосов
/ 20 ноября 2009

Давайте поговорим о том, что такое RJS, прежде чем понять, является ли это злом.

RJS применяет тот же уровень абстракции к высокофункциональным библиотекам Javascript, который ActiveRecord предоставляет для SQL. Однако покрытие RJS для библиотек Javascript далеко не так полно, как покрытие ActiveRecord адаптеров SQL.

Rails поставляется с поддержкой RJS только для Prototype / Script.aculo.us. Однако есть плагины, доступные или находящиеся в разработке, для поддержки других библиотек Javascript. Например, JRails переписывает помощники на основе прототипа для работы с jQuery. Подобные плагины существуют для mootools и, вероятно, Dojo.

Люди, которые считают RJS злом, - это, как правило, те, кому не нравится, когда он создает код Прототипа, или те, кто считает, что с помощью необработанного Javascript можно добиться чего-то проще.

RJS не совершенен, так же как ActiveRecord не совершенен, время от времени вам приходится переходить к написанию необработанного Javascript или SQL, чтобы выполнить свою работу. Как и в случае с ActiveRecord, чем удобнее вы пользуетесь расширенными опциями, тем больше вы можете достичь без написания исходного кода.

Одна из замечательных особенностей RJS заключается в том, что они, по сути, являются представлениями, создающими Javascript. Очень легко извлечь RJS в партиалы, которые могут быть включены по мере необходимости, либо как ответы на контроллеры, либо как часть пользовательских функций Javascript, включенных в страницу. Это делает код намного более СУХИМ, что упрощает его обслуживание.

Лично я часто использую RJS. Я считаю, что это идеальный способ прикоснуться к множеству элементов DOM одновременно. Это дает двойной бонус, позволяющий мне создавать сайты, богатые AJAX, без написания большого количества Javascript. Потом снова я ненавижу писать Javascript.

5 голосов
/ 17 ноября 2009

Учитывая, что я заменяю основную библиотеку Prototype на JQuery в моих проектах на Rails, я считаю RJS весьма полезным. Теперь это может быть болезненно, поскольку передача JavaScript обратно на сервер, который нужно выполнить, еще не совсем обычна.

Однако я не нашел никаких проблем с этим RJS в целом. Единственная жалоба, которую я имею, заключается в том, что мне обычно приходится смешивать как RJS, так и старый Javascript в моих файлах .rjs, так что это немного бессмысленно. Но это дает вам чистое место / способ обработки ваших эффектов Javascript и AJAX-вызовов, так что я думаю, что это «стандартное место для размещения вашего кода», это очень приятно.

3 голосов
/ 17 ноября 2009

Я не знаю, пойду ли я так далеко, чтобы сказать зло, но RJS (или любой серверный язык, генерирующий JS) не будет моим первым выбором. Я предпочитаю писать JS от руки. С jQuery мне действительно нравится писать JS и держать мой JS в application.js просто чистым.

Чтобы немного расширить ... Я вижу RJS как ненужную абстракцию. Я хочу знать JavaScript и JQuery. Я хочу знать, как манипулировать DOM и как делать AJAX-вызовы. А благодаря моим знаниям JS / jQuery я могу легко перейти на другой фреймворк и не задаться вопросом, справится ли фреймворк с моим JS для меня.

1 голос
/ 21 ноября 2009

RJS не "зло", но я думаю, что проблема с ним двояка:

  1. Трудно (невозможно?) Сделать ненавязчивый JavaScript с RJS. Если вы пишете Javascript-приложение с большим количеством логики, и эта логика меняется, вам придется изменить значительное количество файлов вместо одного. Кроме того, и это личное предпочтение, довольно уродливо видеть теги со сжатым Javascript, разбросанным по нему.

  2. RJS абстрагирует Javascript, что может привести к незнанию языка. Идея RJS состояла в том, чтобы позволить разработчику иметь возможность писать все для веб-приложения (кроме HTML и CSS, которые, вероятно, разработчик решит), используя только один язык: Ruby, но на практике это не удается точно так же что возможно, но не рекомендуется, создавать приложения ASP.NET путем перетаскивания элементов управления или использования большого количества тяжелого кода, генерирующего мастера. Если все, что вам нужно, это простое решение, которое требует добавления Ajax, тогда RJS работает нормально.

RJS - хороший инструмент, когда вы только начинаете работать с Rails и вам нужны некоторые «быстрые и грязные» Ajax-эффекты, которые используются редко (например, канонический комментарий для блога, который исчезает на той же странице). Как только вы начинаете требовать интенсивного использования Javascript, тогда RJS становится более ответственным, потому что он защищает разработчика от того, что он действительно должен пытаться понять.

1 голос
/ 21 ноября 2009

Если вы не знакомы с JS (или такими платформами, как Prototype), но вам нужна функциональность AJAX - RJS - лучший способ для этого. Еще одним преимуществом использования RJS является скорость. Пишите код RJS легко и быстро.

Я использовал RJS во всех проектах Rails раньше. Теперь я познакомился с Prototype (и jQuery), и поэтому я сейчас пишу код JS. Мне это нужно, потому что контроллер с большим количеством RJS потерял свою производительность. А перемещение кода RJS в JS было первым шагом к масштабированию контроллера.

Никто не может сказать вам абсолютно, что лучше - использовать RJS или нет. Каждый должен выбрать свой путь.

Например, я предпочитаю использовать RJS в административной части (где нет необходимости масштабировать что-либо) моего приложения и писать JS для внешней части.

1 голос
/ 20 ноября 2009

RJS хорош в основном потому, что его легко интегрировать в проекты Rails. Чтобы упростить задачу и уменьшить количество файлов, вы можете встроить его в свои контроллеры, и в нем есть много простых в использовании помощников из библиотек prototype / scriptaculous. Чувствуется, что он более похож на Ruby.

Это означает, что он не так четко отделен от вашего обычного кода Rails, так как довольно быстро смешивается с остальным кодом. Это также требует гораздо большего количества внешних библиотек, включаемых в прототип и js-файлы scriptaculous.

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

Более того, jQuery выглядит как javascript. Так что вы не получите такого странного сочетания JavaScript и Ruby-кода. Мне нравится Руби. Я не люблю Javascript. Но мне нравится их сочетание еще меньше. Если вы знаете JS, он будет вам знаком.

У Райана Бейтса есть скринкаст по конвертации RJS в jQuery. Может дать вам хорошее представление о разнице между этими двумя синтаксически: http://railscasts.com/episodes/136-jquery

0 голосов
/ 24 ноября 2009

RJS - это просто JavaScript-эквивалент RHTML (теперь известный как html.erb). Это шаблон, который выполняет встроенный Ruby и возвращает JavaScript в браузер для обновления страницы. Это позволяет вам лучше контролировать то, что происходит в результате действия на стороне сервера в приложении AJAX. Фактически результаты вызова RJS оцениваются интерпретатором JavaScript в браузере. Сравните это с не-RJS AJAX-приложением, где сервер возвращает HTML-код, вставленный в страницу с помощью обратного вызова для асинхронного запроса.

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

Многие ответы здесь, кажется, сосредоточены на JavaScript, Prototype и Scriptaculous Helpers, которые часто используются, но не являются обязательными, как часть шаблона RJS. Я широко использую эти помощники, так как они лучше работают с кодом Ruby в шаблонах, но они не являются обязательной частью RJS.

...