ฉันกำลังจะลองใช้ JRuby และ JRuby บน Rails ฉันมีปัญหาในการค้นหาข้อมูลว่าความแตกต่างระหว่าง JRuby on Rails และ Ruby on Rails คืออะไร
อะไรคือความแตกต่างที่ฉันต้องระวัง?
ฉันกำลังจะลองใช้ JRuby และ JRuby บน Rails ฉันมีปัญหาในการค้นหาข้อมูลว่าความแตกต่างระหว่าง JRuby on Rails และ Ruby on Rails คืออะไร
อะไรคือความแตกต่างที่ฉันต้องระวัง?
คำตอบ:
JRuby คือการใช้งาน Ruby ที่ทำงานบน JVM ในขณะที่ Matz's Ruby เป็นการใช้งาน C
คุณสมบัติหลักที่ควรทราบ ได้แก่ :
มีความแตกต่างอื่น ๆ ที่ระบุไว้ใน JRuby wiki:
ฉันประหลาดใจมีเป็นสิ่งที่สำคัญที่ขาดหายไปในทุกคำตอบสำหรับคำถามนี้เกี่ยวข้องกับGIL
ความแตกต่างหลักที่คุณควรใส่ใจเกี่ยวกับ esp ในเว็บแอปพลิเคชันเช่นตัวที่สร้างด้วย Rails เป็นแบบพร้อมกันจริง ("Global Interpreter Lock" ฟรี) เมื่อสองเธรดกำลังทำงาน (เช่นให้บริการคำขอของผู้ใช้ 2 รายการ) ด้วย JRuby พวกเขาจะสามารถทำงานพร้อมกันภายในกระบวนการเดียวในขณะที่ใน MRI มี GIL (แม้จะมีเธรดเนทีฟของ 1.9) ที่หลีกเลี่ยงการรันโค้ด Ruby ในแบบคู่ขนาน
สำหรับนักพัฒนาแอปพลิเคชันสิ่งนี้เป็นสิ่งแรกที่ควรคำนึงถึงในขณะที่พิจารณา JRuby เนื่องจากเป็นสิ่งที่โดดเด่นconfig.threadsafe!
แต่ต้องการให้คุณตรวจสอบให้แน่ใจว่ารหัสของคุณ (และรหัสอัญมณีของคุณ) ปลอดภัยต่อเธรดอย่างแท้จริง
ฉันอาจจะผิด แต่ฉันคิดว่าคุณสามารถแพคเกจแอพ JRuby บน Rails ในแบบที่คุณไม่สามารถทำได้กับ RoR ปกติ - ดู Mingle หรือคล้ายกัน ทำให้ขายได้โดยไม่ต้องทิ้งกางเกง / เปิดโคโมโนะ
ที่กล่าวว่าฉันไม่คุ้นเคยกับบรรจุภัณฑ์ RoR เพียงพอดังนั้นอย่าถือฉันไว้ :)
ส่วนใหญ่ควรใช้งานได้เหมือนกัน ใน jRoR คุณสามารถเข้าถึงสิ่งที่คุณไม่มีใน RoR โดยปกติแล้วส่วนใหญ่เป็นเรื่องการปรับใช้
อย่างไรก็ตามหากแอป RoR ของคุณใช้ไลบรารีเนทีฟที่ไม่มีเทียบเท่าที่รันบน JVM นั่นอาจเป็นความเจ็บปวด อย่างไรก็ตาม libs ส่วนใหญ่มีเวอร์ชันที่ไม่ใช่เนทีฟ (อย่างน้อยก็เป็นเวอร์ชันยอดนิยมที่ฉันเจอ)
มีคำตอบที่ดีอยู่แล้ว
eebbesen ได้กล่าวถึงพื้นฐานแล้วและคาเรส (ตัวเขาเอง!) ได้บอกเราว่า JRuby ไม่มี GIL
ฉันจะเพิ่มจากมุมมองที่เป็นประโยชน์มากขึ้นฉันได้เปิดตัวแอปบน Ruby on Rails แล้วย้ายไปที่ JRuby ด้วยเหตุผลด้านประสิทธิภาพ
มีประโยชน์ด้านประสิทธิภาพหลักสองประการ: JRuby (หรือเป็น) เร็วกว่า Ruby ในบางสถานการณ์และสองประการคือการขาด Global Interpreter Lock kares ที่กล่าวถึงทำให้ฉันสามารถทำมัลติเธรดได้ซึ่งในขณะที่คำสั่งปลดล็อกคำสั่งของผลประโยชน์ขนาดใหญ่ที่ยุ่งยาก .
แอพ Ruby on Rails ขนาดใหญ่มากพอร์ตและทำงานในหนึ่งชั่วโมงอัญมณีและทั้งหมด ความผิดพลาดเพียงอย่างเดียวคือ regexes ของ Java แตกต่างจาก Ruby เล็กน้อย นั่นเป็นความสำเร็จที่ยิ่งใหญ่ในส่วนของ JRuby