Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Nâng cấp Ruby 2.1 mang lại phản hồi server nhanh 15-20% và GC gần như bằng 0

Tôi sẽ trả lời bằng một screenshot:

{% img img-responsive /images/posts/ruby-2-1-improvement.png 645 259 Tôi gọi đó là một yes lớn %}

Chúng tôi nâng cấp từ Ruby 1.9 lên 2.1 trong production khoảng một tuần trước, và đây là thứ chúng tôi thấy. Phần xám ở dưới là GC time giảm gần như bằng 0. Tổng thể, nâng cấp cho chúng tôi cải thiện 15-20% server response time. Đó là mà không cần tuning GC thêm!

Chúng tôi thấy boost lớn trong crawl rate của Google và Bing sau khi ship upgrade, điều đặc biệt tuyệt vời cho site như chúng tôi hưởng lợi lớn từ search engine traffic.

Hay, vậy nó khó không?

Trên Rails app lớn với gần 150 gem dependency, upgrade chỉ tốn một commit nhỏ và vài ngày test. Chúng tôi chạy rvm trên tất cả server và provision với chef, nên upgrade tất cả server lên 2.1 đơn giản như đổi version number trong chef role file.

Vấn đề gặp phải là gì?

Chúng tôi vẫn dùng iconv cho transliteration, nên phải include iconv gem, thay thế built-in functionality bị gỡ từ 2.x. Tôi không bao giờ làm ruby-debug hoặc debugger gem chạy dưới 2.x, nên chuyển sang pry và pry-byebug. Tôi vẫn thích debugger gem hơn pry-byebug, nhưng pry tốt hơn irb nhiều nên kiểu như hòa. Deivid Rodriguez, tác giả byebug, chỉ ra vấn đề pry-byebug của tôi có lẽ không do byebug. Hoàn toàn đúng! (thực ra do interaction giữa byebug và pry).

Trong môi trường 1.9 và 2.1 mixed, bạn cũng phải upgrade bundler lên 1.5.1. Với bundler mới, bạn có thể chỉ định 2.1 làm platform requirement trong Gemfile:

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

Nghe nói GitHub gặp vấn đề khác với 2.1, được nhắc bởi Aman Gupta trong gist: https://gist.github.com/tmm1/8393897, nhưng chúng tôi chưa thấy vấn đề.

Bạn cũng sẽ muốn tune GC sau khi ship để có thêm tốc độ. Aman có bài tốt với chi tiết cách làm: https://tmm1.net/ruby21-rgengc/. Toàn bộ series 2.1 trên blog của anh ấy đáng đọc nếu bạn muốn tận hưởng tối đa từ upgrade Ruby rẻ và đơn giản này.