1. Собственно вопрос преимущественно к Александру. В движке активно используется кэширование (как с помощью сторонних кэш-машин, так и методом сериализации). Так вот, никак не могу понять в чём разница в использовании Eleanor::$Cache->Put(....) и Eleanor::$Cache->Lib->Put(....) (ну анологично не только Put но и остальные методы). Понятно, что методы родительского класса (class Cache) представляют собой декораторы вокруг дочерних методов. Ещё при каких-то определённых условиях выполняется запись в БД в `eleanor`.`cache`. Хотелось бы узнать в каких именно случаях надо использовать Eleanor::$Cache а в каких Eleanor::$Cache->Lib.
2. Существует такая, скажем, недоработка, на мой взгляд. Заходим на localhost с установленным движком Eleanor CMS. Всё отлично. Система закешила всё, что необходимо. (в папке /cache/ всё лежит). Далее залазим в core/core.php находим класс class Cache и меняем следующий кусок кода
if(!isset($this->Lib))
{
#Вместо Serialize можно использовать HardDisk
if(!class_exists('CacheMachineSerialize',false))
include Eleanor::$root.'core/cache_machines/serialize.php';
$this->Lib=new CacheMachineSerialize;
}
на
if(!isset($this->Lib))
{
#Вместо Serialize можно использовать HardDisk
if(!class_exists('CacheMachineHardDisk',false))
include Eleanor::$root.'core/cache_machines/harddisk.php';
$this->Lib=new CacheMachineHardDisk;
}
при обновлении страницы получаем следующее (залил в файл чтобы не засорять пост): [attachment=1042:changecacheoutput.txt]
Вот эта штука выводится в браузер вместо красивой дефолтной странички
при обратной ситуации (HardDisk->Serialize) движок перехватывает исключение и выдаёт ошибку: произошла ошибка, Unknown service!
Это, скорее всего, происходит из-за того, что CacheMachineHardDisk создал файл /cache/system-services.php , а система затем не может его корректно обработать из-за сменившийся кэш-машины. Как вариант, предлагаю в директории /cache/ создать поддиректории с названиями кэш-машин, и каждая будет ложить кэш туда куда ей надо. Сначала думал предложить записывать имя кэш-машины в каждый файл, наряду с временем жизни, но по-моему будет довольно жирно проверять каждый раз, чем закэширован файл.
3. И просто из любопытства. Немного не понял защиту от dog-pile effect. В методе Get() при обращении предусмотрена блокировка? Я, к сожалению, его пока не раскладывал по косточкам, ограничившись изучением Put().