Ruby on rails 模板流在Rails中是如何工作的?

Ruby on rails 模板流在Rails中是如何工作的?,ruby-on-rails,streaming,lazy-evaluation,Ruby On Rails,Streaming,Lazy Evaluation,在Rails API文档中,这里介绍了有关流模板的内容 何时使用流媒体 对于轻量级操作,流式传输可能被认为是一种过度杀伤力 喜欢新建或编辑。流媒体的真正好处在于价格昂贵 例如,对数据库执行大量查询的操作 在这种操作中,您希望尽可能延迟查询的执行 可以例如,想象以下仪表板操作: def dashboard @posts = Post.all @pages = Page.all @articles = Article.all end 这里的大多数查询都发生在控制器中。为了 从流媒体中获

在Rails API文档中,这里介绍了有关流模板的内容

何时使用流媒体

对于轻量级操作,流式传输可能被认为是一种过度杀伤力 喜欢新建或编辑。流媒体的真正好处在于价格昂贵 例如,对数据库执行大量查询的操作

在这种操作中,您希望尽可能延迟查询的执行 可以例如,想象以下仪表板操作:

def dashboard
  @posts = Post.all
  @pages = Page.all
  @articles = Article.all
end
这里的大多数查询都发生在控制器中。为了 从流媒体中获益您可能希望将其改写为:

def dashboard
  # Allow lazy execution of the queries
  @posts = Post.all
  @pages = Page.all
  @articles = Article.all
  render stream: true
end 
请注意:流仅适用于模板。使用:stream呈现:json或:xml将不起作用


我不明白的是,使用
stream:true
选项将如何使查询通过延迟执行?这里的查询是在render方法之前调用的,所以这一切是如何工作的?

默认情况下,这些查询已经是惰性的,而不管
render stream:true
。这就是
模型的工作原理。所有的
都是这样的。直到调用触发查询实际运行的方法(例如,在rails控制台中运行此代码时,
inspect
)。看

另外,值得一提的是,我认为流式模板渲染在rails 3中是可选的,但在rails 4中是默认的