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

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

Вернуться   Клуб пользователей портальной системы 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
LARK вне форума LARK
[исход]

Аватар для LARK

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

Удобная функция, и не только для блоков.

Чтобы не было путаницы (для тех кто только знакомится с RUNCMS) добавлю, что в версии 1.6 - 1.6.2 блоки можно кэшировать, указав в xoops_version.php для каждого блока

PHP код:
$modversion['blocks'][]['cache_time']  = время
А в версии 1.6.3 время кэширования можно настраивать в админке, в настройках конкретного блока.

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


Правила нашего Форума :: О клубе пользователей RUNCMS :: Рекомендации по публикации сообщений :: Прежде чем задать вопрос воспользуйтесь Поиском
-------------------------------------------------------------------
Если что-то не работает, задавая вопрос, ! ОБЯЗАТЕЛЬНО ! пишите версию RUNCMS/модуля/PHP/MySQL и текст самой ошибки.
Посетить домашнюю страницу LARK
  Сообщения: 4,185 c 20.09.2003 | Репутация: 223
AlexLeonov вне форума AlexLeonov
Arbeit macht Frei

Аватар для AlexLeonov

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

Спасибо, я больше на старые* версии ориентировался, ими много кто еще пользуется.

----
* включая так называемый RunCMS 2


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

Аватар для Michael-XIII

| Цитировать Старый #4 11-14-2009, 10:36

Коллеги вот мне интересно - каждый из нас начинает изобретать велосипед ;-)

Я уже несколько месяцев привинитил RCCache в память eAcceleratora (как в прочем и DB и File) и блоки*работаю теперь через ОБЩИЙ механизм кеширования

Помнится он появился в 1.6 или 1.6.1 - точно не помню

http://runlive.svn.sourceforge.net/v...hp?view=markup
http://runlive.svn.sourceforge.net/v...hp?view=markup


"А почему в RunCMS глючит ... ?"
"Глупые винят других. Умные – себя. А мудрые идут вперед". (С)
Посетить домашнюю страницу Michael-XIII
  Сообщения: 1,313 c 18.07.2005 | Репутация: 93
Usama вне форума Usama
Старший участник

Аватар для Usama

| Цитировать Старый #5 11-14-2009, 16:35

а все потому, что каждый тянет свое.. а не общее дело! Объеденились бы и все.


Творческая работа - это прекрасный, необычайно тяжелый и изумительно радостный труд.
Николай Островский
Посетить домашнюю страницу Usama
  Сообщения: 1,404 c 10.12.2003 | Репутация: 82
Zormax вне форума Zormax
Старожил

Аватар для Zormax

| Цитировать Старый #6 11-15-2009, 12:00

Цитата:
Сообщение от AlexLeonov Посмотреть сообщение
4. Проверяем, не сломали ли сайт
может так:
4. Проверяем, не сломалСЯ ли сайт


Всё для Sony Ericsson
Посетить домашнюю страницу Zormax
  Сообщения: 2,424 c 15.05.2004 | Репутация: 149
Michael-XIII вне форума Michael-XIII
Стар я для всего этого

Аватар для Michael-XIII

| Цитировать Старый #7 11-15-2009, 13:05

>что каждый тянет свое.. а не общее дело!

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


"А почему в RunCMS глючит ... ?"
"Глупые винят других. Умные – себя. А мудрые идут вперед". (С)
Посетить домашнюю страницу Michael-XIII
  Сообщения: 1,313 c 18.07.2005 | Репутация: 93
Zormax вне форума Zormax
Старожил

Аватар для Zormax

| Цитировать Старый #8 11-15-2009, 13:11

жжошь Миха ))


Всё для Sony Ericsson
Посетить домашнюю страницу Zormax
  Сообщения: 2,424 c 15.05.2004 | Репутация: 149
LARK вне форума LARK
[исход]

Аватар для LARK

| Цитировать Старый #9 11-15-2009, 13:19

Прекращаем оффтоп


Правила нашего Форума :: О клубе пользователей RUNCMS :: Рекомендации по публикации сообщений :: Прежде чем задать вопрос воспользуйтесь Поиском
-------------------------------------------------------------------
Если что-то не работает, задавая вопрос, ! ОБЯЗАТЕЛЬНО ! пишите версию RUNCMS/модуля/PHP/MySQL и текст самой ошибки.
Посетить домашнюю страницу LARK
  Сообщения: 4,185 c 20.09.2003 | Репутация: 223
mix вне форума mix
Младший участник


| Цитировать Старый #10 11-15-2009, 16:33

Господа, поясните принцип работы функции cache().

if ( file_exists($cacheFile) && (time() - filemtime($cacheFile) < $time) )
return unserialize(file_get_contents($cacheFile));
- возвращаем строку (прочитанный файл). Где используется возвращаемое значение?
Далее, если я правильно понял, файл перезаписывается постоянно при обращении к функции cache().

Последний раз редактировалось mix, 11-15-2009 в 16:47

Посетить домашнюю страницу mix
  Сообщения: 32 c 14.09.2007 | Репутация: 16
Ответ

Опции темы
Опции просмотра

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

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


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