Re: Re[2]: кеширование

AlexeyK itsmegawtf at gmail.com
Thu Jun 21 16:40:33 MSD 2007


2007/6/21, AleXXX V. NovikoFF <mail at alexxx.ru>:
>
> У меня вот так сделано:
>
> <?
> $fp=fopen("portal.log", "r"); // открыли время последнего изменения
> $r=trim(fgets($fp, 11));
> fclose($fp);
> if(time()-$r<60){ // 1 минута
>     echo implode("", file("portal.txt")); // выдали кеш юзеру
>     echo "\n\n<!-- FROM CACHE -->";
> }else{
>
>     set_time_limit(60);
>     ignore_user_abort(true); // чтобы кеш не сломался
>     ob_start();
>
> ?>
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <HTML>
> <HEAD>
>  тра-ля-ля что-то тут генерится и т.д.
> ....
>
> </HTML>
> <?
>
> $out=ob_get_contents();
> ob_end_clean();
>
> // сохранили кеш
> $fp=fopen("portal.txt", "w");
> fputs($fp, $out);
> fclose($fp);
> // записали время сохранения
> $fp=fopen("portal.log", "w");
> $r=fputs($fp, time());
> fclose($fp);
>
> };
>
> ?>
>
> Собственно решение "в лоб" - но снизило нагрузку раз в 10, страница посещаемая...
>
>
>
>
> On Thu, 21 Jun 2007 12:25:09 +0300
> Sergey Smitienko <hunter at comsys.com.ua> wrote:
>
> SS>  Вам поможет ob_start() & Co. По 5-6 строчек на каждый php файл.
> SS> > Да-да, кто бы еще популярно показал, как это делается без переделки уже
> SS> > имеющегося php кода...
> SS> >
> SS> --
> SS> Sergey Smitienko
> SS>
> SS>
>
> --
> AleXXX V. NovikoFF <mail at alexxx.ru>
>
>
>


А не проще ли временную метку брать каким-то stat(), а не
записью/чтением из/в файл ? :)

+ если php > 4, то разумнее file_get_contents()/file_put_contents();

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

Чем меньше в данной ситуации будет абстракций вокруг функционала
системы/вебсервера, тем быстрее будет работать подобный псевдо-кеш :)


More information about the nginx-ru mailing list