LINUX.ORG.RU

Кеширование/компиляция шаблонов в самописном шаблонизаторе

 ,


0

2

Расскажите про сабж. Всё, что нагуглил - использование встроенного в шаблонизаторы кеширования, использование memcache и т.д. или каких-либо готовых модулей/классов.

Интересует конкретно реализация в шаблонизаторе кеширования/компиляции шаблонов. В идеале - теория с примерами.

Наставьте на путь истинный!

P.S. Есть несколько идей, но хотелось бы рассмотреть варианты.

★★

Последнее исправление: VeroLom (всего исправлений: 2)

Ну как. Парсятся шаблоны, по ним генерируется php-код. Который сохраняется куда тебе удобней. И выполняется. При следующем запросе проверяются последние даты обновления кэша, если они старее, чем шаблон, парсятся по новой, если нет - тупо выполняется и всё.

anonymous
()
Ответ на: комментарий от VeroLom

А в перле / питоне такое нужно? Там же сайты работают в режиме демона. Один раз сайт запустил, шаблон распарсился и живет себе во оперативке. Или я что-то не так знаю?

sphericalhorse ★★★★★
()

Проще всего сделать так: транслировать шаблон в код твоего языка, код скормить интерпретатору и пусть он уже юзает свои кэши и оптимизации аля-jit. К примеру jsp и jinja2 так делают.

dizza ★★★★★
()

Интересует конкретно реализация в шаблонизаторе кеширования/компиляции шаблонов. В идеале - теория с примерами.

вот пример:

был шаблон (в текстовом файле) например такой:

<h1>hello my <% if (is_guest()) { %> ugly <% } else { %> super <% } %> friend!</h1>
<p>your name is {{ escape(name) }}.</p>

шаблонизатор при первом (и только один раз! вот в чём суть кэша) обращении — превращает этот текст в код на языке программирования (допустим Javascript):

tpl_print('<h1>hello my '); if (is_guest()) { tpl_print(' ugly '); } else { tpl_print(' super '); } tpl_print(' friend!</h1>
<p>your name is  '); tpl_print( escape(name) ); tpl_print('. </p> ');

затем этот скомпилированный код сохраняется в оперативку и постоянно делается его eval(), при обращению к шаблону ! [ лучше конешно — не eval() а вот это — developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function ] :)

тоесть алгоритм компиляции крайне простой:

1. всё что находяится НЕ внутри <% ... %> и {{ ... }} (или ещё какие спец скобки) — всё это при компиляции должно быть экранированно внутрь строки и выведено в нутрь некой функции [в нашем случае функция называется tpl_print(...) ].

2. всё что находится в <% ... %> (или другой вид скобок, если нравится другой :)) — копируется в скомпилированный код — как есть.

3. ... ... ... (и т д) ...

anonymous
()
Ответ на: комментарий от dizza

Если шаблон парсится тупым самопальным интерпретатором, то будет парсится каждый раз.

Что мешает добавить компиляцию шаблонов в «тупой самопальный интерпретатор»?

VeroLom ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.