Output Buffer & Streaming Buffer

普通字符串使用 html_safe 后就变成了 Safe Buffer 的实例对象。

Output Buffer 继承于 Safe Buffer,它封装了一些方法,Rails 视图里使用的就是它。

html_safe? 和 Safe Buffer 并不是一对一关系,所以会出现 Safe Buffer 实例对象的 html_safe? 为 false 的情况(这同样影响了子类 Output Buffer);并且视图里字符串拼接(concat)对性能也会有影响。

基于种种原因,和 Output Buffer 相对的引入了 Streaming Buffer,但它以'流'的形式传递数据到客户端,并且它不继承于 Safe Buffer,所以绕开了一些问题。

举例: 使用"Capture Helper",会用到"Output Buffer"; 而使用"Streaming Template Renderer",则会用到"Streaming Buffer"。

参考

YAGNI methods slow us down ActionView Safe Buffer

最后更新于