JRuby trên Rails so với Ruby on Rails, có gì khác biệt?


135

Tôi đang tìm cách dùng thử JRuby và JRuby trên Rails. Tôi gặp khó khăn khi tìm thông tin về sự khác biệt giữa JRuby trên Rails và Ruby on Rails.

Sự khác biệt tôi cần chú ý là gì?

Câu trả lời:


160

JRuby là triển khai Ruby chạy trên JVM trong khi Ruby của Matz là triển khai C.

Các tính năng chính cần lưu ý là:

  1. JRuby chạy trên Java VM và nó được biên dịch hoặc giải thích thành mã byte Java.
  2. JRuby có thể tích hợp với mã Java. Nếu bạn có các thư viện lớp Java (.jar's), bạn có thể tham khảo và sử dụng chúng từ bên trong mã Ruby với JRuby. Theo hướng khác, bạn cũng có thể gọi mã JRuby từ bên trong Java. JRuby cũng có thể sử dụng JVM và các khả năng của máy chủ ứng dụng.
  3. JRuby thường được lưu trữ trong các máy chủ ứng dụng Java như SunF GlassFish hoặc thậm chí máy chủ web Tomcat.
  4. Mặc dù bạn không thể sử dụng đá quý Ruby bản địa với JRuby, nhưng có các triển khai JRuby cho hầu hết các thư viện Ruby phổ biến.

Có những khác biệt khác được liệt kê tại wiki JRuby:


Cảm ơn bạn, câu trả lời đó chỉ là về tất cả mọi thứ tôi đang tìm kiếm. :)
epochwolf

4
oh, và nó chạy chậm hơn một chút so với 1.9
rogerdpack

1
Để thấy sự khác biệt về hiệu suất trong JRuby trên Rails, bạn nên có một máy đa năng có đủ tài nguyên. Các truy vấn cơ sở dữ liệu chậm cũng có thể làm tắc nghẽn JRuby và khiến nó thực hiện tương tự hoặc chậm hơn MRI trên Rails. JRuby cũng sử dụng bộ nhớ trả trước nhiều hơn đáng kể so với MRI.
Joseph Ravenwolfe

Chúng tôi có cả hiệu suất lớn khi sử dụng jruby với Oracle qua VPN (các bài kiểm tra chạy rất chậm) và cả cục bộ (không có VPN) chỉ khởi động ruby, bảng điều khiển rails, v.v ... mất 30 giây + thay vì 3.
Michael Durrant

57

Tôi ngạc nhiên có một điều quan trọng bị thiếu trong tất cả các câu trả lời cho câu hỏi này, liên quan đến GIL .

Sự khác biệt chính bạn nên quan tâm về đặc biệt. trong các ứng dụng web, chẳng hạn như các ứng dụng được xây dựng với Rails là đồng thời thực sự ("Khóa phiên dịch toàn cầu" miễn phí). Khi hai luồng đang chạy (ví dụ: phục vụ 2 yêu cầu người dùng) với JRuby, chúng có khả năng chạy đồng thời trong một quy trình, trong khi ở MRI có GIL (ngay cả với các luồng gốc 1.9) tránh thực thi mã Ruby song song.

Đối với một nhà phát triển ứng dụng, đây là điều đầu tiên cần lưu ý khi xem xét JRuby, vì nó thực sự tỏa sáng config.threadsafe!nhưng yêu cầu bạn phải đảm bảo mã của bạn (và mã đá quý của bạn) phải an toàn theo luồng.


7

Tôi có thể sai, nhưng tôi nghĩ bạn có thể đóng gói ứng dụng JRuby trên Rails theo cách bạn không thể làm với RoR bình thường - nhìn vào Mingle hoặc tương tự. Làm cho nó có thể bán mà không làm rơi quần / mở komono.

Điều đó nói rằng, tôi không đủ quen thuộc với bao bì RoR, vì vậy đừng giữ tôi với nó :)


1
Bạn hoàn toàn chính xác về điều này, mặc dù bạn sẽ cần thứ gì đó như đá quý Rawr hoặc Roir để làm điều này hoàn toàn (lần trước tôi đã sử dụng Mingle, nó có các tệp Ruby không bị xáo trộn ...).
Marnen Laibow-Koser

3

chủ yếu là nó nên hoạt động như nhau. trong jRoR, bạn có thể truy cập những thứ bạn không có trong RoR. Thông thường nó chủ yếu là một mối quan tâm triển khai.

Tuy nhiên, nếu ứng dụng RoR của bạn sử dụng các thư viện riêng không có tương đương chạy trên JVM, đó có thể là một nỗi đau. Tuy nhiên, hầu hết các lib đều có sẵn phiên bản không có sẵn (ít nhất là những phiên bản phổ biến mà tôi đã gặp).


0

Có một số câu trả lời tuyệt vời ở đây rồi.

eebbesen đã trình bày những điều cơ bản và kares (chính anh ta!) đã nói với chúng tôi rằng JRuby không có GIL.

Tôi sẽ thêm từ góc độ thực tế hơn, tôi đã khởi chạy các ứng dụng trên Ruby on Rails, sau đó di chuyển sang JRuby vì lý do hiệu suất.

Có hai lợi ích hiệu suất chính: JRuby đơn giản là (hoặc) nhanh hơn Ruby trong một số trường hợp, và hai, việc thiếu Phiên dịch toàn cầu khóa kares đề cập đến cho phép tôi thực hiện đa luồng, trong khi, khó khăn, mở khóa các đơn đặt hàng về lợi ích hiệu suất lớn .

Một ứng dụng Ruby on Rails rất lớn được chuyển và chạy trong một giờ, đá quý và tất cả. Điều trục trặc thực tế duy nhất là các biểu thức của Java hơi khác so với Ruby. Đó là một thành tích tuyệt vời về phía JRuby.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.