Целесообразность кеширования(ускрорителем) templates_c в Smarty

confguru

ExAdmin
Команда форума
Целесообразность кеширования(ускрорителем) templates_c в Smarty

Возник вопрос - нужно ли кешировать
templates_c - по сути там и так все быстро выполнятся должно..
И не будет забиваться кеш ускорителя.

Проблема в том, если кеш создается кривой - ускоритель падает на нем.
 

magic

lancer
Знатоки рекомендуют использовать только один вид кеширования/ускорения. Причина - использования двух разных алгоритов могут мешать друг другу. В итоге производительность падает.
 

Alexandre

PHPПенсионер
Проблема в том, если кеш создается кривой - ускоритель падает на нем.
мой предшественник создал кривоватый кеш, в результате чего в директории кеширования находилось более 1000 файлов (отчистка одного кеша составляла полдня). Соответственно - начались тормоза.
Причина - использования двух разных алгоритов могут мешать друг другу
Надо так использовать, чтоб они др. др. не мешали. К кешироавнию, вообще надо относиться осторожно, чтоб палку не перегнуть.

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

прорабатывая алгоритмы кеширования, необходимо продумывать и алгоритмы отчистки кеша (например по крону). И это относиттся не только к кешированию в смарти...
 

alexhemp

Новичок
admin

templates_c для работы смарти по любому нужен. Туда генерируются скомпилированные шаблоны, которые собственно и исполняются.

Фактически это php файлы, которые отлично ускоряются акселлератором (т.е. убираем оверхед на компиляцию).

Без него весь смысл компилируемых шаблонов теряется.

Так что нужно изучать, почему падает акселератор. У меня eAccelerator очень стабильно работает.
 

confguru

ExAdmin
Команда форума
Я уже сказал почему он падает, смарти не дозаписывает
кеш правильно. Акселератор етот мусор пытается закешировать и падает с crash.
 

alexhemp

Новичок
Я уже сказал почему он падает, смарти не дозаписывает кеш правильно
Т.е. в templates_c не выполнимые скрипты получаются?
Как Smarty вообще тогда работает?

Приведи пример одного php-файла из кэша смарти, в чем его "кривизна" выражается?

При всем моем уважении, но ведь не просить же тебя прочитать debug :) Раскажи подробно, почему ты решил что кэш не правильно формируется.

Насколько я понимаю у него схема такая - сравнивает timestamp шаблона и его компилированного варианта, если шаблон моложе, компилирует

Потом подключает скомпилированный файл.

В этот момент акселлератор и закэширует результат компиляции (байт-код).

Если не компилируется, ты должен увидеть где-то parse error и тогда речи уже не идет о работе вообще.
А если компилируется, то и байт-код должен без проблем кэшироваться, акселлератору то какая разница?

Другое дело что акселлератор может быть не до конца совместимым с используемой версией PHP и тогда некоторые конструкции языка будут корректно превращаться а байт-код, но при попытке исполнения байт-кода акселлератор будет падать. Такое бывает с eAccelerator и php5.

Тут тоже вопрос нужно ставить не "целесообразно ли кэширование" а "Как пофиксить акселлератор".

Попробуй все-таки понять на каком коде он падает, результирующий php-код генерируемый смарти же имеется.

И тогда можно уже думать что делать - менять акселлератор, писать багрепорт и т.п.

Смарти я думаю тут вообще не причем, разве что как Acid test сработал, не было еще ни разу на моей практике такой проблемы.
 

confguru

ExAdmin
Команда форума
Я уже говорю, там записывается
%%D8^D88^D8879B82%%rules.tpl.php
и все, акселератор это берет и пытается кешит, смарти считает что кешь уже есть и юзает его.
В результате имеем сломанный дизайн, который чинится только очисткой templates_c

-~{}~ 03.03.06 08:58:

P.S. Эффект плавающий кстати, так что трудно выловить.

Вопрос то был в другом - есть ли смысл эту смесь html и php
кешировать и какая потеря производительности если исключить эту папку(по определению она должна выполнятся сама шустро)
 

