Исходники
Статьи
Языки программирования
.NET Delphi Visual C++ Borland C++ Builder C/С++ и C# Базы Данных MySQL MSSQL Oracle PostgreSQL Interbase VisualFoxPro Веб-Мастеру PHP HTML Perl Java JavaScript Протоколы AJAX Технология Ajax Освоение Ajax Сети Беспроводные сети Локальные сети Сети хранения данных TCP/IP xDSL ATM Операционные системы Windows Linux Wap Книги и учебники
Скрипты
Магазин программиста
|
PHP - Простое кэшированиеВ данной статье рассматривается один из самых простых способов кэширования подкачиваемых файлов, SQL запросов и других медленно создаваемых частей ваших страниц. Язык программирования: PHP Что должно быть на главной странице ?? Правильно, там должно быть понемножку от каждого раздела сайта. И конечно Ваша страница строится автоматически, исходя из содержимого форумов, новостных лент и других разделов сайта. Сколько SQL запросов выполняется при загрузке главной страницы ?? Сколько блоков подкачивается с других сайтов ?? Сейчас мы рассмотрим простой и эффективный способ кэширования данных такого рода. В качестве примера рассмотрим случай импорта новостей с внешнего сервера: http://news.novgorod.ru/ultramode.txt Наша задача получить этот файл, обработать его и вывести его пользователю. Программа делающая это, выглядит следующим образом: <? $d=@file("http://news.novgorod.ru/ultramode.txt"); for ($i=0;$i<11;$i++) { $msg=$d[2+$i*8]; $url=$d[3+$i*8]; $date=$d[4+$i*8]; print "<a href='http://news.novgorod.ru".trim($url)."'>"; print trim($msg)."</a> (".$date.")"; } ?> При каждой загрузке нашей страницы происходит обращение к внешнему серверу news.novgorod.ru, оттуда по протоколу HTTP скачивается файл ultramode.txt. А теперь представим ситуацию, что сервер находится на другом конце планеты и соединение, а тем более передача файла занимает достаточно больше время. Или более того, сервер может быть временно недоступен. Вывод. Зачем каждый раз подгружать файл ultamode.txt, если новости обновляются не чаще одного раза в два-три часа?? Правильно. Надо кэшировать. А делать мы это будем очень просто. Как вы могли заметить, в первой строке файла хранится комментарий. Комментарий нам не нужен и на его месте можно замечательно разместить дату последнего обновления файла. Алгоритм работы следующий:
Ниже приведен код проделывающий все это: <? // считываем файл из кэша $d=@file("/tmp/news.cache"); $fs=trim($d[1]); // Если файл не обновлялся 3600 секунд (1 час) или файл пуст, // то обновляем его if (intval($d[0])<time()-600 || empty($fs)) { $d=@file("http://news.novgorod.ru/ultramode.txt"); $fs=trim($d[1]); // Сохраняем новую версю в кэше if (!empty($fs)) { $fw=fopen("/tmp/news.cache","wt"); flock($fw, LOCK_EX); // В первую строку запишем текущее время fputs($fw,time()."\n"); // Сохраним остальные строки for ($i=1;$i<count($d);$i++) fputs($fw,trim($d[$i])."\n"); fclose($fw); } // Если, почему-то, файл не был скачан, // то воспользуемся кэшированной версией else $d=@file("/tmp/news.cache"); } // Вывод данных for ($i=0;$i<11;$i++) { $msg=$d[2+$i*8]; $url=$d[3+$i*8]; $date=$d[4+$i*8]; print "<a href='http://news.novgorod.ru".trim($url)."'>"; print trim($msg)."</a> (".$date.")"; } Вот и все. Таким же образом можно кэшировать и SQL запросы. Используя этот механизм мне удалось уменьшить время создания главной страницы с 1.5 сек до 0.05 сек |
Форум Программиста
Новости Обзоры Магазин Программиста Каталог ссылок Поиск Добавить файл Обратная связь Рейтинги
|