Стандартно DLE использует проверку на поиск в массиве функцию in_array которая сама по себе "медленная" и быстрее использовать проверку по ключу через isset.
Вот так выполняется код DLE для новостей которые используют тег [catlist в обширном количестве.
И с таким набором категорий у новостей

А вот так с новым кодом

Теперь давайте подумаем, а что если у нас на одной странице порядка 30 новостей, включая custom, и используется везде тег [catlist. Согласен нагрузка не большая, но оптимизация всегда нужна.
Для этого нужно сделать:
1. Открываем /engine/modules/functions.php и находим код
Выше вставляем
2. Открываем /engine/modules/show.short.php show.full.php show.custom.php находим
Меняем на
Вот и все.
Автор: https://punpun.name/ (я)
Вот так выполняется код DLE для новостей которые используют тег [catlist в обширном количестве.
Код:
[catlist=1,2,3,4,5,6,7,8,9,10,11]1[/catlist]
[catlist=2]2[/catlist]
[catlist=3]3[/catlist]
[catlist=4]4[/catlist]
[catlist=5]5[/catlist]
[catlist=6]6[/catlist]
[catlist=7]7[/catlist]
[catlist=8]8[/catlist]
[catlist=9]9[/catlist]
[catlist=10]10[/catlist]
[catlist=11]11[/catlist]

А вот так с новым кодом

Теперь давайте подумаем, а что если у нас на одной странице порядка 30 новостей, включая custom, и используется везде тег [catlist. Согласен нагрузка не большая, но оптимизация всегда нужна.
Для этого нужно сделать:
1. Открываем /engine/modules/functions.php и находим код
PHP:
function check_category( $matches=array() ) {
PHP:
function check_catlist( $matches=array(), $cat_list ) {
$cat_list = array_flip($cat_list);
if($matches[1] == "catlist")
$action = true;
else
$action = false;
if(substr_count($matches[2],","))
{
$cat_array = explode(",", $matches[2]);
foreach($cat_array as $value)
{
if(isset($cat_list[$value]))
if($action)
return $matches[3];
else
return "";
}
}
else
{
if(isset($cat_list[$matches[2]]))
if($action)
return $matches[3];
else
return "";
}
if($action)
return "";
else
return $matches[3];
}
PHP:
if( strpos( $tpl->copy_template, "[catlist=" ) !== false ) {
$tpl->copy_template = preg_replace_callback ( "#\\[(catlist)=(.+?)\\](.*?)\\[/catlist\\]#is", "check_category", $tpl->copy_template );
}
if( strpos( $tpl->copy_template, "[not-catlist=" ) !== false ) {
$tpl->copy_template = preg_replace_callback ( "#\\[(not-catlist)=(.+?)\\](.*?)\\[/not-catlist\\]#is", "check_category", $tpl->copy_template );
}
PHP:
if( strpos( $tpl->copy_template, "[catlist=" ) !== false ) {
$tpl->copy_template = preg_replace_callback ( "#\\[(catlist)=(.+?)\\](.*?)\\[/catlist\\]#is", function($data) use ($cat_list)
{
return check_catlist($data, $cat_list);
}, $tpl->copy_template );
}
if( strpos( $tpl->copy_template, "[not-catlist=" ) !== false ) {
$tpl->copy_template = preg_replace_callback ( "#\\[(not-catlist)=(.+?)\\](.*?)\\[/not-catlist\\]#is", function($data) use ($cat_list)
{
return check_catlist($data, $cat_list);
}, $tpl->copy_template );
}
Автор: https://punpun.name/ (я)