1

在 Rails 中,我们通常会遇到从视图(甚至是助手)触发一些查询的情况。例如,如果我想在我的页面中添加一个选择框,我会写如下内容;

<%= collection_select(:person, :city_id, City.all, :id, :name) %>

这个例子取自 Rails Guides。在这里,我们使用了“City.all”而不是实例变量。我的问题是,这会对我的应用程序的性能产生任何影响吗?

以下是做同样事情的更好方法吗?为什么?
在控制器中:

@cities = City.all

然后在视图中:

<%= collection_select(:person, :city_id, @cities, :id, :name) %>
4

2 回答 2

1

实际上是有区别的,有时甚至是必不可少的。渲染速度(响应时间)很大程度上取决于注入的密集查询。解释为什么会发生这种情况可能很乏味,但将其作为一个规则更容易:以这种方式设计您的应用程序,其中 ActionView 与准备好的(加载到内存中的)对象一起工作。

而且我认为 ActionView - 是 Rails 的一大瓶颈(尤其是 ERB 编译)。

于 2012-12-27T15:56:00.463 回答
1

它不会对应用程序本身产生特殊影响,无论是视图还是控制器,因为对于系统而言,它只是一样 --> 发出查询。但这是一种根本不被鼓励的做法,那么代码隔离和模块化的整个概念就会被折腾。

出于这个原因,我建议在视图中的查询上使用实例变量。

于 2012-12-27T13:05:09.070 回答