О кешировании в php движках. Наглядное тестирование


Здесь приведён простой код, позволяющий владельцу сайта получить достоверную и важную суммарную информацию о эффективности применённого кеширования страниц, показываемых незалогиненным пользователям

Зачем это нужно

Будучи админом хостинового сервера, я систематически оказывался в ситуации, когда с точки зрения вебмастера сайт работает нормально, однако нагрузку на сервер при росте посещаемости создаёт совершенно недопустимую. Лень, низкая квалификация вебмастера приводили к необходимости наглядной демонстрации ответа на вопрос "а в чём собственно проблема?!".

Кроме того, настроенное наиболее эффективно кеширование средствами "статические html файлы + nginx", а особено "memcahced + nginx" не оставляет "за собой" ясно видимой статистики, ибо чтобы сохранить эту самую статистику, её надо куда-то записать, "а у нас места нет :)", и такая запись сильно снизит эффективность.

Надо чтобы получившийся код показывал интересующие данные без стандартной процедуры логина в CMS, так как в залогиненном состоянии большинство разумно написанных CMS страницы не кешируют, а обращения ко многим модулям при редактировании контента сильно искажают число запросов к базе.

Поэтому захотелось написать код, который бы:

  1. Авторизовался бы другим способом, нежели вебмастер сайта - проще всего по ip адресу пришедшего
  2. Не обращался бы к базе и прочим частям анализируемой CMS - но знал бы, какие функции об этом спросить
  3. Показывал бы, когда записан кэш анализируемой страницы - а для этого надо записать момент времени, когда страница генерировалась (PHP кодом поставить куку), записать его в составе Javascript кода, выдаваемого страницей, и уже в Яваскрипте проверить, стоит ли "наша" кука, и сколько времени прошло.
Заодно этот код является интересным КОРОТКИМ примером того, каким образом получается "спагетти-код" на трёх содержательных языках (html, php, javascript) в их тесном взаимодействии.

Собственно код для Вордпресса

Вставляется перед </body> в файл footer.php темы, вместо 127.0.0.1 вписываем внешний IP адрес того, кому надо показывать результат.

<?php if ($_SERVER['REMOTE_ADDR'] == '127.0.0.1') { ?>
<!-- + Sergej Qkowlew added for memcached effectivity analysing -->
<div style="position:absolute; top:15px; right: 0px;">Память: <?php echo round(memory_get_usage()/1024/1024, 2); ?>MB,
<BR>Запросов SQL: <?php echo get_num_queries(); ?>,
<BR>PHP работал <?php timer_stop(1); ?>секунды.
<BR>Кеш записан
<SCRIPT type="text/javascript">
var timestart=<?php $timestart=sprintf("%u",time()); echo $timestart; ?>;
document.write(' ' + (parseInt(new Date().getTime()/1000)-timestart) + ' ');
</SCRIPT>
секунд назад<BR>
<?php setcookie("SqCookieName", $timestart); ?>
<SCRIPT type="text/javascript">
SqCookieName='SqCookieName';
var matches = document.cookie.match(new RegExp(
    "(?:^|; )" + SqCookieName.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
  ));
if (matches) { document.write('...этим браусером'); }
else {
document.write('...кем-то другим');
}
</SCRIPT>
</div>
<!-- - Sergej Qkowlew added for memcached effectivity analysing -->
<?php } ?>