JRuby on Rails проти Ruby on Rails, яка різниця?


135

Я хочу спробувати JRuby та JRuby на Rails. У мене виникають проблеми з пошуку інформації про різницю між JRuby на Rails та Ruby on Rails.

На які відмінності потрібно звернути увагу?

Відповіді:


160

JRuby - це реалізація Ruby, яка працює на JVM, тоді як Matz's Ruby - це C-реалізація.

Основні особливості, які слід зазначити:

  1. JRuby працює на Java VM і компілюється або інтерпретується до байтового коду Java.
  2. JRuby може інтегруватися з кодом Java. Якщо у вас є бібліотеки класів Java (.jar's), ви можете посилатися на них і використовувати їх з коду Ruby разом з JRuby. В іншому напрямку ви також можете зателефонувати в код Java JRuby. JRuby також може використовувати можливості JVM та сервера додатків.
  3. JRuby зазвичай розміщується на серверах додатків Java, таких як Sun's GlassFish або навіть веб-сервер Tomcat.
  4. Хоча з JRuby ви не можете використовувати рідні дорогоцінні камені Ruby, у більшості популярних бібліотек Ruby є реалізація JRuby.

Є інші відмінності, які перелічені на вікі JRuby:


Дякую, що відповідаю майже на все, що я шукав. :)
epochwolf

4
ой, і він працює трохи повільніше, ніж 1.9
rogerdpack

1
Щоб побачити відмінності в JRuby на Rails, рекомендується мати різнокольорову машину з достатніми ресурсами. Повільні запити до бази даних також можуть вузько узгоджувати JRuby і викликати його виконання аналогічно або повільніше, ніж МРТ на Rails. JRuby також використовує значно більше передової пам'яті, ніж МРТ.
Джозеф Равенволф

У нас як велика продуктивність використання jruby з Oracle через VPN (тести працюють надзвичайно повільно), а також локально (без VPN) тільки запуск рубіну, рейки консолі тощо займає 30 секунд + замість 3.
Michael Durrant

57

Я здивований, що у всіх відповідях на це питання, пов’язаних з GIL , бракує важливої ​​речі .

Основна відмінність, яку ви повинні дбати про esp. у веб-додатках, таких як побудовані за допомогою Rails, справжня паралельність ("Global Interpreter Lock" безкоштовно). Коли в JRuby запущено два потоки (наприклад, що обслуговують 2 запити користувачів), вони можуть працювати одночасно в рамках одного процесу, тоді як в MRI є GIL (навіть з рідними потоками 1.9), що дозволяє уникнути паралельного виконання коду Ruby.

Для розробника додатків це перше, що потрібно пам’ятати, розглядаючи JRuby, оскільки він справді світить, config.threadsafe!але вимагає, щоб ви переконалися, що ваш код (і ваш код дорогоцінного каміння) є справді безпечним для потоків.


7

Можливо, я помиляюся, але я думаю, що ви можете упакувати додаток JRuby on Rails таким чином, що не можете зробити із звичайним RoR - подивіться на Mingle чи подібне. Дозволяє продати, не скидаючи штани / відкриваючи комоно.

Це сказав, що я недостатньо знайомий з упаковкою RoR, тому не тримайте мене за це :)


1
Ви абсолютно правильні в цьому, хоча вам знадобиться щось на кшталт дорогоцінного каміння Rawr або Roir, щоб зробити це повністю (востаннє, коли я використовував Mingle, у нього були неприховані файли Ruby ...).
Marnen Laibow-Koser

3

в основному це має працювати так само. в jRoR ви можете отримати доступ до речей, яких у вас би не було в RoR. Зазвичай, головним чином, це стосується розгортання.

Однак якщо ваш додаток RoR використовує вбудовані бібліотеки, які не мають еквівалента, який працює на JVM, це може викликати біль. Однак у більшості мов доступна не рідна версія (принаймні, популярна, яку я натрапив).


0

Тут вже є кілька чудових відповідей.

eebbesen вже охопив основи, а Карес (сам!) сказав нам, що JRuby не має GIL.

Додам з більш практичної точки зору, я запустив програми на Ruby on Rails, а потім міркував на JRuby з міркувань продуктивності.

Були дві основні переваги від продуктивності: JRuby за певних обставин просто (або був) просто швидший, ніж Рубі, і два, відсутність згадок про замку Global Interpreter Lock дозволило мені зробити багатопотокове читання, що, хоча і хитрі, розблоковані накази на величину, приносить користь .

Дуже велике додаток Ruby on Rails перенеслось і пробігло через годину, дорогоцінні камені та все. Єдиним фактичним збоєм було те, що реджекси Java трохи відрізняються від рубі. Це монументальне досягнення з боку JRuby.

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