несколько вопросов по кэшиованию в Смарти.

CMD

Новичок
несколько вопросов по кэшиованию в Смарти.

Привет.
Купил кмс - KOOBI, неприятно удивился среднему количеству запросов к мускулу в среднем 100-150 на страницу.
Роюсь в настройках системы - используется смарти - в кэш директории сохраняются только файлы типа -
54s6^5f4sdf65s4f6^8s4f6d5f^4s8df4сомепаге.tlp.php
внутри у них все к примеру так -

PHP:
<?php /* Smarty version 2.6.9, created on 2005-10-20 02:36:00
         compiled from standard/download/downloads_top_last_start.tpl */ ?>
<?php require_once(SMARTY_CORE_DIR . 'core.load_plugins.php');
smarty_core_load_plugins(array('plugins' => array(array('modifier', 'strip_tags', 'standard/download/downloads_top_last_start.tpl', 10, false),array('modifier', 'truncate', 'standard/download/downloads_top_last_start.tpl', 10, false),)), $this); ?>
<?php if ($this->_tpl_vars['downloads']): ?>
<div class="box_inner">
  <div class="box_innerhead"><?php echo $this->_tpl_vars['typ']; ?>
</div>
</div>
<?php $_from = $this->_tpl_vars['downloads']; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); }if (count($_from)):
    foreach ($_from as $this->_tpl_vars['download']):
?>
  <div class="row_first" style="padding:3px"> <img src="<?php echo $this->_tpl_vars['img_folder']; ?>
/quicklink.gif" alt="" border="0" class="absmiddle" /> <a href="index.php?showfile=1&amp;fid=<?php echo $this->_tpl_vars['download']->id; ?>
&amp;p=downloads&amp;area=<?php echo $this->_tpl_vars['area']; ?>
&amp;categ=<?php echo $this->_tpl_vars['download']->catid; ?>
"><?php echo $this->_tpl_vars['download']->title; ?>
</a> </div>
 
  <div class="row_second" style="padding:5px">
  <?php echo $this->_tpl_vars['download']->ctime; ?>
 | <?php echo $this->_tpl_vars['download']->hits; ?>
 Hits <br />
  <?php echo ((is_array($_tmp=((is_array($_tmp=$this->_tpl_vars['download']->text)) ? $this->_run_mod_handler('strip_tags', true, $_tmp) : smarty_modifier_strip_tags($_tmp)))) ? $this->_run_mod_handler('truncate', true, $_tmp, 80) : smarty_modifier_truncate($_tmp, 80)); ?>
 </div>
 
 <?php endforeach; endif; unset($_from); ?>
<?php endif; ?>
покопался еще чуть чуть доках
$this->caching = 2;
в итоге после рефреша странички в папке с кэшем появились такие файлы *.tlp ( раньше там были только *.tlp.php)
выглядят примерно так нарпимер:

PHP:
168
a:4:{s:8:"template";a:1:{s:46:"standard/download/downloads_top_last_start.tpl";b:1;}s:9:"timestamp";i:1129918812;s:7:"expires";i:1129922412;s:13:"cache_serials";a:0:{}}<div class="box_inner">
  <div class="box_innerhead">Nowe pliki</div>
</div>
  <div class="row_first" style="padding:3px"> <img src="templates/standard/img/page/quicklink.gif" alt="" border="0" class="absmiddle" /> <a href="index.php?showfile=1&amp;fid=1&amp;p=downloads&amp;area=1&amp;categ=3">WinRar</a> </div>
 
  <div class="row_second" style="padding:5px">
  29-09-2005, 00:49:01 | 1405 Hits <br />
     
 
 
     sing WinRAR puts you ahead of the crowd when it comes to... </div>
ну тут я повеселел. видно что тут уже только хтмл , т.е. кэш, т.е. никаких запросов в бд по идее быть не должно...
И вот тут я не уверен. Как мне проверить используются ли эти новые кэш (*.tlp) файлы?
И если нет, то что искать? куда копать?

10x

-~{}~ 22.10.05 02:53:

вы уж товарищи простите меня за тупость.
вот это хз почему работает странно:

Код:
if(!$tmpl->is_cached('box.tpl')) {
        $sql = $db->Query("SELECT url,hits,name,image,id FROM " . PREFIX . "_affiliates $dbwhere order by posi ASC");
		$num = $sql->fetchrow;
		$items = array();
		while ($item = $sql->fetchrow()) {
			array_push($items, $item);
		}
		$tmpl->assign('lang', $lang);
		$tmpl->assign('area', $area);
		$tmpl->assign('items', $items);
		$tmpl->cache_lifetime = 20;
		$tmpl->caching = 2;
		echo $tmpl->fetch("$THEME/affiliates/box.tpl");
в кэше есть темплейт box.tpl (%%76^76F^76FD5D16%%box.tpl), и берется он оттуда - это проверено физически (написал слово ТЕСТ в кэш файле - и оно появилось на сайте и не пропало пока не закончилось время жизни кэша)
но почему запрос к мускулу все развно исполняется? это единственое место где есть этот скуль запрос.
пользователь получет данные из кэш файлa, но в мускул; запросы всеравно идут

-~{}~ 22.10.05 04:07:

кажется понял... все дело в функции котороя проверяет наличие кэша -
1) имя файла с кэшем не box.tlp a %%76^76F^76FD5D16%%box.tpl
не уверен на 100% что это может быть причиной...
2) функция не знает где искать...

