Как правильно настроить кеширование БЕЗ плагинов?

A
На сайте с 06.08.2014
Offline
4
1377

Сейчас стоит W3 Total Cache, но из-за сложности настоек и кучи советов и непоняток хочу отказаться от него. Но не знаю как настроить кеширование без всяких плагинов, что бы сайт быстро работал.

Подскажите как без плагинов?

L
На сайте с 07.12.2007
Offline
351
#1
Absalen:
из-за сложности настоек и кучи советов и непоняток хочу отказаться от него. Но не знаю как настроить кеширование без всяких плагинов, что бы сайт быстро работал.

Без плагинов "непоняток" будет ещё больше и с ними придётся дотошно разобраться. Некорректное кэширование чревато серьезными проблемами с переиндексацией страниц.

Принципиально есть 2 типа кэширования:

1. Кэширование на стороне клиента: http-заголовки If-Modified_Since - LastModified и If-None-Match - Etag.

Оно в целом не ускоряет работу сайта, но если посетитель ранее уже был на странице и она осталась в кэше его браузера - она отобразится из кэша браузера.

2. Кэширование на стороне сервера результатов работы тяжелых скриптов и запросов к БД. Реально может ускорить работу сайта.

Оно плагинами не делается, это ручная работа поиска узких мест.

M
На сайте с 18.05.2009
Offline
108
#2
Подскажите как без плагинов?

Создайте в корне сайта папку cache, права на нее 777. И вот этот код вставьте вместо содержимого index.php (старый индекс.пхп переименуйте)

<?php

if(!preg_match('/(preview=true)/i',$_SERVER['REQUEST_URI'])){

$start = microtime();
$filename = 'cache/'.md5($_SERVER['REQUEST_URI']).'.html';
$cached = false;
$time = 16 * 60 * 60; // Время кеша в секундах (16*60*60 = 16 часов)
$stat = 0; // Установите 1 для вывода времени загрузки страницы (по умолчанию 0)

if (file_exists($filename)) {
if ((time()-filemtime($filename))<$time) {
$cached = true;
} else {
unlink($filename);
$cached = false;
}
}

if ($cached) {
readfile($filename);
} else {
ob_start();

// WP
define('WP_USE_THEMES', true);
require('./wp-blog-header.php');
//

$text = ob_get_clean();

$fh = fopen($filename, 'w+');
fwrite($fh, $text);
fclose($fh);

echo $text;
}
$finish = microtime();

if ($stat==1) echo $finish-$start;

} else {
// WP
define('WP_USE_THEMES', true);
require('./wp-blog-header.php');
//
}

?>

в первой строке здесь стоит исключение для страниц препросмотра записи, они не кешируются (урл содержит "preview=true"), все остальное кешируется (кроме админки, разумеется). Можно добавить свои исключения при необходимости. Если нужно очистить кеш - удалите содержимое папки cache, если нужно на время кеш вырубить - переименуйте файлы обратно (+ можно настроить исключения) .

Данный метод намного эффективней всех гиперкешей и суперкешей в плане создаваемой нагрузки на хостинг и скорости работы сайта. Сайт становится "статикой", на дешевом шареде, например на ihc.ru - (начальный, допустимая нагрузка 42поинтов) держит вплоть до 4-5к уников с "тяжелым" шаблоном. Кеш сбрасывается каждые 16 часов (время регулируется - см. код). Все динамические функции (счетчики, голосование комментарии) работают, вот только результаты их работы доступны после очередного обновления кеша.

Вот еще в этом топике этот метод упоминался /ru/forum/comment/8327853

TF-Studio
На сайте с 17.08.2010
Offline
334
#3

m0ntag

А если юзер залогинен?

Ничего, что там иначе всё должно быть

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
M
На сайте с 18.05.2009
Offline
108
#4

пофиг, в данном варианте кешируется все кроме *preview=true*...Я не кодер, но наверняка можно прописать условие при котором для залогиненых юзеров скрипт не будет срабатывать (там пара строчек по идее, проверить залогинен ли юзер и...)

Кто шарит в пхп, прикрутите плиз проверку на залогиненного юзера к выложенному выше скрипту ...если это возможно.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий