Есть старый модуль, который ещё мне скидывали на нулледе, но с ним у меня сейчас возникла проблема. При подключении модуля на сайте с 42к новостями:
Без него:
Сам код:
Собственно вопрос к кодерам: как можно оптимизировать данный код, чтобы он не хавал там много оперативки и работал быстро. Новостей на сайте 42к, размер БД - чуть более 300Мб.
Код:
<!-- The script execution time 8,64123 seconds -->
<!-- The time compilation of templates 3,48908 seconds -->
<!-- Time executing MySQL query: 5,2086 seconds -->
<!-- The total number of MySQL queries 12 -->
<!-- RAM uses 260,55 MB -->
<!-- For compression was used gzip -->
<!-- The total size of the page: 58792 bytes After compression: 11898 bytes -->
Код:
<!-- The script execution time 0,11997 seconds -->
<!-- The time compilation of templates 0,06262 seconds -->
<!-- Time executing MySQL query: 0,00223 seconds -->
<!-- The total number of MySQL queries 2 -->
<!-- RAM uses 3,33 MB -->
<!-- For compression was used gzip -->
<!-- The total size of the page: 54915 bytes After compression: 11350 bytes -->
Код:
<?php
include ('engine/api/api.class.php'); // подключаем api
$table = 'dle_post'; // название таблицы
$fields = 'xfields'; // нужные поля, * - все поля
$where = 'approve=1'; // условия выборки
$multirow = 1; // забирать ли один ряд или несколько
$start = 0; // начальное значение выборки
$limit = 0; // количество записей для выборки, 0 - выбрать все
$xfield = 'xfxfxf'; ///ИМЯ ДОП ПОЛЯ ДЛЯ ВЫВОДА
$time = '140000'; //время жизни кеша
$xfields = $dle_api->load_from_cache ($fields, $time, $xfields); //берем наш кеш, если есть конечно ))
if( !$xfields ) { //проверяем взяли ли мы кеш и если не взяли, то делаем запрос
$xfields = $dle_api->load_table ($table,$fields,$where,$multirow,$start,$limit); //делаем запрос к бд
$dle_api->save_to_cache ( xfields, $xfields); //сохраняем в кеш
}
$stack = array(); //создаем пустой массив
foreach($xfields as $value){ // перебор значений массива
if($value[xfields]){ //проверяем есть ли элемент в массиве
$row = xfieldsdataload($value[xfields]); //получаем нужное нам доп поле
if($row[$xfield]){ //проверяем есть ли значение
$rowdata = explode( ",", $row[$xfield]); //разбиваем наше значение на массив
foreach($rowdata as $value){ //перебираем значения массива
if($value){ //проверяем есть ли значение
$value = trim($value); //убираем пробелы
array_push($stack, $value); //добавляем в конец массива полученное значение
}
}
}
}
}
$stack = array_count_values($stack); //считаем повторы и избавляемся от повторных значений
foreach($stack as $key => $count){ //выводим окончательный вариант
$key_img = str_replace('\"', '', $key);
echo "
<div class=\"category_block\">
<a href=\"/xfsearch/".rawurlencode($key)."/\">
<div class=\"category_img\">
<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=\" alt=\"Подборка: {$key}\" />
<div class=\"category_title\">
«{$key_img}»
</div>
<div class=\"category_count\">
$count
</div>
</div>
</a>
</div>
";
}
?>