хз , правда , пора наверное убица ап башню или на худой конец утапица....

а запросы все идут :(

SELECT url,hits,name,image,id FROM koobi4_affiliates WHERE area='1' order by posi ASC

Time in DB::0.000694
FullTime in DB::0.121425
Query No.::111
 

magic

lancer
Прочитай сначала как кешироание работает.
http://smarty.php.net/manual/ru/caching.php
http://smarty.php.net/manual/ru/variable.caching.php
 

CMD

Новичок
Автор оригинала: magic
Прочитай сначала как кешироание работает.
http://smarty.php.net/manual/ru/caching.php
http://smarty.php.net/manual/ru/variable.caching.php
доки скачал давно и перечитал доль и поперек (в разделе кэширование)
у меня ведь работает - кэш показываетса юзеу, кэш живет столько сколько мне нужно. НО кэш не проверяется на присутствие т.е. финкция is_cached не работает у меня :(
 

CMD

Новичок
Брр не понял? 150 это мало чтоли? 10 соединений и это уже ~1500 запрсов к бедному мускулу. да и вообще сейцяс время генерации на сервере состовляет 0.50 секунды, помоему это очень много для сервера с нулевой загрузкой
 

Paxan

Новичёк
CMD
Вот именно, что это ОЧЕНЬ много. Мне кажется, что при более-менее большой загрузке всё это дело попросту ляжет.
 

CMD

Новичок
товарищи не надо меня пинать. я пока начинающий программер , пытаюсь улучшить то что сделал товарищ dream4.de
мне нужна помощь а не упреки. :) я прекрасно понимаю что запросов к базе идет неменр'ано и из этих 150 реально закэшировать около 130, там идут запросы напримерна последние новости последние темы на форуме, настройки сайта которые можно сказать никогда не меняются.
 

Paxan

Новичёк
Сложно помочь не зная системы. А по поводу кеширования в Смарти тебя правильно отправили - в мануал. Телепатов к сожалению тут еще нет =(
 

alexhemp

Новичок
Слушай, а они что - каждую строку из базы читают отдельным запросом? Вместо того чтобы сделать типа
SELECT * FROM config
и затолкать настройки в ассоциативный массив?

У меня вот обычно сколько блоков - столько и запросов
Максимум 10-15 запросов для главной страницы, у остальных меньше-больше в зависимости от навороченности

Чтобы что-то улучшить, нужно посмотреть на то, что там делается.

Кэширование сгенерированного контента кстати требует обращения к базе для проверки его изменения, так что от запросов обычно никуда не уйти.
 

Paxan

Новичёк
Кэширование сгенерированного контента кстати требует обращения к базе для проверки его изменения, так что от запросов обычно никуда не уйти.
Есть кеширование на время.
 

CMD

Новичок
да кэш в файлах , у каждого свое время жизни.
вобщ решение пришло - модификация дб класса(нашелся хоший человек) , не через смарти так так.
 

t3[0one]

Новичок
где то нарвался на кусочек кода.
Стоит 20 секунд хранения кеша. Имхо для чего тогда вообще кеш.
Имхо чистить НУЖНЫЙ кеш надо только тогда когда это надо, вот тогда будет толк =)И информация будет обновлятся моментально , и не будет лишних нагрузок.
 

CMD

Новичок
Сейчас кэш работает примено так:
PHP:
$sql = $db->Query("SELECT url,hits,name,image,id FROM " . PREFIX . "_affiliates $dbwhere order by posi ASC",18000,true);
т.е. просто в конце запроса добавляем время в секундах (либо -1 если постоянный кэш) сколько хранить кэш. все далее модификации в бд класе позволили на проверку есть ли актуальный кэш , если есть то читаем если нет то создаем.
запросов из 150 сталов среднем 30, время генерации страницы пока все еще не маленькое - 0.3 секунды, есть над чем поработать :(

-~{}~ 25.10.05 23:37:

>Стоит 20 секунд хранения кеша. Имхо для чего тогда вообще кеш.

20секунд было для примера. там есьт очень много простых запросов но они выполняются по 5 раз (некоторые) например проверки группы юзера в разных функциях, это конечно криво, но проще закэшировать чем остаить как есть или переписывать функции
 
Сверху