我试图了解编译的拼接。通过previouse帮助,我可以编译并呈现一些有用的结果。我不完全理解它的工作方式。
在解释模式下,算法很简单:构造root,给定映射url的调用处理函数,从DB中提取数据,从pull数据中构造和绑定拼接,将它们插入到heist中并调用适当的模板。
在编译模式下,这一切都是颠倒的。我将url直接映射到cRender,而不是调用处理程序。所以我假设在加载时调用所有拼接构造和数据处理函数。
所以我的问题是数据库何时被调用?这是否也在加载时发生? 这只是我不理解的事件序列。
由于拼接结构独立于特定的模板渲染,这是否意味着拼接绑定标签在整个应用程序中是唯一的?它们是全局变量吗?
由于
答案 0 :(得分:3)
是的,你非常正确。虽然我不会说它们就像全局变量一样。它们更像是全局常量或全局API。我将编译的拼接视为您的Web设计人员可用于与动态数据交互的API。
编译的拼接允许您在标记中插入空洞,以便在运行时填充数据。在加载时,正在运行的monad为HeistT n IO
。但在运行时,正在运行的monad是RuntimeSplice n
。因此,如果您正在查看已编译的Heist API,则很容易看到运行时代码(如数据库函数)所在的位置:RuntimeSplice n
monad。