ทำไมคนพูดว่าทับทิมช้า [ปิด]


184

ฉันชอบ Ruby on Rails และฉันใช้สำหรับโครงการพัฒนาเว็บไซต์ทั้งหมดของฉัน ไม่กี่ปีที่ผ่านมามีจำนวนมากของการพูดคุยเกี่ยวกับทางรถไฟเป็นคนเห็นแก่ตัวหน่วยความจำและเกี่ยวกับวิธีการมันไม่ได้ระดับดีมาก แต่คำแนะนำเหล่านี้ถูกนำไปที่เตียงโดยเกร็กพอลแล็คที่นี่

เมื่อเร็ว ๆ นี้ฉันได้ยินคนพูดว่ารูบี้ช้า

  • ทำไม Ruby จึงถูกพิจารณาว่าช้า

ฉันไม่พบว่า Ruby จะช้า แต่อีกครั้งฉันแค่ใช้มันเพื่อสร้างแอพ CRUD และบล็อกของ บริษัท โครงการประเภทใดที่ฉันต้องทำก่อนที่ฉันจะพบว่าทับทิมเริ่มช้า หรือความเชื่องช้านี้เป็นเพียงสิ่งที่มีผลต่อภาษาการเขียนโปรแกรมทั้งหมดหรือไม่

  • ตัวเลือกของคุณในฐานะโปรแกรมเมอร์ Ruby คืออะไรหากคุณต้องการจัดการกับ "ความเชื่องช้า" นี้?

  • Ruby รุ่นใดที่เหมาะกับแอปพลิเคชั่นเช่น Stack Overflow ซึ่งมีความสำคัญต่อความเร็วและการจราจรหนาแน่น

คำถามเป็นเรื่องส่วนตัวและฉันรู้ว่าการตั้งค่าสถาปัตยกรรม (EC2 เทียบกับเซิร์ฟเวอร์แบบสแตนด์อโลนและอื่น ๆ ) สร้างความแตกต่างใหญ่ แต่ฉันอยากได้ยินสิ่งที่ผู้คนคิดเกี่ยวกับทับทิมกำลังช้า

ในที่สุดฉันไม่สามารถหาข่าวมากเกี่ยวกับ Ruby 2.0 - ฉันเอาเราเป็นสองสามปีที่ดีจากนั้น


1
ความเป็นไปได้ที่ซ้ำกันของRuby ทำให้อะไรช้า?
Nakilon


นอกเหนือจากคำตอบที่ดีไม่มีใครตอบว่าทำไม ข้อมูลเชิงลึกที่ดีขึ้นอยู่ในคำถามที่เกี่ยวข้องที่กล่าวถึงโดย Nakilon
Andre Figueiredo

คำตอบ:


184

ทำไม Ruby จึงถูกพิจารณาว่าช้า

เพราะถ้าคุณใช้การวัดประสิทธิภาพทั่วไประหว่าง Ruby และภาษาอื่น ๆ Ruby จะสูญเสีย

ฉันไม่พบว่า Ruby จะช้า แต่อีกครั้งฉันแค่ใช้มันเพื่อสร้างแอพ CRUD และบล็อกของ บริษัท โครงการประเภทใดที่ฉันต้องทำก่อนที่ฉันจะพบว่าทับทิมเริ่มช้า หรือความเชื่องช้านี้เป็นเพียงสิ่งที่มีผลต่อภาษาการเขียนโปรแกรมทั้งหมดหรือไม่

Ruby อาจจะให้บริการคุณไม่ดีในการเขียนแอปพลิเคชันการประมวลผลสัญญาณดิจิตอลตามเวลาจริงหรือระบบควบคุมแบบเรียลไทม์ใด ๆ Ruby (กับ VMs ในปัจจุบัน) อาจทำให้หายใจไม่ออกในคอมพิวเตอร์ที่ใช้ทรัพยากร จำกัด เช่นสมาร์ทโฟน

โปรดจำไว้ว่าการประมวลผลจำนวนมากบนเว็บแอปพลิเคชันของคุณนั้นทำโดยซอฟต์แวร์ที่พัฒนาใน C เช่น Apache, Thin, Nginx, SQLite, MySQL, PostgreSQL, ห้องสมุดแยกวิเคราะห์จำนวนมาก, RMagick, TCP / IP เป็นต้นเป็นโปรแกรม C ที่ Ruby ใช้ . Ruby นำเสนอกาวและตรรกะทางธุรกิจ

ตัวเลือกของคุณในฐานะโปรแกรมเมอร์ Ruby คืออะไรหากคุณต้องการจัดการกับ "ความเชื่องช้า" นี้?

