在 ratpack 中加载和编译模板:阻塞与否?

loading and compiling template in ratpack: blocking or not?

我正在为我的 ratpack 应用程序添加 Pebble template 支持,有一件事困扰着我:我的 RendererSupport 实例是否应该使用 ratpack 的 Blocking.get()?由于 PebbleEngine 有它自己的缓存,我不能说它是否会从磁盘加载模板源,所以它(可能)是一个 IO 操作。 查看 handlebars 模板实现,我看不到 IO 操作的任何特殊处理。

所以我的问题是:对所有潜在的 IO 绑定操作(例如文件系统或数据库访问)使用 Blocking 是经验法则,还是有一些更复杂的规则?

如果 Pebble 的缓存是不确定的(Handlebars 的缓存是不确定的)那么我会说你可以像 Ratpack 的 Handlebars 集成一样做 - 取决于缓存和 运行 可能加载的代码计算线程上的磁盘模板。每次第一次加载模板时,您都会付出性能损失(因为您将 运行 阻塞计算线程上的代码),但它会随着缓存覆盖率的增加而消失。

请注意,跟踪器中有 an issue 旨在通过预编译模板消除 Handlebars 集成的性能损失,从而在启动时填充缓存。