2013-10-26 1 views
0

Я пытаюсь получить голову вокруг скомпилированных сращиваний. С помощью предыдущей справки я могу скомпилировать и сделать некоторые полезные результаты. Я не совсем понимаю, как это работает.Snap: доступ к базам данных с скомпилированными сращиваниями

В интерпретируемом режиме алгоритм прост: постройте root, вызовите функцию обработчика, учитывая отображаемый URL-адрес, вытащите данные из базы данных, постройте и привяжите сращивания из вытащенных данных, вставьте их в heist и вызовите подходящий шаблон.

Все перевернуто в скомпилированном режиме. Я сопоставляю url напрямую с cRender и не вызываю обработчик. Поэтому я предполагаю, что все функции построения сплайсов и обработки данных вызываются во время загрузки.

Так что мой вопрос в том, когда называется база данных? Это происходит и во время загрузки? Это просто последовательность событий, которые я не понимаю.

Поскольку конструкция сплайсинга не зависит от конкретного рендеринга шаблона, означает ли это, что привязывающие метки являются уникальными по всему приложению? Являются ли они глобальными переменными?

Thanks

ответ

3

Да, вы в значительной степени верны. Хотя я бы не сказал, что они похожи на глобальные переменные. Они больше похожи на глобальные константы или глобальный API. Я рассматриваю скомпилированные сращивания как API, которые ваш веб-дизайнер может использовать для взаимодействия с динамическими данными.

Скомпилированные сращивания позволяют вставлять отверстия в вашу разметку, которые заполняются данными во время выполнения. Во время загрузки работающая монада равна HeistT n IO. Но во время выполнения работающая монада равна RuntimeSplice n. Поэтому, если вы посмотрите на скомпилированный API Heist, очень легко увидеть, где должен быть код времени выполнения, такой как функции базы данных: в монаде RuntimeSplice n.

+0

Имеет смысл. Время выполнения и время загрузки в значительной степени понятны. В большом приложении, однако, потребуется довольно много уникальных глобальных констант. Таким образом, у нас могут появиться странные длинные теги для сращивания, такие как «admin_category_users_id», вам не кажется? –

+0

Да. Я думаю, что это неизбежная сложность. – mightybyte

+0

@mightybyte. Но многие из этих тегов будут привязаны к подмножествам, связанным с сращиванием верхнего уровня, используя 'withLocalSplices' и связанные с ним функции. Они не были бы действительно глобальными, не так ли? Возможно, можно было бы даже использовать «фиктивные стыки верхнего уровня», которые просто обернули другие сращивания и работали как замена пространств имен ... это могло бы ухудшить производительность? – danidiaz