Сайт сообщества | Клуб пользователей | О проекте

Имя
Пароль
ПравилаРегистрацияСправка
Сообщения за деньПоиск

Вернуться   Клуб пользователей портальной системы RUNCMS > Опен Ресурс > Разработчикам > Готовые хаки

 
 
Опции темы Опции просмотра
AlexLeonov вне форума AlexLeonov
Arbeit macht Frei

Аватар для AlexLeonov

| Цитировать Старый #1 11-13-2009, 23:07

Подобный метод работает сейчас в Ronny CMS, но с небольшой адаптацией он пригоден и в RunCMS.

Излагаю подробно:

1. Включаем отладку и смотрим на время генерации страницы и количество запросов.

2. Кладем в /include/class/cache.class.php следующий код:
PHP код:
<?php

define
("CORE_CACHE_ROOT"XOOPS_ROOT_PATH "/cache");


class 
TPCache {

    function 
cache($key$callback$arguments=array(), $time=60) {

        
$cacheFile CORE_CACHE_ROOT "/" $key ".cache";

        if ( 
file_exists($cacheFile) && (time() - filemtime($cacheFile) < $time) )
            return 
unserialize(file_get_contents($cacheFile));

        
$content call_user_func($callback$arguments);

        
$f fopen($cacheFile"w");
        
fwrite($fserialize($content));
        
fclose($f);

        return 
$content;

    }

    function 
clearCache($prefix="") {

        foreach ( 
glob(CORE_CACHE_ROOT "/" . ( empty($prefix) ? "" $prefix "_" ) . "*.cache") as $cacheFile )
            
unlink($cacheFile);

    }

}

?>
3. Идем в файл нужного нам блока. Стоит выбирать блоки а/тяжелые по времени исполнения и запросам и б/независящие от пользователей. Идеальные кандидаты - блок последних сообщений на форуме, блоки с деревьями, где используется XoopsTree и так далее.
Вставляем в начало файла код:
PHP код:
<?php

include_once(XOOPS_ROOT_PATH "/class/cache.class.php");

...
4. Проверяем, не сломали ли сайт.

5. Если все ОК, то смотрим, какая именно функция у нас выводит блок. Пусть это будет module_block_blabla_show($options) - запоминаем ее имя.

6. Меняем имя функции module_block_blabla_show на module_block_blabla_get

7. Ниже пишем новую функцию:

PHP код:

function module_block_blabla_show($options) {

  return 
TPCache::cache("module_block_blabla_show""module_block_blabla_get"$options30);


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

8. Проверяем, не сломался ли сайт и повторяем пункт 1.

PROFIT!

P.S. Папка /cache/ должна быть доступна для записи.
P.P.S. Проблема внезапно понадобившейся очистки кэша ложится на веб-мастера, не знаю, как это лучше в RunCMS реализовать...
Оценка сообщения (репутация)
+7 LARK положительно: Хороший хак

Последний раз редактировалось AlexLeonov, 11-13-2009 в 23:15


Ronny CMS? Yes!
Посетить домашнюю страницу AlexLeonov
  Сообщения: 1,243 c 23.06.2004 | Репутация: 108
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Рейтинг@Mail.ru Хостинг провайдер Majordomo. Powered by: vBulletin Version 3.0
Copyright ©2000-2024, Jelsoft Enterprises Ltd.
Все разделы прочитаны - Руководство форума - Архив - Вверх
Rambler's Top100
Output: 374.39 Kb. compressed to 372.59 Kb. by saving 1.80 Kb. (0.48%)
Page generated in 0.16227 seconds with 11 queries