alexhemp

Новичок
Это нормально, такие и должны быть имена.

Потеря производительности должна быть приличная. Как вариант - переписать алгоритм формирования имен. Какая у тебя платформа?

Смарти с акселлератором вообще никак не связан. Это просто сгенерированные php-скрипты.
 

Alexandre

PHPПенсионер
Насколько я понимаю у него схема такая - сравнивает timestamp шаблона и его компилированного варианта, если шаблон моложе, компилирует

Потом подключает скомпилированный файл.

В этот момент акселлератор и закэширует результат компиляции (байт-код).
насколько я понимаю работу кеширования в смарти, то идет сравнение не компилируемого варианта в templates_c, а с компилируемом варинтом в директории кеша (устанавливается $tpl->template_dir = __SM_TEMPLATES_PATH;
$tpl->compile_dir = __SM_COMPILED_PATH;
$tpl->config_dir = __SM_CONFIGS_PATH;
$tpl->cache_dir = __SM_CACHE_PATH; )

соответственно, путь к скомпилированному шаблону еще и ищется по идентификатору кеширования $my_cache_id , который заложен в алгоритм формирования путей к скешированным файлам.
Код:
$smarty->caching = true;

$my_cache_id = $_GET['article_id'];

if(!$smarty->is_cached('index.tpl',$my_cache_id)) {
	// Кэша нет, поэтому присваиваем значение переменным.
	$contents = get_database_contents();
	$smarty->assign($contents);
}
admin есть управление кешированием или нет? может в этом и вылазиет кривизна.
 

magic

lancer
Автор оригинала: admin
Я уже говорю, там записывается
%%D8^D88^D8879B82%%rules.tpl.php
и все, акселератор это берет и пытается кешит, смарти считает что кешь уже есть и юзает его.
Это не файл кеша. Это откомпилированный шаблон. Файлы кеша выглядят совсем по другому, и расширение у них .tpl.html
 

alexhemp

Новичок
magic

Господа, вы бы хоть топик почитали. У admin падает акселлератор на компилированных шалобнах именно, их и называем "кэшем шаблонов". И "кэшируем" скомпилированные шаблоны PHP-акселлератором.

В общем к терминам не предирайтесь, а топик сначала прочитате.
 

si

Administrator
admin
это проблема eAccel а не смарти как уже тут сказали. для начала укажи какие версии используются, я слышал что он с 5.1 не очень совместим.

-~{}~ 05.03.06 09:23:

В общем к терминам не предирайтесь, а топик сначала прочитате.
к общепринятым терминам придираться стоит чтобы всем было понятно о чем идет речь а не только автору.
 

confguru

ExAdmin
Команда форума
5.1.2
Но проблема не том что он пытается закешировать еще не
дописанный шаблон. И падает на этом, а смарти думает что
кеш у него уже есть - так как файл с муссором присутствует
на диске.
 

alexhemp

Новичок
admin

Ничего не понятно. Если шаблон не дописан, до акселлератора дело не должно доходить, php должен выдавать parse error, акселлератору нечего кэшировать.

Во вторых запись компилированного шаблона происходит во временный файл, который потом переименовывается.
Это описано в internals/core.write_file.php

Поэтому если файл недозаписывается, то проблема в чем-то другом. Возможно акселлератор неверно интерпретирует Smarty_Compiler.php

И давай определимся с терминологией, "кэшем" ты называешь каталог templates_c где хранятся скомпилированные шаблоны?

Скорее всего как я предполагал ранее и как сказал si у тебя проблемы с несовместимостью используемой версии php и акселлератора.

Поставленный вопрос некорректен. Кэшировать байт-код целесообразно всегда, ибо исчезает оверхед на компиляцию при каждом запросе.
У тебя проявляется какой-то баг, то-ли в php, то-ли в eAccelerator то-ли в Smarty, нужно его найти, и либо исправить, либо найти workaround.
 

crocodile2u

http://vbolshov.org.ru
За точность не ручаюсь, но, по-моему, акселератор пока еще глючит на свежих версиях PHP.
 
Сверху