Кеширование блоков
Суть: снизить нагрузку на базу - в блоке запросы будут "включаться" только каждые 3 часа, например.
Проделаем оптимизацию для блока block-Pages.php
1.1. Создаем папку Kesh в корне сайта
1.2. Кидаем в нее два файла ИмяМодуля-conf.php и ИмяМодуля-kesh.php
В нашем случае это будет block-Pages-conf.php такого содержания
PHP - Код | 1 2 3
| <?php $live = 1; //позже мы исправим единичку ?> |
и block-Pages-kesh.php
PHP - Код | 1 2 3 4
| <?php if (!defined("FUNC_FILE")) die("Illegal File Access"); $content = ""; //тут будет хранится кеш ?> |
1.3. Назначаем права 666 на block-Pages-kesh.php
2.1. Модифицируем блок. В принципе тело остается таким же. Немного только добавлений... (всё прокомментировано)
PHP - Код | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| <?php if (!defined('BLOCK_FILE')) { Header("Location: ../index.php"); exit; } //конец начала, которое было
//начало вставки1 $block_name = substr(basename(__FILE__), 0, -4); require_once ("Kesh/".$block_name."-conf.php"); $prinu = intval($_GET['prinu']); $live = $live - mktime() + filemtime("Kesh/".$block_name."-kesh.php"); if ($live<0 OR $prinu=="1") { //конец вставки1
//тело блока, которое было global $prefix, $db; $strip = 25; $result = $db->sql_query("SELECT pid, title FROM ".$prefix."_pages ORDER BY pid DESC LIMIT 5"); while(list($pid, $title) = $db->sql_fetchrow($result)) { $linkstrip = cutstr($title, $strip); $content .= "<table cellspacing=\"0\" cellpadding=\"1\" border=\"0\"><tr><td><img src=\"images/blocks/Pages.gif\" title=\"$title\"></td><td><a href=\"index.php?name=Pages&op=page&pid=$pid\" title=\"$title\">$linkstrip</a></td></tr></table>"; } //конец тела, которое было
//начало вставки2 $fp = fopen("Kesh/".$block_name."-kesh.php", "w"); $content1 = "<?php\nif (!defined(\"FUNC_FILE\")) die(\"Illegal File Access\");\n\n $"."content = \"".addslashes($content)."\";\n?>"; fwrite($fp, $content1); fclose($fp); } else { require_once ("Kesh/".$block_name."-kesh.php"); } //конец вставки2
//ну это тоже было ?> |
3.1. Запустим страницу с блоком, что бы создался кеш - т.е. обновим страницу, на которой присутствует этот блок 1-2 раза, что бы блок не был пустым.
3.2. Установим время жизни block-Pages-conf.php например 3 часа, причем звездочки-умножения для удобства можно оставить
Ну и напоследок.
Я не стал перегружать блок всякими проверками на наличие файлов, что бы не потерять эффекта, так что делайте всё внимательно.
Принудительно обновить кеш можно, передав на страницу с блоком через адресную строку
Дата публикации: 13.08.2007 Прочитано: 10563 раз |
|