Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

ฉันควรอัพเกรดเป็น Ruby 2.1 หรือไม่

ฉันจะตอบด้วยภาพหน้าจอ:

{% img img-responsive /images/posts/ruby-2-1-improvement.png 645 259 ฉันจะเรียกมันว่าใช่มาก %}

เราอัปเกรดจาก Ruby 1.9 เป็น 2.1 ในการผลิตเมื่อประมาณหนึ่งสัปดาห์ที่แล้ว และนี่คือสิ่งที่เราเห็น ส่วนสีเทาที่ด้านล่างเป็นเวลาเก็บขยะของเราแทบจะไม่มีอะไรเลย โดยรวมแล้ว การอัปเกรดทำให้เวลาตอบสนองของเซิร์ฟเวอร์ดีขึ้น 15-20% ในสหรัฐอเมริกา โดยไม่ต้องทำการปรับจูน GC เพิ่มเติม!

เราเห็นการเพิ่มขึ้นอย่างมากในอัตราการรวบรวมข้อมูลของ Google และ Bing หลังจากจัดส่งการอัปเกรด ซึ่งยอดเยี่ยมมากสำหรับไซต์เช่นไซต์ของเราซึ่งได้รับประโยชน์อย่างมากจากปริมาณการใช้เครื่องมือค้นหา

เจ๋งมาก มันยากขนาดไหน

ในแอป Rails ขนาดใหญ่ที่มีการขึ้นต่อกันของอัญมณีเกือบ 150 รายการ การอัปเกรดใช้คอมมิตเล็กๆ เพียงครั้งเดียวและการทดสอบสองสามวัน เรารันบนเซิร์ฟเวอร์ทั้งหมดของเราและจัดเตรียม withchef ดังนั้นการอัปเกรดเซิร์ฟเวอร์ทั้งหมดของเราเป็น 2.1 นั้นง่ายพอๆ กับการเปลี่ยนหมายเลขเวอร์ชันในไฟล์บทบาทของเชฟ

เราพบปัญหาอะไรไหม

เรายังคงใช้ iconv สำหรับการทับศัพท์ ดังนั้นเราจึงต้องรวม theiconv gem ซึ่งมาแทนที่ฟังก์ชันในตัวที่ถูกลบออกจาก 2.x ฉันไม่เคยได้รับ getruby-debug หรือ the debugger gem ที่ทำงานภายใต้ 2.x ดังนั้นเราจึงเปลี่ยนไปใช้ pry andpry-byebug ฉันยังคงชอบอัญมณีดีบักเกอร์มากกว่าการแงะบาย แต่การแงะนั้นดีกว่า irb มากจนเป็นการซักแบบหนึ่ง Deivid Rodriguez ผู้เขียนของ byebug ชี้ให้เห็นว่าปัญหาของฉันกับ pry-byebug ไม่น่าจะเกิดจาก byebug เขาพูดถูก! (อันที่จริงมันเกิดจากการโต้ตอบระหว่าง byebug และ pry) .

ในสภาพแวดล้อมแบบผสม 1.9 และ 2.1 คุณจะต้องอัปเกรดบันเดิลเป็น 1.5.1 ด้วย ด้วยบันเดิลเวอร์ชันใหม่ คุณสามารถระบุ 2.1 เป็นข้อกำหนดของแพลตฟอร์มใน Gemfile ของคุณ:

gem 'iconv', '~> 1.0.2', :platform => [:mri_20, :mri_21]

ดูเหมือนว่า GitHub จะประสบปัญหาอื่นๆ กับ 2.1 ที่ Aman Gupta กล่าวถึงในส่วนสำคัญนี้:https://gist.github.com/tmm1/8393897 แต่เรายังไม่พบปัญหาใดๆ

คุณจะต้องปรับแต่ง GC หลังจากคุณจัดส่งเพื่อให้ได้ความเร็วที่มากขึ้น Aman มีโพสต์ที่ดีพร้อมรายละเอียดมากมายเกี่ยวกับวิธีการทำ:https://tmm1.net/ruby21-rgengc/ ซีรีส์ 2.1 ทั้งหมดบนบล็อกของเขามีค่าควรแก่การอ่าน หากคุณต้องการรับประโยชน์สูงสุดจากการอัปเกรด Ruby แบบง่ายราคาถูก