Ruby 語言常以其靈活性為人所稱道。正如 Dick Sites 所言,您可以 “為了編程而編程”。Ruby on Rails 擴展了核心 Ruby 語言,但正是 Ruby 本身使得這種擴展成為了可能。Ruby on Rails 使用了該語言的靈活性,這樣一來,無需太多樣板或額外的代碼就可以輕松編寫高度結構化的程序:無需額外工作,就可以獲得大量標準的行為。雖然這種輕松自由的行為并不總是完美的,但畢竟您可以無需太多工作就可以獲得很多好的架構。
例如,Ruby on Rails 基于模型-視圖-控制器(Model-View-Controller,MVC)模式,這意味著大多數 Rails 應用程序都可以清晰地分成三個部分。模型部分包含了管理應用程序數據所需的行為。通常,在一個 Ruby on Rails 應用程序中,模型和數據庫表之間的關系是 1:1;Ruby on Rails 默認使用的對象關系映射(ORM)ActiveRecord 負責管理模型與數據庫的交互,這意味著 Ruby on Rails 程序通常都具有(如果有的話)很少量的 SQL 代碼。第二個部分是視圖,它包含創建發送至用戶的輸出所需要的代碼;它通常由 HTML、JavaScript 等組成。最后的一個部分是控制器,它將來自用戶的輸入轉變為正確的模型,然后使用適當的視圖呈現響應。
Rails 的倡導者通常都樂于將其易用性方面的提高歸功于 MVC 范型 — 以及 Ruby 和 Rails 二者的其他一些特性,并稱很少有程序員能夠在較短的時間內創建更多的功能。當然,這意味著投入到軟件開發的成本將能夠產生更多的商業價值,因此 Ruby on Rails 開發愈發流行。
不過,最初的開發成本并不是事情的全部,還有其他的后續成本需要考慮,比如應用程序運行的維護成本和硬件成本。Ruby on Rails 開發人員通常會使用測試和其他的敏捷開發技術來降低維護成本,但是這樣一來,很容易忽視具有大量數據的 Rails 應用程序的有效運行。雖然 Rails 能夠簡化對數據庫的訪問,但它并不總是能夠如此有效。
Rails 應用程序為何運行緩慢?
Rails 應用程序之所以運行緩慢,其中有幾個很基本的原因。第一個原因很簡單:Rails 總是會做一些假設為您加速開發。通常,這種假設是正確而有幫助的。不過,它們并不總能有益于性能,并且還會導致資源使用的效率低下 — 尤其是數據庫資源。
例如,使用等同于 SELECT * 的一個 SQL 語句,ActiveRecord 會默認選擇查詢上的所有字段。在具有為數眾多的列的情況下 — 尤其是當有些字段是巨大的 VARCHAR 或 BLOB 字段時 — 就內存使用和性能而言這種行為很有問題。
另一個顯著的挑戰是 N+1 問題,本文將對此進行詳細的探討。這會導致很多小查詢的執行,而不是一個單一的大查詢。例如,ActiveRecord 無從知道一組父記錄中的哪一個會請求一個子記錄,所以它會為每個父記錄生成一個子記錄查詢。由于每查詢的負荷,這種行為將導致明顯的性能問題。
新聞熱點
疑難解答