我正在创建一个 template engine benchmark程序。最初,该程序旨在通过返回渲染结果(作为字符串)来测试模板引擎。然而,一些模板作者提出了一个问题,即模板引擎不应返回字符串作为结果,而应接受输出流或编写器实例作为参数并将渲染结果合并到其中。他们声称案例代表了模板引擎正在使用的真实环境。
ASAIK,这种说法并不百分百正确。 Play!Framework(至少 1.x)要求模板引擎返回一个字符串,然后将它们放入输出流中。而且我觉得这样安排也是合理的。想想什么时候如果任何逻辑错误导致你的模板渲染过程失败,如果你的模板引擎直接输出到响应中,那么错误将变得不可恢复。在 Play 中,您有一个很好的机会将响应定向到优雅的系统错误页面,而不是让浏览器运行一半困惑的数据。
另一方面,直接渲染为输出对性能和资源消耗有明显的好处。我很好奇对于模板引擎设计者来说哪一种应该是更好的方法。
最佳答案
写入Writer
,因为这是最低的共同点。为了方便起见,您的算法可能更愿意将其包装在 PrintWriter
中,这样您就可以接受 FileWriter
、OutputStreamWriter
或 StringWriter
.
写入字符串似乎是一个坏主意,因为在实际使用中,您不太可能需要保留整个字符串以进行后期处理,而是让您能够以小的逻辑片段写入或发送文档 - 因此您的内存消耗模式将更加现实。
请记住,如果您接受 Writer,则可以使用 StringWriter 来获取字符串。如果您使用 String,即使 Writer(和流 API)就足够了,您也将被迫永远分配该内存。
关于java - 模板引擎应该渲染到输出流还是返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14518389/