在Rails中,我們通常會遇到一些從Views(甚至幫助程序)中觸發一些查詢的情況。例如,如果我想在我的頁面中添加一個選擇框,我會寫一些像;在rails視圖中查詢對性能的影響
<%= collection_select(:person, :city_id, City.all, :id, :name) %>
本示例從Rails指南中獲取。在這裏我們使用了「City.all」而不是一個實例變量。我的問題是,這會對我的應用程序的性能產生什麼影響嗎?
下面是做同樣事情的更好方法嗎?爲什麼?
在控制器:
@cities = City.all
然後在訪問量:
<%= collection_select(:person, :city_id, @cities, :id, :name) %>
你可以試着解釋爲什麼是這樣嗎? – Vignesh
只要請求發送,ActionView實例就會立即初始化。方法執行時,所有變量都會同時初始化。因此運行時有一個經濟。但是如果內部視圖模板有些沉重,所有的操作都是一致的,渲染花費更多的時間來生成響應體。我用幾次重大的查詢來測試它幾次,並且響應時間的差異是顯而易見的(減慢2-3倍)。 –