voituk
прозревший
Кеширование xml дерева
В проекте описание страницы (модули, мета-теги, и тд и тп) задается xml файлом.
Зная, что разбор xml - довольно ресурсоемкая процедура, решил сделать кеширование DOM дерева таким образом:
1. При запросе страницы, проверяю не лежит ли она в кеше. Если есть - десериализирую уже разобраное dom дерево.
2. Если в кеше нету описания страницы тогда выполняю разбор xml данных функцией domxml_xmltree() и записую их в кеш.
Интерисует даст ли это прирост в производительности, или не стоит так извращаться?
вот код (Config - массив с настройками):
В проекте описание страницы (модули, мета-теги, и тд и тп) задается xml файлом.
Зная, что разбор xml - довольно ресурсоемкая процедура, решил сделать кеширование DOM дерева таким образом:
1. При запросе страницы, проверяю не лежит ли она в кеше. Если есть - десериализирую уже разобраное dom дерево.
2. Если в кеше нету описания страницы тогда выполняю разбор xml данных функцией domxml_xmltree() и записую их в кеш.
Интерисует даст ли это прирост в производительности, или не стоит так извращаться?
вот код (Config - массив с настройками):
PHP:
/**
* Return XML data tree
* @param string $file_path XML file path
* @return array Array of DOMXML Objects
* @see $Config['cache_xml'], domxml_xmltree()
*/
function getXMLTree($file_path) {
global $Config;
if (!is_file($file_path)) user_error("Cant read file <b>\"$file_path\"</b>", E_USER_ERROR);
// Get tree from cache if need
$md5 = md5($file_path);
$md5path = $Config['cache_dir']."/$md5.cache";
$md5file = md5_file($file_path);
if ($Config['cache_xml'] && is_file($md5path)) {
$Result = unserialize(file_get_contents($md5path));
if ($Result->compression==$md5file) return $Result;
}
// Parse xml data
$xml_str = @file_get_contents($file_path);
$Result = domxml_xmltree($xml_str);
//if ()
//Write data into cache if need
if ($Config['cache_xml']) {
$Result->compression = $md5file;
file_put_contents($md5path, serialize($Result));
}
return $Result;
}