เปลี่ยนเป็นภาษาที่เร็วขึ้น แต่นั่นก็มีค่าใช้จ่าย มันเป็นราคาที่อาจคุ้มค่า แต่สำหรับเว็บแอปพลิเคชันส่วนใหญ่การเลือกใช้ภาษาไม่ใช่ปัจจัยที่เกี่ยวข้องเนื่องจากมีปริมาณการเข้าชมไม่เพียงพอที่จะพิสูจน์ว่าใช้ภาษาที่เร็วกว่าซึ่งมีค่าใช้จ่ายในการพัฒนามากขึ้น

Ruby รุ่นใดที่เหมาะกับแอปพลิเคชั่นเช่น Stack Overflow ซึ่งมีความสำคัญต่อความเร็วและการจราจรหนาแน่น

คนอื่น ๆ ตอบคำถามนี้ - JRuby, IronRuby, REE จะทำให้ส่วน Ruby ของแอปพลิเคชั่นของคุณทำงานได้เร็วขึ้นบนแพลตฟอร์มที่สามารถจ่าย VM ได้ และเนื่องจากไม่ใช่ทับทิมที่ทำให้เกิดความช้า แต่สถาปัตยกรรมระบบคอมพิวเตอร์ของคุณและสถาปัตยกรรมแอปพลิเคชันคุณสามารถทำสิ่งต่าง ๆ เช่นการจำลองฐานข้อมูลเซิร์ฟเวอร์แอปพลิเคชันหลายตัวการปรับสมดุลด้วยพร็อกซีย้อนกลับแคชแคช . ไม่มีสิ่งนี้คือทับทิม

ในที่สุดฉันไม่สามารถหาข่าวมากเกี่ยวกับ Ruby 2.0 - ฉันเอาเราเป็นสองสามปีที่ดีจากนั้น

คนส่วนใหญ่กำลังรอทับทิม 1.9.1 ฉันกำลังรอ Rails 3.1 บน Ruby 1.9.1 บน JRuby

สุดท้ายโปรดจำไว้ว่านักพัฒนาจำนวนมากเลือก Ruby เพราะมันทำให้การเขียนโปรแกรมเป็นประสบการณ์ที่สนุกสนานมากขึ้นเมื่อเทียบกับภาษาอื่น ๆ และเนื่องจาก Ruby with Rails ทำให้นักพัฒนาเว็บที่มีทักษะสามารถพัฒนาแอปพลิเคชันได้อย่างรวดเร็ว


3
ฉันได้ตัดสินใจแล้วว่านี่เป็นคำตอบที่ดีที่สุด ขอบคุณฉันชอบการเปรียบเทียบเกี่ยวกับแอปประมวลผลสัญญาณ ง่ายกว่าที่จะเห็นสิ่งที่ผู้คนกำลังพูดถึงหลังจากคำตอบที่เป็นประโยชน์เหล่านี้
stephenmurdoch

1
ใช่คุณอยู่ห่างจาก ruby ​​2 สองสามปีRuby 2.0.0 ออกมาเมื่อวันที่ 24 กุมภาพันธ์ 2556
Morgan

3
ประสบการณ์ของฉันจากการใช้ Ruby 2.1 คือว่ามันเร็วกว่าแอปเดียวกันที่ทำงานใน Ruby 2.0 ประมาณ 25%
Matt Connolly

14
ภาษาไม่ได้ช้าหรือเร็วการใช้งานล่ามและคอมไพเลอร์ของพวกเขาคือ)
Zelphir Kaltstahl

122

แรกของทุกช้าลงด้วยความเคารพกับสิ่งที่ ? ค? งูใหญ่? มารับตัวเลขบางส่วนที่เกมเกณฑ์มาตรฐานภาษาคอมพิวเตอร์ :

ทำไม Ruby จึงถูกพิจารณาว่าช้า

ขึ้นอยู่กับคนที่คุณถาม คุณสามารถบอกได้ว่า:

  • Ruby เป็นภาษาที่ถูกตีความและภาษาที่ตีความจะมีแนวโน้มที่จะช้ากว่าภาษาที่รวบรวม
  • Ruby ใช้การรวบรวมขยะ (แม้ว่า C # ซึ่งยังใช้การรวบรวมขยะออกมาสองคำสั่งขนาดก่อน Ruby, Python, PHP ฯลฯ ในอัลกอริทึมเพิ่มเติมมาตรฐานการจัดสรรหน่วยความจำน้อยมากด้านบน)
  • การเรียกใช้เมธอด Ruby ช้า (แม้ว่าเนื่องจากการพิมพ์เป็ดพวกมันจะเร็วกว่าภาษาที่ตีความอย่างมาก)
  • Ruby (ยกเว้น JRuby) ไม่รองรับการใช้มัลติเธรดจริง
  • เป็นต้น

แต่แล้วช้าอีกครั้งเกี่ยวกับอะไร Ruby 1.9 นั้นเร็วพอ ๆ กับ Python และ PHP (ภายใน 3 เท่าของประสิทธิภาพ) เมื่อเปรียบเทียบกับ C (ซึ่งเร็วกว่ามากถึง 300x) ดังนั้นข้างบน (ยกเว้นการพิจารณาเธรดหากแอ็พพลิเคชันของคุณขึ้นอยู่กับแง่มุมนี้) ) ส่วนใหญ่เป็นนักวิชาการ

