在 Compiled Heist (Haskell) 中,为什么必须事先创建拼接?
In Compiled Heist (Haskell), why must splices be created beforehand?
我能理解为什么 HTML 模板(.tpl 文件)必须预先处理(使用 loadTemplates
)并放入 HeistConfig
。这允许 Heist 预先将 HTML 处理成更有效的格式。
但是,我不明白为什么拼接也必须事先创建并放在HeistConfig
里面。这样做有什么好处?我看不到好处,因为无论如何拼接都是在运行时计算的。这背后的思考过程是什么?
我想这可能是因为拼接也可以在load-time(除了运行时)执行代码。这是主要的解释吗?
拼接函数(编译和解释)在节点上运行。将拼接视为具有 Node -> m [Node]
的类型签名。这是一个相对昂贵的操作,因为它在 DOM 级别运行。拼接的结果节点被插入回 DOM 树中,然后必须将整个树呈现为 ByteString。 compiled heist 背后的想法是在应用程序初始化时尽可能多地预先完成这种渲染工作。初始化的输出将是 [Chunk]
,其中 Chunk 可以是静态 ByteString 或动态 m ByteString
(实际类型略有不同)。在初始化将整个模板从 [Node]
转换为 [Chunk]
之前,必须处理已编译的拼接。为了最大限度地提高运行时效率,转换发生在应用程序初始化时。
有关更多信息,请查看这些链接:
http://snapframework.com/docs/tutorials/compiled-splices
https://github.com/snapframework/heist/wiki/Compiled-Splice-Formulations
我能理解为什么 HTML 模板(.tpl 文件)必须预先处理(使用 loadTemplates
)并放入 HeistConfig
。这允许 Heist 预先将 HTML 处理成更有效的格式。
但是,我不明白为什么拼接也必须事先创建并放在HeistConfig
里面。这样做有什么好处?我看不到好处,因为无论如何拼接都是在运行时计算的。这背后的思考过程是什么?
我想这可能是因为拼接也可以在load-time(除了运行时)执行代码。这是主要的解释吗?
拼接函数(编译和解释)在节点上运行。将拼接视为具有 Node -> m [Node]
的类型签名。这是一个相对昂贵的操作,因为它在 DOM 级别运行。拼接的结果节点被插入回 DOM 树中,然后必须将整个树呈现为 ByteString。 compiled heist 背后的想法是在应用程序初始化时尽可能多地预先完成这种渲染工作。初始化的输出将是 [Chunk]
,其中 Chunk 可以是静态 ByteString 或动态 m ByteString
(实际类型略有不同)。在初始化将整个模板从 [Node]
转换为 [Chunk]
之前,必须处理已编译的拼接。为了最大限度地提高运行时效率,转换发生在应用程序初始化时。
有关更多信息,请查看这些链接:
http://snapframework.com/docs/tutorials/compiled-splices
https://github.com/snapframework/heist/wiki/Compiled-Splice-Formulations