Почему в Compiled Heist (Haskell) нужно заранее создавать соединения?
Я могу понять, почему шаблоны HTML (файлы.tpl) должны быть обработаны заранее (с loadTemplates
) и положить в HeistConfig
, Это позволяет Heist заранее обработать HTML в более эффективный формат.
Тем не менее, я не понимаю, почему соединения должны быть созданы заранее и помещены в HeistConfig
, В чем выгода этого? Я не вижу выгоды, потому что соединения все равно вычисляются во время выполнения. Какой мыслительный процесс стоит за этим?
Я думаю, что это может быть связано с тем, что соединение может также выполнять код во время загрузки (в дополнение к времени выполнения). Это основное объяснение?
1 ответ
Функции склейки (скомпилированные и интерпретированные) работают на узлах. Думайте о сростках как имеющих сигнатуру типа Node -> m [Node]
, Это относительно дорогая операция, потому что она работает на уровне DOM. Результирующие узлы соединения вставляются обратно в дерево DOM, затем все дерево должно быть отображено в ByteString. Идея скомпилированного ограбления состояла в том, чтобы выполнить как можно больше этой работы по визуализации во время инициализации приложения. Результат инициализации будет [Chunk]
где Chunk может быть статическим ByteString или динамическим m ByteString
(фактические типы немного отличаются). Скомпилированные соединения должны быть обработаны до того, как инициализация преобразует весь шаблон из [Node]
в [Chunk]
, И чтобы максимизировать эффективность времени выполнения, это преобразование происходит во время инициализации приложения.
Для получения дополнительной информации проверьте эти ссылки:
http://snapframework.com/docs/tutorials/compiled-splices
https://github.com/snapframework/heist/wiki/Compiled-Splice-Formulations