ตัวเลือกของคุณในฐานะโปรแกรมเมอร์ Ruby คืออะไรหากคุณต้องการจัดการกับ "ความเชื่องช้า" นี้?

เขียนเพื่อขยายขีดความสามารถและโยนฮาร์ดแวร์เพิ่มเติมได้ที่ (เช่นหน่วยความจำ)

Ruby รุ่นใดที่เหมาะกับแอปพลิเคชั่นเช่น Stack Overflow ซึ่งมีความสำคัญต่อความเร็วและการจราจรหนาแน่น

ดีREE (รวมกับผู้โดยสาร )จะเป็นผู้สมัครที่ดีมาก


1
การรวบรวมขยะเองไม่จำเป็นต้องช้า แต่การเก็บขยะของ MRI นั้น หากคุณต้องการทับทิมที่เร็วกว่าคุณสามารถดู JRuby และ REE ได้
Andreas

1
@igouy จริงกลางปี ​​2008 อาจรุนแรงมาก ฉันอัปเดตลิงก์แล้ว แต่ลิงก์เหล่านั้นจะล้าสมัยในไม่กี่เดือน :) ไม่ว่าจะด้วยวิธีใดฮาร์ดแวร์และแพตช์เลเวลบางอย่างอาจแตกต่างกันและเพิ่มการทดสอบเพิ่มเติมเล็กน้อย แต่ภาพใหญ่ของสิ่งต่าง ๆ ไม่เปลี่ยนแปลง
vladr

11
>> ในลำดับความสำคัญเดียวกัน << มันอยู่ในลำดับความสำคัญเดียวกันถ้าคุณอยู่ที่ 7 หรืออยู่ที่ 69 ความแตกต่างนั้นไม่มีนัยสำคัญหรือไม่?
igouy

10
@igouy ฉันไม่รู้เกี่ยวกับคุณ แต่ฉันไม่ใช่โปรแกรมที่จะวัดอายุขัยของฉันในแง่ของความเร็วในการดำเนินการ ตัวอย่างที่ฉันสนใจเกี่ยวกับความเร็วในการทำงานคือเวลาในการเรนเดอร์ HTTP ตอบกลับ ฉันรู้ว่าฉันจะไม่สังเกตเห็นความแตกต่างระหว่างเวลาในการเรนเดอร์ 7ms และ 69ms (โดยเฉพาะเมื่อขึ้นไปบนเวลาแฝงของเครือข่าย 130ms) ฉันรู้ว่าฉันจะสังเกตเห็นความแตกต่างระหว่าง 7ms และ 700ms และฉันจะสังเกตเห็นความแตกต่างระหว่าง 7ms และ 7s - แต่ไม่ไม่ใช่ระหว่าง 7ms และ 69ms
vladr

3
@ vladr แล้ว 70ms หรือ 700ms ล่ะ คุณสังเกตเห็นความแตกต่างนั้นไหม
Paul Draper

60

David Heinemeier Hanssonเป็นผู้สร้าง Rails ขึ้นมาพูดว่า:

Rails [Ruby] มีไว้สำหรับ Fast Application ที่เป็นเว็บส่วนใหญ่ เรามีเว็บไซต์ที่มีการดูหน้าเว็บแบบไดนามิกหลายล้านต่อวัน หากคุณลงเอยด้วยหน้าแรกของ Yahoo หรือ Amazon ก็ไม่น่าเป็นไปได้ที่กรอบการทำงานนอกกรอบในภาษาใด ๆ จะทำให้คุณดีขึ้นมาก คุณอาจต้องม้วนตัวเอง แต่แน่นอนว่าฉันต้องการซีพียูฟรีด้วย ฉันเพิ่งสนใจเกี่ยวกับรอบนักพัฒนาฟรีมากขึ้นและยินดีที่จะแลกเปลี่ยนอดีตสำหรับหลัง

นั่นคือการทิ้งฮาร์ดแวร์หรือเครื่องจักรที่มีปัญหามากกว่านั้นถูกกว่าการจ้างนักพัฒนามากขึ้นและใช้ภาษาที่เร็วกว่า แต่ยากกว่าในการรักษาภาษา ท้ายที่สุดมีคนไม่กี่คนที่เขียนเว็บแอปพลิเคชั่นในซี

