19.06.13, 19:14
0 комментарий
  DLE Баг-Фиксы

Баг нагрузки в smartphone версии сайта

Выявлена небольшая проблема - на мобильном шаблоне жутко тормозит сайт. Проверил у себя, и действительно, разница чувствительная. Как выяснилось собаку нам подложил rss информер.

Вот на обычном шаблоне:
<!-- Время выполнения скрипта 0,05095 секунд -->
<!-- Время затраченное на компиляцию шаблонов 0,00322 секунд -->
<!-- Время затраченное на выполнение MySQL запросов: 0,00235 секунд -->
<!-- Общее количество MySQL запросов 1 -->
<!-- Затрачено оперативной памяти 1,67 MB -->

И вот на мобильном:
<!-- Время выполнения скрипта 0,16195 секунд -->
<!-- Время затраченное на компиляцию шаблонов 0,0035 секунд -->
<!-- Время затраченное на выполнение MySQL запросов: 0,00139 секунд -->
<!-- Общее количество MySQL запросов 1 -->
<!-- Затрачено оперативной памяти 1,76 MB -->

И это на локалке, с одним посетителем при включенном кешировании.
Меня это реально зацепило и было решено в этом основательно разобраться. Сам процесс поиска и вычисления описывать не буду, опишу лишь саму суть бага. Как выяснилось собаку нам подложил rss информер.

Если открыть файл шаблона rss информера, templates/smartphone/informer.tpl, то увидим, что он девственно чист. Якобы нам это не надо в смартфон версии. Но вот в этом-то как раз и заключается вся проблема.

Теперь перейдем к php, файл engine/modules/rssinform.php.

Смотрим на строку:

$buffer = dle_cache( "informer_" . $value['id'], $config['skin'] );


Как видно, кеш создается индивидуально для каждого шаблона свой. Вот тут-то и сыграл плохую шутку пустой шаблон informer.tpl. Весь код обрабатывается и файл шаблона создается, но он пустой! А дальнейшие проверки проводятся исходя из того, есть ли в переменной что-то или нет. Т.е. дальнейший обработчик не отличает, существует ли переменная в принципе или она просто пустая. У нас как раз второй случай, т.е. файл кеша создан успешно, но он пустой как файл шаблона. Из-за этого обработчик считает, что кеша вообще нету!

Фикс проблемы:
Открыть файл engine/modules/rssinform.php и найти код:
if ( $buffer ) {


Заменить на:
if ( $buffer!==false ) {


Найти далее код:
if( ! $buffer ) {


Заменить на:
if( $buffer===false ) {


Готово!

Версия DLE: 9.x-10.0
Автор: Sander

Напишите своё мнение