Danilka, у меня в подписи ссылка на фреймворк с компилирующим/кеширующим шаблонизатором на PHP. Все просто летает, а возможности такие, что "голому" ПХП или Блицу и не снились.
Hight Статический HTML файл кешировать смысла нет - он годится только для конкретного запроса, а для другого посетителя этот же файл будет уже другим. (Подразумевается, что мы не говорим о полностью статических сайтах - для таких шаблонизаторы нафиг не нужны, достаточно SSI.) Кешироваться должна некая промежуточная структура, которую не нужно парсить на предмет специальных тегов и структур, но и которая сохраняет динамику страницы. При обработке запроса эта структура извлекается из кеша, в нее подставляются данные и получается готовый HTML.
Ладно, а как тогда определить то место, когда полуготовую страницу уже нужно кешировать? Пример: Есть объект $TPL. В него, по мере выполнения скрипта передаются разные параметры. Будь то переменные или массивы или ещё что-нибудь. Потом, или сначала, Говорится какой файл нужно парсить ($TPL -> load_tpl( 'main.tpl' ); ). После всей этой процедуры вызывается echo $TPL -> parce(); Теперь вопрос: Когда темлейт узнает, что нужно закешировать или достать из кэша страницу? Я вижу только два возможных варианта: 1. "Кешируется", хотя это не кеш. Только подготовленный шаблон. То есть исполняются шаблонные команды, к примеру подгрузка других файлов. main.tpl = " {{load_tpl="header.tpl"}} Main page content with template variables here {{load_tpl="footer.tpl"}}". Такой вариант ничего, но сомнителе. Будет ле кеширующий запрос в бд быстрее подгрузки. Зависит от реализации. Да и плюс к тому, сбор шаблонов в один есть даже в том же блитзе. 2. Перед началом парсинга, шаблон берёт все переденные параметры, собирает в кучу, сортирует и с помощью хеш функции генерирует хеш ключ, по которому уже ищет или вставляет в бд страницу. Этот подход на мой взгляд тоже ничего, но если ты знаешь за ранее, что на странице будет что-то часто меняться, то же время. То бесполезные кеширующие запросы будут только всё тормозить и забивать бд в пустую. Так и как кешируются динамические страницы?
Danilka Намек: а зачем напрямую вызывать у шаблонизатора метод parse()? Ведь парсинг шаблона - это самая медленная стадия его обработки. Давай вызывать метод, скажем, process(), передавая ему имя файла с исходным шаблоном, а уж он сам будет решать, надо ли этот файл брать и парсить его с нуля, или можно где-то подцепить уже обработанный и закешированный вариант. И заодно вопрос: Блиц каждый раз будет заново читать и обрабатывать все шаблоны, необходимые для сборки текущей страницы? Если да, то это нерационально (мягко говоря).
>На той странице, на которую, ты дал ссыль написано, что не используется на страницах с гет пост запросами и использованием сессий. где это там такое написано? о_0
Никак, кэширование - это чушь. Шаблонизаторы типа смарти и http://tony2001.phpclub.net/doc/php-templates/ru/ тоже чушь.
Да. Ладно, тогда расскажи алгаритм, как кешировальщик узнает где и какую страницу взять? Откудова он знает что переменную с временем можно заменить в уже прокешированной странице в последнюю очередь? А до того, как заменит, что её нужно закешировать без этой переменной, если в кеше не нашлось такой страницы?
dark-demon, тот же вопрос, что и Dagdamor. Откудова кеш будет знать, что я использую в скрипте? Допустим, что все условия открытия страницы совпадают. К примеру вот эта ветка форума. Всегда одинаковые переменные гет, пост, сессии. А в бд добавлена запись. Как кешер должен узнать, что она там появилась? И что ему открывать, файл или перепарсить заного?
Нет, в файлы. Мне нравятся файлы с расширением tpl. Удобно и приятно. Простенький шаблонизатор-парсилка всяких {чотатам} на значения с функцией выборки шаблонов в буфер решает все проблемы. Быстрее только ракеты летают.
Вобщем тут об этом и говорим. Тот же блитз именно этим и занимается. Только в отличие от "простенькой шаблонизатор-парсилки" работает намного быстрее. И тему собственно создал с целью замены самописного класса парсинга на пыхе, чем-нибудь более быстродейственным.
Вы наркоманы, блин... Почитайте про Conditional Get, для начала. Это базовая весчь в HTTP. Реализовать ее не сложно. Потом читайте про кеширование php в виде опкодов, и про то, как это можно кешировать в память. Не совсем... шаблонизация - это идеология. Это отделение кода от предствления. И поверьте, иногда разумнее пожертвовать лишними 10 баксами в месяц на доп. память на сервере, чем отказыватся от шаблонизации на различных движках. Это не теория, это практика.
Приложения надо проектировать так, чтобы не прикручивать к ним всяких монстров типа смарти. Как говорится - php - лучший шаблонизатор. upd. нафиг я влез в это обсуждение... ухожу.
Про conditional GET - http://softwaremaniacs.org/blog/2007/08 ... get-bites/ Дык. Инструмент - это лишь инструмент.
Danilka, APC кэширует байткод. будь то программа на языке программирования php или же шаблон на языке шаблонов php. то, что получится в результате подстановки динамических данных он естественно не кэширует.
Conditional Get, не плохо и действительно необходимо в некоторых случаях. Но опять же, распростроняется только на одного юзера. А кеш со стороны сервера действует на всех. В идеальном варианте было бы применить оба случая.
[уходя писать идеальный инструмент] кстати, у меня новая блаж - труъ язык программирования являющийся помесью ады, питона, яваскрипта и хмл ^_^
не, микрософтовская поделка - это совсем не то... если интересно, то приглашаю к обсуждению: http://php.ru/forum/viewtopic.php?p=71617#71617
Ну и что, может кто-нибудь по человечески объяснит, как можно закешировать страницу, зависящую от постоянно изменяющейся БД? Или как шаблонизатор должен узнать о том, какую переменную нужно в кеш кидать, а какую заменять после достования из кэша?
Ну и что, может кто-нибудь по человечески объяснит, зачем кешировать страницу, которая динамически изменяется?