Ruby 1.9 เป็นการปรับปรุงที่ใหญ่กว่า 1.8 ปัญหาที่ใหญ่ที่สุดของ Ruby 1.8 คือธรรมชาติที่ถูกตีความ (ไม่มีรหัสโดยไม่มีการคอมไพล์) และวิธีการนั้นเรียกว่าหนึ่งในการดำเนินการที่พบบ่อยที่สุดใน Ruby นั้นช้ามาก

มันไม่ได้ช่วยให้ทุกอย่างสวยมากเป็นวิธีการค้นหาใน Ruby - เพิ่มตัวเลขสองตัวทำดัชนีอาร์เรย์ ในกรณีที่ภาษาอื่นเปิดเผยแฮ็ก ( __add__วิธีPython , Perl's overload.pm) Ruby ทำ OO บริสุทธิ์ในทุกกรณีและอาจทำให้ประสิทธิภาพลดลงหากคอมไพเลอร์ / ล่ามไม่ฉลาดพอ

ถ้าฉันเขียนเว็บแอปพลิเคชั่นยอดนิยมใน Ruby ฉันจะเน้นไปที่แคช การแคชหน้าจะช่วยลดเวลาในการประมวลผลสำหรับหน้านั้นให้เป็นศูนย์ไม่ว่าคุณจะใช้ภาษาใด สำหรับเว็บแอปพลิเคชันค่าใช้จ่ายฐานข้อมูลและ I / O อื่น ๆ เริ่มมีความสำคัญมากกว่าความเร็วของภาษาดังนั้นฉันจะมุ่งเน้นไปที่การปรับให้เหมาะสม


7
"หลังจากทั้งหมดไม่กี่คนที่เขียนเว็บแอปพลิเคชันใน C. " - ไม่แน่นอน แต่เว็บไซต์ที่สำคัญต่อประสิทธิภาพหลายแห่งได้ย้ายไปที่ Scala
Dario

6
ฉันไม่เห็นด้วยกับ 'การขว้างปาฮาร์ดแวร์เพิ่มที่ราคาถูกกว่า' เป็นการยากที่จะโน้มน้าวใจลูกค้าว่าพวกเขาควรจ่ายเงินมากขึ้นสำหรับการโฮสต์ทุก ๆ เดือนเพราะแพลตฟอร์มของพวกเขาได้รับการออกแบบสำหรับนักพัฒนาในใจ
Kevin

9
@ เจ็ด: ค่าใช้จ่ายในการพัฒนาแน่นอนจะลดลง? มิฉะนั้นแล้วประเด็นของการใช้ Ruby ในตอนแรกคืออะไร?
rjh

4
@ เควินคำสั่งนั้นค่อนข้างกว้าง หากคุณต้องการตั้งค่าเซิร์ฟเวอร์ใหม่สำหรับการเพิ่มปริมาณการเข้าชม 10% หรือประมาณ 100 ครั้งต่อวันลูกค้าจะมีสิทธิ์บ่นอย่างชัดเจน แม้ว่าตามความเป็นจริงคุณจะต้องมีปริมาณการใช้งานมากขึ้นเพื่อเริ่มต้นและเพิ่มตามลำดับความสำคัญก่อนที่ฮาร์ดแวร์เก่าจะไม่สามารถรับมือได้อีกต่อไป เมื่อถึงจุดนั้นหัวข้อก็เปลี่ยนเป็น "ปัญหาที่ดีที่จะมี" และแทบจะไม่มีใครบ่นเกี่ยวกับการอัพเกรดฮาร์ดแวร์ นอกจากนี้ยังไม่มี "ลูกค้า" ที่ทำงานบนเว็บไซต์ที่มีปริมาณการใช้งานสูงโดยไม่ทราบถึงสิ่งเหล่านี้
หลอกลวง

5
@ เควิน - ลองหันมาดูกันสิ "เป็นการยากที่จะโน้มน้าวใจลูกค้าว่าพวกเขาควรรอ 3 เดือนสำหรับคุณสมบัติใหม่เพราะแพลตฟอร์มของพวกเขาได้รับการออกแบบโดยคำนึงถึงคอมพิวเตอร์เป็นหลัก" หากคุณสมบัติใหม่นั้นจะเพิ่มรายได้อย่างมากมันจะจ่ายค่าฮาร์ดแวร์เพิ่มเติม นอกจากนี้การเลือกภาษาที่รวดเร็วตั้งแต่เริ่มแรกนั้นสำหรับหลาย ๆ แอปพลิเคชันซึ่งเป็นการเพิ่มประสิทธิภาพก่อนวัยอันควร โอกาสที่คอขวดของคุณจะอยู่ที่อื่น: การอ่านฐานข้อมูลเวลาแฝงของเครือข่ายและอื่น ๆ
นาธานลอง

34

การเขียนรหัสช้า อ่านรหัสช้า การค้นหาและแก้ไขข้อบกพร่องนั้นช้า การเพิ่มคุณสมบัติและการปรับปรุงช้า สิ่งใดที่ปรับปรุงให้ดีขึ้นในครั้งก่อนคือชัยชนะ ปัญหาการปฏิบัติงานมีน้อยมาก


30
@GregS: ประสิทธิภาพการดำเนินการเป็นปัญหาเสมอหากมีผลกระทบต่อการใช้งาน ถูกต้องการสแกนไฟล์ xml เพื่อหาสตริงในหนึ่งวินาทีหรือสามนาทีไม่สำคัญจากมุมมองของตัวเลขล้วน แต่ความแตกต่างสองสามวินาทีสามารถสร้างความแตกต่างอย่างมากในการใช้งานเมื่อคุณพูดถึงแอปพลิเคชันที่ผู้ใช้หัน
ไบรอัน Oakley

5
@ Ajax: ไม่ฉันว่ามันเป็นบุคลิกที่คุณชนะ
ประธานาธิบดีเจมส์เค. โพลค์

15
บันทึกของฉันจนถึงขณะนี้คือการบันทึก บริษัท $ 30,000 / ปีในหนึ่งวันทำงาน วิศวกรของพวกเขาตัดสินใจว่าการอ่านคลาวด์อัลกอริธึมจะทำให้อ่านได้ง่ายขึ้นนับจำนวนงานที่ทำในแต่ละครั้ง ข้อความค้นหางานที่มี 20,000+ หน่วยงาน การเปลี่ยนเพื่อตรวจสอบว่ามี 1 รายการงานเหลือทิ้งไปเป็นข้อความค้นหา n ข้อความและตัดบิลจาก $ 130 / วันเป็น $ 20 / วัน นักเขียนขี้เกียจทำเงินให้ฉัน โปรดส่งเสริมให้โค้ดตัวขี้เกียจมากขึ้น
Ajax

10
เป็นเรื่องตลกที่คุณแสดงความคิดเห็นในตอนนี้ ... ฉันย้ายไปที่ บริษัท อื่นซึ่งเราต้องดึงนักพัฒนาสิบห้าคนออกจากฟีเจอร์และประสิทธิภาพเนื่องจากธนาคารอเมริกันขนาดใหญ่ปฏิเสธที่จะเซ็นสัญญาหลายล้านดอลลาร์จนกระทั่งระบบ สามารถจัดการกับภาระของพวกเขา พวกเขาชอบคุณสมบัติที่เรามีไม่ใช่แค่ความเร็วที่พวกเขาทำ หากคุณเพิกเฉยต่อประสิทธิภาพการทำงานที่ยาวนานมันไม่สำคัญว่าคุณจะมีฟีเจอร์ใดเพราะมันจะช้าเกินปกติ
Ajax

4
ประสิทธิภาพการดำเนินการเป็นปัญหาเสมอปัญหาที่เรากำลังพูดถึงนั้นมีมากแค่ไหน คุณสามารถเรียกใช้รหัสตีความได้เท่าใดบนโทรศัพท์มือถือก่อนที่ผู้ใช้จะหยุดซื้อแอปของคุณเพราะมันฆ่าแบตเตอรี่ ผู้ใช้จะรอให้โหลดหน้าเว็บของคุณนานเท่าใดก่อนปิดโฆษณาที่กีดกันรายได้โฆษณาของคุณ ตอบคำถามประเภทนี้และคุณเห็นว่าประสิทธิภาพของการปฏิบัติมีความสำคัญมากเพียงใด
Sqeaky

15

คำตอบนั้นง่าย: มีคนบอกว่าทับทิมช้าเพราะมันจะช้าขึ้นอยู่กับการเปรียบเทียบวัดกับภาษาอื่น ๆ โปรดจำไว้ว่า "ช้า" เป็นญาติ บ่อยครั้งที่ทับทิมและภาษา "ช้า" อื่น ๆ นั้นเร็วพอ


ใช่นั่นคือสิ่งที่ฉันคิดว่าฉันหมายถึงคนพูดว่ามันช้า แต่ก็ยังคงสาป
แช่ง

11
>> มันยังคงยี้รวดเร็วสำหรับความต้องการของฉัน << มันเร็วพอสำหรับทุกอย่างที่ไม่จำเป็นต้องเร็ว :-)
igouy

