Кэширование ваших страниц может оказаться красивым и полезным механизмом, особенно, если они генерируются средствами PHP и делают множество SQL запросов.
Кэширование ваших страниц в 5 шагов
Перевод: Кузьма Феськов (kuzma@russofile.ru, http://kuzma.russofile.ru)
Кэширование ваших страниц может оказаться красивым и полезным механизмом, особенно, если они генерируются средствами PHP и делают множество SQL запросов.
Как только вы примените кэширование, ваш сервер тут же снизит нагрузку и перестанет съедать много памяти на генерацию страниц ? он просто будет загружать их из КЭШа.
Я покажу вам, как PHP может кэшировать страницы и, в дальнейшем, вы сможете тратить на это минут 5.
На данном этапе, вам понадобится знать 3 вещи.
Ваш сайт генерируется с помощью
PHP? Если нет, то вам, видимо, надо перестать читать этот материал.
Во-вторых, вам необходимо знать, каким образом менять доступ к папкам на сайте на
777.
Если вы не знаете, каким образом это делается -
Google.
И, наконец, вам необходимо знать полный путь до вашей
home директории сайта, обычно это что-то типа
/home/your_name/public_html/.
Ну, теперь приступим к PHP.
Я разложил технологию на самые простые шаги, которые позволят вам довольно легко понять суть метода.
- В домашней директории создаем файлы .htaccess, start_cache.php, end_cache.php, а также папку с названием cache_files.
- Папке cache_files необходимо проставить атрибуты 777.
- Внутри .htaccess файла пропишите следующие строки:
php_value auto_prepend_file /home/username/public_html/start_cache.php
php_value auto_append_file /home/username/public_html/end_cache.php |
Строку /home/username/public_html/ необходимо заменить на путь к вашей домашней директории.
- В скрипт start_cache.php помещаем следующий код:
<?php
// раздел настроек, которые вы можете менять
$settings_cachedir = '/home/username/public_html/cache_files/';
$settings_cachetime = 3600; //время жизни кэша (1 час)
// код
$thispage = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$cachelink = $settings_cachedir.md5($thispage).".html";
if (file_exists($cachelink)) {
$cachelink_time = filemtime($cachelink);
if ((time() - $settings_cachetime) < $cachelink_time) {
readfile($cachelink);die();
}
}
ob_start();
?> |
Не забывайте исправлять путь /home/username/public_html/ на путь к вашей домашней директории.
- А следующий код поместите в скрипт end_cache.php:
<?php
$fp = fopen($cachelink, 'w');
fwrite($fp, ob_get_contents());
fclose($fp);
ob_end_flush();
?> |
...вот, собственно, и все.
Все ваши страницы будут кэшироваться на 3600 секунд.
Этот параметр вы легко можете поменять в скрипте start_cache.php.
Кэш страниц будет сохранен в папке cache_files.
P.S. Примечания от переводчика
Совершенно очевидно, что в данном случае атрибуты 777 являются определенным нарушением безопасности.
В связи с чем, рекомендую вынести папку cahce_files за пределы public_html, например, поместить ее на один уровень выше.
Это закроет доступ к находящимся в ней файлам пользователей вашего сайта, но никак не повлияет на работоспособность системы.
Также, у данного метода есть еще один серьезный недостаток: автор статьи складывает весь кэш в одну папку, что, при достаточном количестве страниц на вашем сайте, вызовет проблему, например, в системах *nix наблюдается достаточное замедление работоспособности при наличие в папке более чем 1000 файлов.
В связи с чем, в алгоритм необходимо внести ряд изменений и раскладывать файлы по отдельным подпапкам внутри папки cache_files.
Например, используя для этого первые 3-4 символа md5 КЭШа.
Для динамических ресурсов вполне возможно выбрать время кэширования в несколько (5-10) секунд или 1-2 минуты, что уже значительно снизит нагрузку на сервер, но не нанесет вреда интерактивности сайта.
Для страниц, для которых особо важна интерактивность, можно ввести исключения в .htaccess, что позволит именно им постоянно изменяться, а страницы, для которых интерактивности не является особо важным фактором, можно применять кэширование.
HIVE: All information for read only. Please respect copyright! |
|