JRuby on Rails vs. Ruby on Rails, Apa Bedanya?

137

Saya ingin mencoba JRuby dan JRuby di Rails. Saya kesulitan mencari informasi tentang perbedaan antara JRuby on Rails dan Ruby on Rails.

Apa perbedaan yang perlu saya perhatikan?

epochwolf
sumber

Jawaban:

162

JRuby adalah implementasi Ruby yang berjalan pada JVM sedangkan Ruby Matz adalah implementasi C.

Fitur utama yang perlu diperhatikan adalah:

  1. JRuby berjalan di VM Java dan dikompilasi atau diinterpretasikan ke kode byte Java.
  2. JRuby dapat berintegrasi dengan kode Java. Jika Anda memiliki pustaka kelas Java (.jar's), Anda dapat mereferensikan dan menggunakannya dari dalam kode Ruby dengan JRuby. Di arah lain Anda juga dapat memanggil kode JRuby dari dalam Java. JRuby juga dapat menggunakan JVM dan kemampuan server aplikasi.
  3. JRuby biasanya di-host dalam server aplikasi Java seperti Sun's GlassFish atau bahkan server web Tomcat.
  4. Meskipun Anda tidak dapat menggunakan permata Ruby asli dengan JRuby, ada implementasi JRuby untuk sebagian besar pustaka Ruby yang populer.

Ada perbedaan lain yang tercantum di wiki JRuby:

pengguna23117
sumber
Terima kasih, jawaban itu hampir semua yang saya cari. :)
epochwolf
4
oh, dan ini berjalan sedikit lebih lambat dari 1.9
rogerdpack
1
Untuk melihat perbedaan kinerja di JRuby on Rails, disarankan untuk memiliki mesin berlapis-lapis dengan sumber daya yang memadai. Kueri database yang lambat juga dapat menghambat JRuby dan menyebabkannya bekerja sama atau lebih lambat dari MRI di Rails. JRuby juga menggunakan memori dimuka yang jauh lebih banyak daripada MRI.
Joseph Ravenwolfe
Kami memiliki kinerja yang sangat besar dengan menggunakan jruby dengan Oracle melalui VPN (pengujian berjalan sangat lambat) dan juga secara lokal (tidak ada VPN) yang baru memulai ruby, konsol rel, dll membutuhkan waktu 30 detik + bukannya 3.
Michael Durrant
60

Saya terkejut ada hal krusial yang hilang dalam semua jawaban atas pertanyaan ini, terkait dengan GIL .

Perbedaan utama Anda harus peduli esp. dalam aplikasi web seperti yang dibangun dengan Rails adalah konkurensi sejati ("Global Interpreter Lock" gratis). Ketika dua thread sedang berjalan (misalnya melayani 2 permintaan pengguna) dengan JRuby mereka mampu berjalan secara bersamaan dalam satu proses, sedangkan di MRI ada GIL (bahkan dengan thread asli 1.9) yang menghindari mengeksekusi kode Ruby secara paralel.

Untuk pengembang aplikasi, ini adalah hal pertama yang perlu diingat saat mempertimbangkan JRuby, karena JRuby benar-benar bersinar config.threadsafe!tetapi mengharuskan Anda untuk memastikan kode Anda (dan kode permata Anda) menjadi "benar-benar" thread-safe.

kares
sumber
7

Saya mungkin salah, tetapi saya pikir Anda dapat mengemas aplikasi JRuby on Rails dengan cara yang tidak dapat Anda lakukan dengan RoR normal - lihat Mingle atau serupa. Memungkinkan untuk menjual tanpa menjatuhkan celana Anda / membuka komono.

Karena itu, saya tidak cukup akrab dengan kemasan RoR, jadi jangan pegang saya untuk itu :)

Nic Wise
sumber
1
Anda benar-benar benar dalam hal ini, meskipun Anda memerlukan sesuatu seperti permata Rawr atau Roir untuk melakukan ini sepenuhnya (terakhir kali saya menggunakan Mingle, file Ruby itu tidak dikaburkan ...).
Marnen Laibow-Koser
3

kebanyakan itu harus bekerja sama. di jRoR Anda dapat mengakses hal-hal yang tidak Anda miliki di RoR. Biasanya ini terutama terkait dengan penerapan.

Namun, jika aplikasi RoR Anda menggunakan pustaka asli yang tidak memiliki padanan yang berjalan di JVM, itu bisa merepotkan. Namun kebanyakan libs memiliki versi non native (setidaknya yang populer yang pernah saya temukan).

Michael Neale
sumber
1

Sudah ada beberapa jawaban bagus di sini.

eebbesen sudah membahas dasar-dasarnya, dan kares (sendiri!) telah memberi tahu kami bahwa JRuby tidak memiliki GIL.

Saya akan menambahkan dari perspektif yang lebih praktis, saya telah meluncurkan aplikasi di Ruby on Rails, dan kemudian bermigrasi ke JRuby karena alasan kinerja.

Ada dua manfaat kinerja utama: JRuby (atau dulu) lebih cepat daripada Ruby dalam beberapa keadaan, dan dua, kurangnya Penerjemah Global kares menyebutkan memungkinkan saya untuk melakukan multithreading, yang, meskipun rumit, tidak terkunci urutan manfaat kinerja besarnya .

Aplikasi Ruby on Rails yang sangat besar di-porting dan berjalan dalam satu jam, gem dan semuanya. Satu-satunya kesalahan sebenarnya adalah regex Java sedikit berbeda dari Ruby. Itu pencapaian monumental di pihak JRuby.

pengguna2057354
sumber