ฉันมีอคติบางส่วนเกี่ยวกับสิ่งนี้บางทีคอคส์นี้เป็นความคิดเห็นที่ล้าสมัย ตอนนี้เรามีทับทิม 2.3 และจากประสบการณ์ทับทิม 2.2 ฉันพบว่ารางรถไฟมีน้ำหนักมาก ถ้าต้องการกรอบที่เร็วกว่าลอง pidrano โดยอิงจากซินาตร้าและพวกมันพยายามทำตามคำสั่งรางให้ใกล้เคียงที่สุดเท่าที่จะทำได้ แต่เบากว่ามาก แต่พวกเขายังไม่ถึงเวอร์ชั่น 1.0 ยังมีอีกมาก แต่จากการทดสอบของฉันมันทำงานได้ดีและรวดเร็ว ฉันทำงานกับเร็กคอร์ดที่ใช้งาน 5 และเฟือง pidrano ที่ยืมมาจากราง ด้วยการเชื่อมต่อพร้อมกัน 200 รายการฉันได้รับการตอบสนอง 1.5 วินาทีโดยไม่มีการสอบถาม db ด้วยสินทรัพย์จากเฟือง
James Tan

5

Joel on Software - ประสิทธิภาพทับทิมมาเยือน อธิบายค่อนข้างดี อาจล้าสมัยแม้ว่า ...

