[Quickfw-git] SF.net Git: quickfw branch, master, updated. cb04338a5bc79749ab0011875ea495010ad08a5d
Brought to you by:
ivan1986,
seriousdron
From: Ivan1986 <iva...@us...> - 2011-08-21 14:14:03
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "quickfw". The branch, master has been updated via cb04338a5bc79749ab0011875ea495010ad08a5d (commit) via 48660f35da4d5da6146af530ae12470229ea9041 (commit) via c3af39fb82e11ccac55559b48500b89b7127f2af (commit) via 3240b6712d4be1424dd2a2a9f2293a266225d93a (commit) via c50a824dc0c8a0997aa3c4525ea5f265e67f7775 (commit) via 1c6ed73e2eddb51bcf4a0639aba1f464baf35869 (commit) via 9276b26c2cbd4bc00926e3100a8f59f35db5bc5c (commit) via 1503f63d36680521785b13fb43d73820af7711dd (commit) from a24ffd90c66679d87c93eeedbf0b6b77c522e1f2 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit cb04338a5bc79749ab0011875ea495010ad08a5d Merge: a24ffd9 48660f3 Author: Ivan Borzenkov <iva...@li...> Date: Sun Aug 21 18:13:05 2011 +0400 Merge branch 'syscache' commit 48660f35da4d5da6146af530ae12470229ea9041 Author: Ivan Borzenkov <iva...@li...> Date: Sun Aug 21 18:05:22 2011 +0400 Документация по кешированию diff --git a/doc/asciidoc/cache.txt b/doc/asciidoc/cache.txt index e8d6a0b..e276f6e 100644 --- a/doc/asciidoc/cache.txt +++ b/doc/asciidoc/cache.txt @@ -1,6 +1,11 @@ Кеширование ----------- +Библиотека +~~~~~~~~~~ + +Используется link:http://dklab.ru/lib/Dklab_Cache/[Dklab_Cache] частично порезанная. (Дописать) + Бэкенды кеширующей системы ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -42,7 +47,19 @@ MemCache Memcache - использует стандартный класс Memecache Memcached - использует библиотеку libmemcached -XCache -^^^^^^ +XCache, Apc и eAccelerator +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Общие интерфейсы для хранении в кешах XCache и APC находятся в соответствующих классах, так как сейчас eAccelerator в полудохлом состоянии, то класса для него нету, но пишется он аналогично + +Null +^^^^ + +Пустой кешер, который не кеширует ничего - нужен для того чтобы был общий интерфейс со слотами. + +Системное кеширование +~~~~~~~~~~~~~~~~~~~~~ + +*Используйте этот кешер только на нагруженных проектах и с большой аккуратностью.* -Общий интерфейс для хранении в кеше XCache, аналогично можно написать для APC и eAccelerator, но пока не требовалось +Для кеширование системной информации есть слот +QuickFW_Cacher_SysSlot+ в файле +QFW/QuickFW/Cacher/SysSlot.php+ статическая функция +is_use+ определяет использовать кеширование или нет, а функция +_getBackend+ возвращает кешер. Пока не решен вопрос о привязке сюда конфига в зависимости от хоста (вполне возможно это будет какой-то костыль). Так как кешируются достаточно быстро выполняемые операции, то рекомендуется использовать только очень быстрые кеши, такие как APC или XCache, в противном случае такое кеширование может даже замедлить проект. \ No newline at end of file diff --git a/doc/asciidoc/templates.txt b/doc/asciidoc/templates.txt index e10a0fa..4467ed4 100644 --- a/doc/asciidoc/templates.txt +++ b/doc/asciidoc/templates.txt @@ -41,7 +41,7 @@ include::../../QFW/Templater/Templater.php[] Значения в глобальной области задаются через функцию +assign+, оставленную для совместимости с предыдущим вариантов и статическую функцию +set_global+. -Через __set метод задаются переменные объекта. Если использовать только объект +QFW::$view+ и не создавать дополнительные объекты шаблонизатора, то области видимости глобальных значений и значений объекта совпадают, причем значения объекта перекрывают глобальные. +Через магию +__set+ или метод +set+ задаются переменные объекта. Если использовать только объект +QFW::$view+ и не создавать дополнительные объекты шаблонизатора, то области видимости глобальных значений и значений объекта совпадают, причем значения объекта перекрывают глобальные. Локальные значения при вызове передаются вторым параметром в функцию +fetch+ и влияют только на этот вызов. Их можно использовать в каких-либо циклах. @@ -82,7 +82,7 @@ PlainPHP помомо стандартных функций PHP доступны следующие функции: -esc:: +esc():: Экранировка - сокращение от htmlspecialchars, настроенная на utf-8 block():: commit c3af39fb82e11ccac55559b48500b89b7127f2af Author: Ivan Borzenkov <iva...@li...> Date: Sun Aug 21 15:00:01 2011 +0400 Так все-таки быстрее diff --git a/QFW/Init.php b/QFW/Init.php index b6ccc92..30b8960 100644 --- a/QFW/Init.php +++ b/QFW/Init.php @@ -58,7 +58,9 @@ class QFW self::$db = new DbSimple_Connect(self::$config['database']); //Подключаем шаблонизатор - $class = 'Templater_'.ucfirst(self::$config['templater']['name']); + $tpl = ucfirst(self::$config['templater']['name']); + $class = 'Templater_'.$tpl; + require_once QFWPATH.'/Templater/'.$tpl.'.php'; self::$view = new $class(APPPATH, isset(self::$config['templater']['def_tpl']) ? self::$config['templater']['def_tpl'] : ''); diff --git a/QFW/QuickFW/Cache.php b/QFW/QuickFW/Cache.php index 098f8c0..48605a5 100644 --- a/QFW/QuickFW/Cache.php +++ b/QFW/QuickFW/Cache.php @@ -131,7 +131,7 @@ class Cache $backend = ucfirst($data['module']); } else - $backend = $name; + $backend = ucfirst($name); $cl='Cacher_'.$backend; require_once QFWPATH.'/Cacher/'.$backend.'.php'; $c=new $cl; commit 3240b6712d4be1424dd2a2a9f2293a266225d93a Author: Ivan Borzenkov <iva...@li...> Date: Sun Aug 21 14:42:52 2011 +0400 APC кеш diff --git a/QFW/Cacher/Xcache.php b/QFW/Cacher/Apc.php similarity index 70% copy from QFW/Cacher/Xcache.php copy to QFW/Cacher/Apc.php index 45d0ce3..28130ac 100644 --- a/QFW/Cacher/Xcache.php +++ b/QFW/Cacher/Apc.php @@ -1,15 +1,10 @@ <?php /** - * Xcache variable cache interface - * - * @package RELAX - * @author Petrenko Andrey - * @version 0.1 - * @copyright RosBusinessConsulting + * Apc variable cache interface */ -class Cacher_Xcache implements Zend_Cache_Backend_Interface +class Cacher_Apc implements Zend_Cache_Backend_Interface { public function setDirectives($directives) { @@ -25,7 +20,7 @@ class Cacher_Xcache implements Zend_Cache_Backend_Interface */ public function save($data, $id, $tags = array(), $specificLifetime = 3600) { - return xcache_set($id, $data, $specificLifetime); + return apc_store($id, $data); } /** @@ -36,7 +31,7 @@ class Cacher_Xcache implements Zend_Cache_Backend_Interface */ public function load($id, $doNotTest = false) { - return xcache_get($id); + return apc_fetch($id); } /** @@ -47,7 +42,7 @@ class Cacher_Xcache implements Zend_Cache_Backend_Interface */ public function test($id) { - return xcache_isset($id); + return apc_exists($id); } /** @@ -58,14 +53,12 @@ class Cacher_Xcache implements Zend_Cache_Backend_Interface */ public function remove($id) { - return xcache_unset($id); + return apc_delete($id); } public function clean($mode = CACHE_CLR_ALL, $tags = array()) { - + apc_clear_cache('user'); } } - -?> \ No newline at end of file diff --git a/QFW/Cacher/Xcache.php b/QFW/Cacher/Xcache.php index 45d0ce3..8b878dc 100644 --- a/QFW/Cacher/Xcache.php +++ b/QFW/Cacher/Xcache.php @@ -67,5 +67,3 @@ class Cacher_Xcache implements Zend_Cache_Backend_Interface } } - -?> \ No newline at end of file diff --git a/QFW/QuickFW/Cacher/SysSlot.php b/QFW/QuickFW/Cacher/SysSlot.php index d8329fe..3fdd2ea 100644 --- a/QFW/QuickFW/Cacher/SysSlot.php +++ b/QFW/QuickFW/Cacher/SysSlot.php @@ -10,7 +10,7 @@ class QuickFW_Cacher_SysSlot extends Dklab_Cache_Frontend_Slot protected function _getBackend() { //return Cache::get('Null'); - return Cache::get('File'); + return Cache::get('Apc'); } public static function is_use($where=false) @@ -25,4 +25,4 @@ class QuickFW_Cacher_SysSlot extends Dklab_Cache_Frontend_Slot return false; return false;*/ } -} \ No newline at end of file +} commit c50a824dc0c8a0997aa3c4525ea5f265e67f7775 Author: Ivan Borzenkov <iva...@li...> Date: Sun Aug 21 03:39:19 2011 +0400 Правки системного кеша diff --git a/QFW/QuickFW/Cacher/SysSlot.php b/QFW/QuickFW/Cacher/SysSlot.php index c17d592..d8329fe 100644 --- a/QFW/QuickFW/Cacher/SysSlot.php +++ b/QFW/QuickFW/Cacher/SysSlot.php @@ -15,11 +15,14 @@ class QuickFW_Cacher_SysSlot extends Dklab_Cache_Frontend_Slot public static function is_use($where=false) { + // используются 'MCA', 'autoload', 'config' return false; - if ($where == 'MCA') + /*if ($where == 'MCA') return false; if ($where == 'autoload') return false; - return false; + if ($where == 'config') + return false; + return false;*/ } } \ No newline at end of file diff --git a/QFW/QuickFW/Config.php b/QFW/QuickFW/Config.php index 7cec713..7d81ec4 100644 --- a/QFW/QuickFW/Config.php +++ b/QFW/QuickFW/Config.php @@ -23,8 +23,10 @@ class QuickFW_Config implements ArrayAccess if (isset($_SERVER['HTTP_HOST'])) $files[] = APPPATH.'/host.'.$_SERVER['HTTP_HOST'].'.php'; return array( - 'prefix' => $prefix, 'files' => $files, + 'key' => $prefix. + (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : ''). + (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ''), ); } $files = array(); @@ -34,8 +36,10 @@ class QuickFW_Config implements ArrayAccess if (isset($_SERVER['HTTP_HOST'])) $files[] = $prefix.'.host.'.$_SERVER['HTTP_HOST'].'.php'; return array( - 'prefix' => $prefix, 'files' => $files, + 'key' => $prefix + (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : ''). + (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ''), ); } @@ -116,9 +120,9 @@ class QuickFW_Config implements ArrayAccess */ static private function loadFromFiles($info) { - if (QuickFW_Cacher_SysSlot::is_use()) + if (QuickFW_Cacher_SysSlot::is_use('config')) { - $C = new QuickFW_Cacher_SysSlot('config_'.$info['prefix']); + $C = new QuickFW_Cacher_SysSlot('config_'.$info['key']); if ($data = $C->load()) return $data; } @@ -134,7 +138,7 @@ class QuickFW_Config implements ArrayAccess $data = (is_array($data) && is_array($new)) ? array_replace_recursive($data, $new) : $new; } - if (QuickFW_Cacher_SysSlot::is_use()) + if (QuickFW_Cacher_SysSlot::is_use('config')) $C->save($data); return $data; } commit 1c6ed73e2eddb51bcf4a0639aba1f464baf35869 Author: Ivan Borzenkov <iva...@li...> Date: Sun Aug 21 03:29:14 2011 +0400 Слот системного кеширования и пустой кеш diff --git a/QFW/Cacher/Null.php b/QFW/Cacher/Null.php new file mode 100644 index 0000000..d617649 --- /dev/null +++ b/QFW/Cacher/Null.php @@ -0,0 +1,35 @@ +<?php + +/** + * Null cache interface + */ +class Cacher_Null implements Zend_Cache_Backend_Interface +{ + public function setDirectives($directives) + { + } + + public function save($data, $id, $tags = array(), $specificLifetime = 3600) + { + } + + public function load($id, $doNotTest = false) + { + return false; + } + + public function test($id) + { + return false; + } + + public function remove($id) + { + return true; + } + + public function clean($mode = CACHE_CLR_ALL, $tags = array()) + { + } + +} diff --git a/QFW/QuickFW/Autoload.php b/QFW/QuickFW/Autoload.php index f149012..212ae20 100644 --- a/QFW/QuickFW/Autoload.php +++ b/QFW/QuickFW/Autoload.php @@ -15,9 +15,11 @@ class Autoload { spl_autoload_register(array(__CLASS__, 'Bind')); spl_autoload_register(array(__CLASS__, 'Main')); - spl_autoload_register(array(__CLASS__, 'Dirs')); + spl_autoload_register(array(__CLASS__, 'Cached')); + //кешированный автолоад spl_autoload_register(array(__CLASS__, 'Controller')); spl_autoload_register(array(__CLASS__, 'SlotsAndTags')); + spl_autoload_register(array(__CLASS__, 'Dirs')); } /** @@ -33,6 +35,24 @@ class Autoload elseif (is_callable($function)) spl_autoload_register($function); } + + /** + * Загрузка результатов разбора из кеша + * + * @param string $class искомый класс + */ + static public function Cached($class) + { + if (!QuickFW_Cacher_SysSlot::is_use('autoload')) + return false; + $C = new QuickFW_Cacher_SysSlot(self::k($class)); + if ($data = $C->load()) + { + require $data; + return true; + } + return false; + } /** * Автолоад контроллеров (при наследовании) @@ -43,21 +63,19 @@ class Autoload { if (mb_strpos($class, 'Controller') === false) return false; - $class = strtr($class,'_','/'); + $c = strtr($class,'_','/'); //пространство имен - if ($pos = mb_strpos($class, '\\')) + if ($pos = mb_strpos($c, '\\')) { - $ns = strtolower(mb_substr($class, 0, $pos)); - $class = ucfirst(mb_substr($class, $pos+1)); + $ns = strtolower(mb_substr($c, 0, $pos)); + $c = ucfirst(mb_substr($c, $pos+1)); $Q = $ns.'\QFW'; //Проверка на саброутинг $dir = !class_exists($Q) ? $ns : QFW::$router->cModule.'/'.$ns.'/'.$Q::$router->cModule; } else $dir = QFW::$router->cModule; - $file = $dir.'/'.QuickFW_Router::CONTROLLERS_DIR.'/'.$class; - require APPPATH.'/'.$file.'.php'; - return true; + return self::incl($class, APPPATH.'/'.$dir.'/'.QuickFW_Router::CONTROLLERS_DIR.'/'.$c.'.php'); } /** @@ -94,6 +112,7 @@ class Autoload 'Hlp' => QFWPATH.'/QuickFW/Helpers.php', 'Dklab_Cache_Frontend_Slot' => QFWPATH.'/QuickFW/Cacher/Slot.php', 'Dklab_Cache_Frontend_Tag' => QFWPATH.'/QuickFW/Cacher/Tag.php', + 'QuickFW_Cacher_SysSlot' => QFWPATH.'/QuickFW/Cacher/SysSlot.php', ); if (empty(self::$classes[$class])) return false; @@ -135,15 +154,28 @@ class Autoload LIBPATH, MODPATH, ); - $class = str_replace('_', '/', $class); + $c = str_replace('_', '/', $class); foreach ($list as $dir) - if (is_file($dir.'/'.$class.'.php')) - { - require $dir.'/'.$class.'.php'; - return true; - } + if (is_file($dir.'/'.$c.'.php')) + return self::incl($class, $dir.'/'.$c.'.php'); return false; } + + static private function incl($class, $file) + { + if (QuickFW_Cacher_SysSlot::is_use('autoload')) + { + $C = new QuickFW_Cacher_SysSlot(self::k($class)); + $C->save($file); + } + require $file; + return true; + } + + static private function k($class) + { + return 'autoload_'.$class.(QFW::$router ? QFW::$router->cModule : ''); + } } diff --git a/QFW/QuickFW/Cacher/SysSlot.php b/QFW/QuickFW/Cacher/SysSlot.php new file mode 100644 index 0000000..c17d592 --- /dev/null +++ b/QFW/QuickFW/Cacher/SysSlot.php @@ -0,0 +1,25 @@ +<?php + +class QuickFW_Cacher_SysSlot extends Dklab_Cache_Frontend_Slot +{ + public function __construct($data, $time=false) + { + parent::__construct('QFW_'.$data, $time); + } + + protected function _getBackend() + { + //return Cache::get('Null'); + return Cache::get('File'); + } + + public static function is_use($where=false) + { + return false; + if ($where == 'MCA') + return false; + if ($where == 'autoload') + return false; + return false; + } +} \ No newline at end of file diff --git a/QFW/QuickFW/Config.php b/QFW/QuickFW/Config.php index df9741c..7cec713 100644 --- a/QFW/QuickFW/Config.php +++ b/QFW/QuickFW/Config.php @@ -116,10 +116,12 @@ class QuickFW_Config implements ArrayAccess */ static private function loadFromFiles($info) { - $C=Cache::get('File'); - $key = 'config_'.$info['prefix']; - if ($data = $C->load($key)) - return $data; + if (QuickFW_Cacher_SysSlot::is_use()) + { + $C = new QuickFW_Cacher_SysSlot('config_'.$info['prefix']); + if ($data = $C->load()) + return $data; + } $data = array(); foreach($info['files'] as $file) { @@ -132,7 +134,8 @@ class QuickFW_Config implements ArrayAccess $data = (is_array($data) && is_array($new)) ? array_replace_recursive($data, $new) : $new; } - $C->save($data, $key); + if (QuickFW_Cacher_SysSlot::is_use()) + $C->save($data); return $data; } diff --git a/QFW/QuickFW/Router.php b/QFW/QuickFW/Router.php index 8b4a037..d258505 100644 --- a/QFW/QuickFW/Router.php +++ b/QFW/QuickFW/Router.php @@ -453,13 +453,12 @@ class QuickFW_Router { while (isset($data[0]) AND $data[0] === '') array_shift($data); - if (!empty(QFW::$config['cache']['MCA'])) + if (QuickFW_Cacher_SysSlot::is_use('MCA')) { - $Cache = Cache::get('MCA'); $key = 'MCA_'.$this->sub.crc32(serialize($data)).$type. ($type=='Block' ? $this->curModule : $this->defM); - $cached = $Cache->load($key); - if ($cached) + $C = new QuickFW_Cacher_SysSlot($key); + if ($cached = $C->load()) { $MCA = $cached['MCA']; //устанавливаем переменные роутера @@ -595,12 +594,16 @@ class QuickFW_Router } $MCA['Path']=$MCA['Module'].'/'.$MCA['Controller'].'/'.$aname; - if (!empty(QFW::$config['cache']['MCA'])) - $Cache->save(array( - 'MCA' => $MCA, + if (QuickFW_Cacher_SysSlot::is_use('MCA')) + { + $MCA_Cache = $MCA; + unset($MCA_Cache['Class']); + $C->save(array( + 'MCA' => $MCA_Cache, 'defA' => $this->classes[$class_key]['defA'], 'a' => $this->classes[$class_key]['a'], - ), $key, array()); + )); + } return $MCA; } commit 9276b26c2cbd4bc00926e3100a8f59f35db5bc5c Author: Ivan Borzenkov <iva...@li...> Date: Sun Aug 21 03:27:31 2011 +0400 Автолоад у шаблонизаторов diff --git a/QFW/Init.php b/QFW/Init.php index 4783392..b6ccc92 100644 --- a/QFW/Init.php +++ b/QFW/Init.php @@ -43,24 +43,12 @@ class QFW private function __construct() {} /** - * Инициализация конфига - * - * <br>возвращает конфигурацию, специфичную для текущего хоста - * - * @return array конфигурация на этом хосте - */ - static public function config() - { - return QuickFW_Config::main(); - } - - /** * Инициализация основных объектов QFW * */ static public function Init() { - self::$config = self::config(); + self::$config = QuickFW_Config::main(); //выставляем заголовок с нужной кодировкой if (!empty(self::$config['host']['encoding'])) @@ -70,9 +58,7 @@ class QFW self::$db = new DbSimple_Connect(self::$config['database']); //Подключаем шаблонизатор - $templ = ucfirst(self::$config['templater']['name']); - $class = 'Templater_'.$templ; - require_once QFWPATH.'/Templater/'.$templ.'.php'; + $class = 'Templater_'.ucfirst(self::$config['templater']['name']); self::$view = new $class(APPPATH, isset(self::$config['templater']['def_tpl']) ? self::$config['templater']['def_tpl'] : ''); @@ -197,5 +183,3 @@ class QFW } QFW::Init(); - -?> diff --git a/QFW/QuickFW/Autoload.php b/QFW/QuickFW/Autoload.php index 165ab67..f149012 100644 --- a/QFW/QuickFW/Autoload.php +++ b/QFW/QuickFW/Autoload.php @@ -69,11 +69,12 @@ class Autoload */ static public function Main($class) { - if (mb_strpos($class, 'QuickFW') === false) - return false; - $class = strtr($class,'_','/'); - require QFWPATH.'/'.$class.'.php'; - return true; + if (mb_strpos($class, 'QuickFW_') === 0 || mb_strpos($class, 'Templater_') === 0 || mb_strpos($class, 'Cacher_') === 0) + { + require QFWPATH.'/'.strtr($class,'_','/').'.php'; + return true; + } + return false; } /** diff --git a/QFW/QuickFW/Cache.php b/QFW/QuickFW/Cache.php index b68c372..098f8c0 100644 --- a/QFW/QuickFW/Cache.php +++ b/QFW/QuickFW/Cache.php @@ -169,11 +169,13 @@ class Cache /** * Фабрика слотов * + * @deprecated Используйте autoload * @param string $name имя слота * @return Dklab_Cache_Frontend_Slot новый слот */ public static function slot($name) { + trigger_error('Используйте autoload', E_USER_NOTICE); require_once QFWPATH.'/QuickFW/Cacher/Slot.php'; require_once COMPATH.'/slots/'.$name.'.php'; $args = func_get_args(); @@ -185,11 +187,13 @@ class Cache /** * Фабрика тегов * + * @deprecated Используйте autoload * @param string $name имя тега * @return Dklab_Cache_Frontend_Tag новый тег */ public static function tag($name) { + trigger_error('Используйте autoload', E_USER_NOTICE); require_once QFWPATH.'/QuickFW/Cacher/Tag.php'; require_once COMPATH.'/tags/'.$name.'.php'; $args = func_get_args(); @@ -227,5 +231,3 @@ function thru($Cacher, $obj, $id, $tags=array(), $lifeTime=null) { return new Cache_Thru($Cacher, $obj, $id, $tags, $lifeTime); } - -?> commit 1503f63d36680521785b13fb43d73820af7711dd Author: Ivan Borzenkov <iva...@li...> Date: Sun Aug 21 01:30:16 2011 +0400 Базовое кеширование конфига diff --git a/QFW/QuickFW/Config.php b/QFW/QuickFW/Config.php index c1af2a7..df9741c 100644 --- a/QFW/QuickFW/Config.php +++ b/QFW/QuickFW/Config.php @@ -22,7 +22,10 @@ class QuickFW_Config implements ArrayAccess $files[] = APPPATH.'/serv.'.$_SERVER['SERVER_NAME'].'.php'; if (isset($_SERVER['HTTP_HOST'])) $files[] = APPPATH.'/host.'.$_SERVER['HTTP_HOST'].'.php'; - return $files; + return array( + 'prefix' => $prefix, + 'files' => $files, + ); } $files = array(); $files[] = $prefix.'.php'; @@ -30,7 +33,10 @@ class QuickFW_Config implements ArrayAccess $files[] = $prefix.'.serv.'.$_SERVER['SERVER_NAME'].'.php'; if (isset($_SERVER['HTTP_HOST'])) $files[] = $prefix.'.host.'.$_SERVER['HTTP_HOST'].'.php'; - return $files; + return array( + 'prefix' => $prefix, + 'files' => $files, + ); } /** @@ -108,10 +114,14 @@ class QuickFW_Config implements ArrayAccess * @param array $files файлы * @return array|mixed|QuickFW_Config вложенный массив */ - static private function loadFromFiles($files) + static private function loadFromFiles($info) { + $C=Cache::get('File'); + $key = 'config_'.$info['prefix']; + if ($data = $C->load($key)) + return $data; $data = array(); - foreach($files as $file) + foreach($info['files'] as $file) { $new = array(); if (is_file($file)) @@ -122,6 +132,7 @@ class QuickFW_Config implements ArrayAccess $data = (is_array($data) && is_array($new)) ? array_replace_recursive($data, $new) : $new; } + $C->save($data, $key); return $data; } ----------------------------------------------------------------------- Summary of changes: QFW/Cacher/{Xcache.php => Apc.php} | 21 ++++------- QFW/Cacher/Null.php | 35 ++++++++++++++++++ QFW/Cacher/Xcache.php | 2 - QFW/Init.php | 22 ++--------- QFW/QuickFW/Autoload.php | 71 ++++++++++++++++++++++++++---------- QFW/QuickFW/Cache.php | 8 +++-- QFW/QuickFW/Cacher/SysSlot.php | 28 ++++++++++++++ QFW/QuickFW/Config.php | 26 +++++++++++-- QFW/QuickFW/Router.php | 19 ++++++---- doc/asciidoc/cache.txt | 23 ++++++++++-- doc/asciidoc/templates.txt | 4 +- 11 files changed, 186 insertions(+), 73 deletions(-) copy QFW/Cacher/{Xcache.php => Apc.php} (70%) create mode 100644 QFW/Cacher/Null.php create mode 100644 QFW/QuickFW/Cacher/SysSlot.php hooks/post-receive -- quickfw |