1.導致你的 Rails 應用變慢無非以下兩個原因:
Rails 是個令人愉快的框架,而且 Ruby 也是一個簡潔而優雅的語言。但是如果它被濫用,那會相當的影響性能。有很多工作并不適合用 Ruby and Rails,你最好使用其它的工具,比如,數據庫在大數據處理上優勢明顯,R 語言特別適合做統計學相關的工作。
內存問題是導致諸多 Ruby 應用變慢的首要原因。Rails 性能優化的 80-20 法則是這樣的:80% 的提速是源自于對內存的優化,剩下的 20% 屬于其它因素。為什么內存消耗如此重要呢?因為你分配的內存越多,Ruby GC(Ruby 的垃圾回收機制)需要做的工作也就越多。Rails 就已經占用了很大的內存了,而且平均每個應用剛剛啟動后都要占用將近 100M 的內存。如果你不注意內存的控制,你的程序內存增長超過 1G 是很有可能的。需要回收這么多的內存,難怪程序執行的大部分時間都被 GC 占用了。
2 我們如何使一個 Rails 應用運行更快?
有三種方法可以讓你的應用更快:擴容、緩存和代碼優化。
擴容在如今很容易實現。Heroku 基本上就是為你做這個的,而 Hirefire 則讓這一過程更加的自動化。其它的托管環境提供了類似的解決方案。總之,可以的話你用它就是了。但是請牢記擴容并不是一顆改善性能的銀彈。如果你的應用只需在 5 分鐘內響應一個請求,擴容就沒有什么用。還有就是用 Heroku + Hirefire 幾乎很容易導致你的銀行賬戶透支。我已經見識過 Hirefire 把我一個應用的擴容至 36 個實體,讓我為此支付了 $3100。我立馬就手動吧實例減容到了 2 個, 并且對代碼進行了優化.
Rails 緩存也很容易實施。Rails 4 中的塊緩存非常不錯。Rails 文檔 是有關緩存知識的優秀資料。不過同擴容相比,緩存并不能成為性能問題的終極解決方案。如果你的代碼無法理想的運行,那么你將發現自己會把越來越多的資源耗費在緩存上,直到緩存再也不能帶來速度的提升。
讓你的 Rails 應用更快的唯一可靠的方式就是代碼優化。在 Rails 的場景中這就是內存優化。而理所當然的是,如果你接受了我的建議,并且避免把 Rails 用于它的設計能力范圍之外,你就會有更少的代碼要優化。
2.1 避免內存密集型Rails特性
Rails 一些特性花費很多內存導致額外的垃圾收集。列表如下。
2.1.1 序列化程序
序列化程序是從數據庫讀取的字符串表現為 Ruby 數據類型的實用方法。
class Smth < ActiveRecord::Base serialize :data, JSONendSmth.find(...).dataSmth.find(...).data = { ... }
新聞熱點
疑難解答