ฉันอยากจะแนะนำให้ติดกับมันในขณะที่คุณคุ้นเคยกับ Ruby on Rails
หากคุณเคยเจอปัญหาด้านประสิทธิภาพคุณอาจพิจารณาใช้ภาษาและกรอบงานที่แตกต่างกัน

ในกรณีนี้ฉันอยากจะแนะนำ C # กับASP.NET MVC 2ได้ดีสำหรับแอป CRUD


ขอบคุณสำหรับลิงค์ฉันชอบอ่านสิ่งที่ Joel ทำ คำพูดที่น่าสนใจที่เขาทำเกี่ยวกับ "คำขวัญกันชนสติ๊กเกอร์" ของ DHH ...
stephenmurdoch

ข้อความอ้างอิง: " นี่ใช้ไม่ได้กับทุกคน แต่เมื่อมีคนบอกว่าพวกเขามีปัญหาด้านประสิทธิภาพการทำงานกับ Ruby หรือว่าพวกเขาต้องการที่จะสามารถเรียกใช้รหัสได้เร็วกว่าเครื่องมือภาษาหลักของ Ruby ที่สามารถเรียกใช้งานได้ Ruby สนับสนุนการร้องเพลงสวดเกี่ยวกับวัฏจักรของนักพัฒนากับรอบของซีพียู "ดีมาก
Marc.2377

3

ฉันจะบอกว่าทับทิมช้าเพราะไม่ได้ใช้ความพยายามอย่างมากในการทำให้ล่ามเร็วขึ้น เช่นเดียวกับ Python สมอลล์ทอล์คเป็นเพียงแบบไดนามิกเป็นทับทิมหรืองูหลาม แต่มีประสิทธิภาพที่ดีขึ้นโดยขนาดให้ดูhttp://benchmarksgame.alioth.debian.org เนื่องจาก Smalltalk ถูกแทนที่ด้วย Java และ C # มากขึ้นหรือน้อยลง (นั่นคือเมื่อ 10 ปีที่แล้ว) จึงไม่มีการเพิ่มประสิทธิภาพการทำงานอีกต่อไปและ Smalltalk ก็ยังเร็วกว่า Ruby และ Python ผู้คนที่ Xerox Parc และที่ OTI / IBM มีเงินที่จะจ่ายให้กับคนที่ทำงานเพื่อทำให้ Smalltalk เร็วขึ้น สิ่งที่ฉันไม่เข้าใจคือเหตุผลที่ Google ไม่ใช้เงินเพื่อทำให้ Python เร็วขึ้นเพราะเป็นร้าน Python ขนาดใหญ่ พวกเขาใช้จ่ายเงินไปกับการพัฒนาภาษาอย่าง Go ...


ฉันคิดว่าเป็นเพราะ Python มีอยู่แล้วและมีการใช้อย่างมากในปัจจุบัน หากคุณต้องการประสิทธิภาพสูงมีห้องสมุดมากมายที่คุณสามารถใช้หรือสานและสิ่งอื่น ๆ ที่คุณสามารถใช้ได้
Zelphir Kaltstahl

จากสิ่งที่ฉันอ่านความพยายามบางอย่างได้ให้ผลลัพธ์ที่ดีใน Ruby 2.5 แล้ว
Marc.2377

2

ก่อนอื่นคุณสนใจสิ่งที่คนอื่นพูดเกี่ยวกับภาษาที่คุณชอบหรือไม่? เมื่อมันทำงานได้ต้องทำคุณก็โอเค

OO ไม่ใช่วิธีที่เร็วที่สุดในการเรียกใช้โค้ด แต่จะช่วยในการสร้างรหัส รหัสอัจฉริยะเร็วกว่ารหัสใบ้และลูปไร้ประโยชน์เสมอ ฉันเป็น DBA และดูลูปที่ไร้ประโยชน์เหล่านี้วางพวกเขาใช้โค้ดและแบบสอบถามที่ดีกว่าและแอปพลิเคชันเร็วขึ้นเร็วขึ้นมาก คุณสนใจเกี่ยวกับวินาทีสุดท้ายหรือไม่ คุณอาจมีภาษาที่เหมาะสำหรับความเร็วส่วนคนอื่น ๆ ก็ทำงานที่ต้องทำและสามารถดูแลได้โดยโปรแกรมเมอร์ที่แตกต่างกัน

