Russian TYPO3 community Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community  

Вернуться   Russian TYPO3 community > Тематические форумы > Разработка расширений / TYPO3 extension development

Ответ
 
Опции темы Опции просмотра
Старый 23.10.2012, 21:09   #11
Ивано
Guest
 
Сообщений: n/a
Exclamation

По прежнему актуально.

Самый простой "кэш" (не знаю можно ли это назвать кэшированием), который могу создать это следующий: есть собранные данные HTML-код - их записываю в файл с именем time(), кидаю его в папку typo3temp - и при следующем вызове скрипта, проверяю через if - если разница более 30 минут - то по новому нужно собрать HTML-код с запросом к БД.

Какой и как использовать API typo3 для подобных вещей (как на файлах, так и на БД - хотя данный вариант мне тоже не очень нравиться).
Есть ли простые примеры...

Memcache - так понимаю должен быть включен (установлен) на сервера?
И есть ли что нибудь - что похоже на Memcache - только в независимости от настроек и установок сервера?

Последний раз редактировалось Ивано; 23.10.2012 в 21:22
  Ответить с цитированием
Старый 23.10.2012, 21:29   #12
Ивано
Guest
 
Сообщений: n/a
Wink

Вот нашел ссылку на memcache - только на основе простой библиотеки...
http://raven.esiteq.com/2011/03/php-memcache/
  Ответить с цитированием
Старый 23.10.2012, 21:35   #13
Ивано
Guest
 
Сообщений: n/a
По умолчанию

Как понимаю - это расширение "fastcache" - позволяет решать подобные задачи?
  Ответить с цитированием
Старый 24.10.2012, 12:15   #14
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Еще раз - можете использовать встроенные в ядро функции кэширования.
Подробно и с примерами (в конце) читайте http://wiki.typo3.org/Caching_framework

То что вы сохраняете какой-то готовый контент в файл - это тоже кэширование. Точно также вместо файла можно использовать Memcached, APC и т.п. Может быть fastcache и упростит задачу. Но там и так просто get/set.

Правда нужно понимать, что бы сделать из этого полноценный кэш нужно добавить к этому ряд функций. Например чистку кэша при общей команде "Clear Cache" из BE. Также при усложнении функциональности сайта/экста понадобиться тэггирование записей кэша и чистка по тэгам. сильно улучшает полезность кэша зависимость жизни кэша от изменения и добавления связанных записей. Например, вы отредактировали новость в BE, кэш плагина/страницы новости обновился сразу, а не через 30 минут.

PS: Если вы записываете с именем time(), то как вы потом этот файл находите? Гораздо удобней использовать другие параметры для имени ключа кэша. Например у нас есть метод который реднерит Single View. В нем определяем $cache_key = md5(serialize(array(__CLASS__, __FUNCTION__, $pid, $uid))); Так у нас есть гарантия что ключ кэша (он же имя файла или ключ в memcached) не перепутается с кэшем из другой функции, или из другого класса.
dmartynenko вне форума   Ответить с цитированием
Старый 24.02.2013, 00:07   #15
Ивано++
Senior Member
 
Аватар для Ивано++
 
Регистрация: 18.01.2013
Адрес: Russia , Moscow
Сообщений: 796
По умолчанию

Возвращаясь к этой теме - очень сложно использовать Caching F в выше описанной статье...

И нашел варианты более простые:
1. http://typo3.org/extension-manuals/e....0/view/toc/0/
расширение enetcache позволяет управлять кэшированием


2. http://buzz.typo3.org/people/steffen...in-extensions/

можно использовать стандартные функции класса t3lib_pageSelect:
getHash
storeHash
которые пишут данные в таблицу "cf_cache_hash_tags"

t3lib_pageSelect - очень полезный класс, документация здесь:
http://doxygen.frozenkiwi.com/typo3/...13dfaf1a0da959


А также вот еще интересные статьи:
http://wiki.typo3.org/Cache
http://wiki.typo3.org/Functions_for_t3lib_cache
Ивано++ вне форума   Ответить с цитированием
Старый 24.02.2013, 00:30   #16
Ивано++
Senior Member
 
Аватар для Ивано++
 
Регистрация: 18.01.2013
Адрес: Russia , Moscow
Сообщений: 796
По умолчанию

А еще можно на прямую, даже с выбором таблицы, в которую надо писать:

if(isset($GLOBALS['typo3CacheManager']) && $GLOBALS['TYPO3_CONF_VARS']['SYS']['useCachingFramework']) { //на всякий случай можно проверять, включено ли кэширование на основе БД (и если галочка установлена - вперед)

PHP код:
$hash "fewfew"$ident "fwefew"$data 123;
        
$GLOBALS['typo3CacheManager']->getCache('cache_hash')->set(
                
$hash,
                
$data,
                array(
'ident_' $ident),
                
intval($lifetime)
            );
        
$contentHashCache $GLOBALS['typo3CacheManager']->getCache('cache_hash');
$cacheEntry $contentHashCache->get($hash); 
PHP код:
//Либо так
t3lib_pageSelect::storeHash(...);
t3lib_pageSelect::getHash(...) 

Даже время истечения можно задать...
Ивано++ вне форума   Ответить с цитированием
Ответ


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

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 17:47.


Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot

Хостинг и техническая поддержка: TYPO3 Лаборатория