มันเป็นแค่ทางเลือก


2

เห็นได้ชัดว่าการพูดคุยเกี่ยวกับความเร็วทับทิมเสีย แม้ว่าการทดสอบเกณฑ์มาตรฐานชี้ให้เห็นว่าทับทิมไม่ช้ากว่า PHP มากนัก แต่ในทางกลับกันคุณจะได้รับรหัส DRY ที่บำรุงรักษาง่ายซึ่งเป็นกรอบที่ดีที่สุดในภาษาต่างๆ

สำหรับโครงการขนาดเล็กคุณจะไม่รู้สึกถึงความเชื่องช้าใด ๆ (ฉันหมายถึงจนกว่าจะมีผู้ใช้ <50K คน) เนื่องจากไม่มีการคำนวณที่ซับซ้อนในรหัสเพียงอย่างเดียว

สำหรับโครงการที่ใหญ่กว่าการจ่ายเงินสำหรับทรัพยากรจ่ายออกและถูกกว่าค่าจ้างนักพัฒนา นอกจากนี้การเขียนโค้ดบน RoR จะกลายเป็นเร็วกว่าอื่น ๆ

ในปี 2014 ความแตกต่างของความเร็วที่คุณกำลังพูดถึงนี้สำหรับเว็บไซต์ส่วนใหญ่ไม่สำคัญ


2

วิธีจัดการกับประสิทธิภาพของรูบี้ในเว็บแอปพลิเคชันนั้นเหมือนกับภาษาโปรแกรมอื่น ๆ :

สถาปัตยกรรม

วิธีนี้ทำได้ง่ายกว่าใน Rails มากกว่าใน Web Framework อื่น ๆ ส่วนใหญ่

ในระดับแอปพลิเคชันโดยการแคชสิ่งที่ควรจะถูกแคชและโดยการจัดการการเข้าถึงฐานข้อมูลด้วยวิธีที่ชาญฉลาด

Rails ทำให้ง่ายและเป็นธรรมชาติในการแก้ปัญหาเหล่านี้ มีหลาย abstractions สำหรับการแคชข้อมูลหน้าและแฟรกเมนต์และยังมี abstractions ที่ดีมากที่จะจัดการกับส่วน SQL ในรูปแบบที่ปรับให้เหมาะสมและนำกลับมาใช้ใหม่ได้ ( Active Record and AREL )

นี่คือเหตุผลว่าทำไมหลาย ๆ แอปพลิเคชั่นที่เขียนด้วยภาษาที่เร็วและไม่แสดงออก (เช่น php) สิ้นสุดลงช้ากว่าทับทิมคู่ ไม่ใช่เรื่องง่ายและสง่างามที่จะแก้ไขปัญหาแคชและการสืบค้นด้วยภาษาเหล่านี้มากกว่าที่ใช้กับ Ruby

ในระดับโครงสร้างพื้นฐานมันมีเหตุผลที่จะคิดว่าการทำโหลดบาลานซ์และทุกอย่างที่ฉันไม่ได้รู้มากเกี่ยวกับเรื่องนี้ ฉันต้องการ outsource การปัญหาที่การจ้างงานโดยแพลตฟอร์มบางส่วนเป็นผู้ให้บริการเช่นHerokuหรือเครื่องยนต์ลาน อย่างไรก็ตาม. การปรับใช้รางที่มีการปรับสมดุลโหลดอาจไม่ใช่เรื่องยากที่จะทำ


1

Ruby ช้ากว่า C ++ ที่จำนวนงานที่สามารถวัดได้ง่าย (เช่นการทำโค้ดที่ต้องพึ่งพาจุดลอยตัว) นี่ไม่น่าแปลกใจนัก แต่มีเหตุผลเพียงพอที่บางคนกล่าวว่า“ ทับทิมช้า” โดยไม่มีคุณสมบัติ พวกเขาไม่นับข้อเท็จจริงที่ว่ามันง่ายกว่าและปลอดภัยกว่าในการเขียนรหัส Ruby มากกว่า C ++

การแก้ไขที่ดีที่สุดคือการใช้โมดูลเป้าหมายที่เขียนในภาษาอื่น (เช่น C, C ++, Fortran) ในรหัส Ruby ของคุณ สิ่งเหล่านี้สามารถยกระดับอย่างหนักและสคริปต์ของคุณสามารถมุ่งเน้นไปที่ปัญหาการประสานงานในระดับที่สูงขึ้น


การเปรียบเทียบมักจะทำกับ Java, C #, Python หรือ Perl มากกว่า C ++
rjh

5
แน่นอน. แต่ฉันสามารถรับประกันคุณ (ในฐานะนักพัฒนาของ Tcl) ที่คนจะเสมอเปรียบเทียบคุณกับภาษาอื่น ๆ ที่ไม่เป็นธรรม การแก้ไขคือการใช้ภาษาอื่นสำหรับส่วนประกอบที่คุณต่อประสานเข้าด้วยกัน การทำทุกอย่างในภาษาเดียวเป็นเหมือนการใช้เครื่องมือเดียวสำหรับงานทั้งหมด หากสิ่งที่คุณมีคือค้อนทุกอย่างดูเหมือนเป็นนิ้วหัวแม่มือ
Donal Fellows

แนวคิดที่ดีเกี่ยวกับการใช้โมดูลภาษาต่างประเทศเมื่อมีความจำเป็น
stephenmurdoch

>> จะบอกว่า“ Ruby is Slow” โดยไม่ผ่านการรับรอง << สองสามปีที่ผ่านมาพวกเขาอาจจะแสดงโปรแกรม Ruby ที่ช้ากว่าโปรแกรม Tcl :-)
igouy

1
คุณรู้ว่าสิ่งที่พวกเขาพูดเกี่ยวกับโกหกโกหกสาปแช่งและมาตรฐาน ;-)
Donal Fellows

0

ประสิทธิภาพเกือบตลอดเวลาเกี่ยวกับการออกแบบที่ดีและการโต้ตอบกับฐานข้อมูลที่ได้รับการปรับปรุง Ruby ทำในสิ่งที่เว็บไซต์ส่วนใหญ่ต้องการอย่างรวดเร็วโดยเฉพาะอย่างยิ่งรุ่นที่ใหม่กว่า; และความเร็วของการพัฒนาและความสะดวกในการบำรุงรักษาให้ผลตอบแทนมากในค่าใช้จ่ายและในการทำให้ลูกค้ามีความสุข ฉันพบว่า JAVA มีประสิทธิภาพการดำเนินการช้าสำหรับงานบางอย่างและด้วยความยากลำบากในการพัฒนาใน JAVA นักพัฒนาหลายคนสร้างแอปพลิเคชันช้าโดยไม่คำนึงถึงความสามารถด้านความเร็วเชิงทฤษฎีตามที่แสดงในมาตรฐาน (โดยทั่วไปแล้ว เมื่อฉันต้องการการประมวลผลแบบเข้มข้นที่ไม่เหมาะสมกับความสามารถของฐานข้อมูลของฉันฉันเลือก C หรือ Objective-C หรือภาษาที่รวบรวมประสิทธิภาพสูงอื่น ๆ สำหรับงานเหล่านั้นขึ้นอยู่กับแพลตฟอร์ม ถ้าฉันต้องการสร้างแอปพลิเคชันเว็บที่มีฐานข้อมูล ฉันใช้ RoR หรือบางครั้ง C # ASP.NET ขึ้นอยู่กับข้อกำหนดอื่น ๆ เพราะทุกแพลตฟอร์มมีจุดแข็งและจุดอ่อน ความเร็วในการประมวลผลของสิ่งที่แอปพลิเคชันของคุณมีความสำคัญ แต่หลังจากทั้งหมดหากประสิทธิภาพการประมวลผลของภาษาที่แคบลงนั้นเป็นสิ่งที่สำคัญ ถ้าอย่างนั้นฉันก็อาจใช้ภาษาแอสเซมเบลอร์สำหรับทุกสิ่ง


0

ผู้คนบอกว่า Ruby ช้าเพราะเปรียบเทียบโปรแกรม Ruby กับโปรแกรมที่เขียนในภาษาอื่น บางทีโปรแกรมที่คุณเขียนไม่จำเป็นต้องเร็วขึ้น บางทีสำหรับโปรแกรมที่คุณเขียน Ruby อาจไม่ใช่คอขวดที่ทำให้ช้าลง

Ruby 2.1 เทียบกับ Javascript V8

ทับทิม 2.1 เมื่อเทียบกับลัวะธรรมดา

Ruby 2.1 เทียบกับ Python 3


-5

Ruby ทำงานได้ดีสำหรับนักพัฒนาซอฟต์แวร์ ทับทิมโดยกองกำลังธรรมชาติทดสอบการขับเคลื่อนการพัฒนาเพราะขาดประเภท Ruby ทำงานได้ดีเมื่อใช้เป็น wrapper ระดับสูงสำหรับไลบรารี C Ruby ยังทำงานได้ดีในระหว่างกระบวนการที่ใช้เวลานานเมื่อคอมไพล์ด้วย JIT ไปยังรหัสเครื่องผ่าน JVM หรือ Rbx VM ทับทิมทำงานได้ไม่ดีเมื่อจำเป็นต้องทำการบีบตัวเลขในเวลาอันสั้นด้วยรหัสทับทิมบริสุทธิ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.