Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Псевдо-кэширование на сервере 
:(
    Опции темы
Empirik
Дата 10.9.2006, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 28.10.2005
Где: Россия, Пермь

Репутация: нет
Всего: 1



Код

ob_start();    
// Тут идет работа скрипта. Т.е., если файла нет,    
// то пользователю будет сгенерирована страница с информацией.    
Print $content;    
$str = ob_get_contents(); // получаем в переменную то, что сгенерировал скрипт.    
/* Создаем кэш файл */    
$f = fopen( «.......» , «w» );    
fwrite( $f , $str );    
fclose( $f );    
ob_end_flush();


Можешь привести код работы функций ob_start() и ob_end_flush() и как я понял, строку 
Print $content; - ты просто написал для примера?

Добавлено @ 12:22 
Всем спасибо разобрался
--------------------
Постоянно удивляюсь человеческой фантазии напридумывают гаджетов
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 10.9.2006, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Цитата(Empirik @  10.9.2006,  13:19 Найти цитируемый пост)
Print $content; - ты просто написал для примера?

Да. Это любой вывод в STDOUT.
PM ICQ   Вверх
Eugene_Bond
Дата 10.9.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 3.9.2006

Репутация: 1
Всего: 4



добавлю свои 5 копеек

Цитата

Минус этого подхода, что он сильно ограничит возможности нашего движка и сайта в целом. Нам уже не будет так легко сменить дизайн или в «шапке» вставить новый логотип. Т.е. система получается не универсальной.

использование shtml тут поможет. судя по всему такой способ генерации контента остается наиболее подходящим для новостных порталов и прочих аналогичных сайтов расчитаных на большую нагрузку.
чем генерить статику и управлять ей - это уже детали..

Это же касается "частичного" кеширования страницы ("Тут надо несколько усложнять, и делать кэш частичный, т.е. все что было описано выше надо проделать только над той частью, которая генерирует основной контент").


Ну и главное:
есть тот же Смарти, который замечательно решает все эти вопросы. Как кеширование отдельных шаблонов, так и запрет на кеширование отдельных частей закешированных шаблонов.
PM MAIL   Вверх
ST_Falcon
Дата 1.11.2006, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 14.11.2003
Где: Львов

Репутация: нет
Всего: 1



Mal Hack, ИМХО для твоего уровня статья слабенькая... все очень поверхносно, не описаны механизмы кеширования в Smarty, PEAR Cache, PEAR Cache Lite. еще было бы очень интересно посмотреть на сравнение производительности при использовании различных инструментов кеширования...
PM MAIL ICQ   Вверх
Mal Hack
Дата 1.11.2006, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Цитата(ST_Falcon @  1.11.2006,  16:14 Найти цитируемый пост)
все очень поверхносно, не описаны механизмы кеширования в Smarty, PEAR Cache, PEAR Cache Lite.

А я и не ставил себе такую задачу. Я ставил задачу показать возможности и простейший алгоритм для релизации своего кэширующего механизма.
PM ICQ   Вверх
vdim
Дата 31.8.2008, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 19.4.2008

Репутация: нет
Всего: нет



где статью-то можно почитать?
Ссылка перенаправляет на http://forum.vingrad.ru/faq/topic-82069.html , где одни комментарии.
PM MAIL   Вверх
Mal Hack
Дата 31.8.2008, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



PM ICQ   Вверх
Sanchezzz
  Дата 30.6.2009, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 2
Всего: 60



может не к теме немного но вот мой велик на кеш данных:

Код

class cache {
    public  $cache_dir;   // путь до папки с кэшем
    private $time;
    private $lastCache; // последние данные c которыми работали.
    
    public function __construct(){
        $this->cache();
    }

    public function cache(){
        $this->cache_dir = $_SERVER['DOCUMENT_ROOT']."/cache/";
        if(!is_dir($this->cache_dir)){
            mkdir($this->cache_dir , 0755);    
        }
        $this->time = time();        
    }
    // Получить кэш
    public function GetCache($keyName){
        if(file_exists( $this->cache_dir . md5($keyName).".cache"))
            $cache_content = $this->FileRead($this->cache_dir .md5($keyName).".cache" );            
        if(strlen($cache_content)>0)
            $cacheData = unserialize($cache_content);
            else $cacheData = "";
            $this->lastCache = $cacheData;
        return $cacheData;    
    }
    //функция проверяет дату обновления и если вообще кэш
  
    public function isCache($keyName , $timeMinus = 0){
        if(file_exists( $this->cache_dir . md5($keyName).".cache")){
            $cache_content = $this->FileRead($this->cache_dir . md5($keyName).".cache");
            $cacheData = unserialize($cache_content);
            $this->lastCache = $cacheData;
            if((time() - $timeMinus) >= $cacheData['update_time']) return false; else return true;            
        }
        return false;
    }
    
    // Получить временный кэш c которами работали.
    public function GetLastTmpCache(){
        return $this->lastCache;
    }    
    // Записывает кэш
    public function SetCache($var, $keyName , $time = 3600){        
        $cacheData = array();
        //$scalar = is_scalar($var);    
        $cacheData = array(
            'data'=> $var ,                    // данные
            'time'=>$this->time,              // последние изменения
            'update_time'=>$this->time + $time // когда должно обновится
        );                
        $cache_content = serialize($cacheData);    
        $this->FileWrite($this->cache_dir . md5($keyName).".cache" , $cache_content);    
    }
    // Очистить весь кэш
    public function ClearALLCache(){
        $handle = opendir($this->cache_dir);
         while($file = readdir($handle)) {
          if(is_file($file)) unlink($file);        
         }
         closedir($handle);
    }
    // Удалить кэшь по параметру
    public function ClearCache($keyName){
        if($keyName=='') return false;
        $keyName = md5($keyName);
        if(file_exists($this->cache_dir .$keyName )){
            unlink( $this->cache_dir . $keyName );
            return true;
        }
        return false;
    }
    // Открыть файл
    public function FileRead($path){
            clearstatcache(); //нужно
            if(!file_exists($path) || !is_file($path) || !is_readable($path) ) return false;
             if(filesize($path)<=0) return "";
                 $fd = fopen($path, "rb");
                 $contents = fread ($fd, filesize($path));
                 fclose ($fd);
            return $contents;
    }    
    // Перезаписать файл
    public function FileWrite($path, $contents , $unlock = false, $chmod = 0755){
            if(file_exists($path)) chmod($path,$chmod);
            if($file = fopen($path, "w+")){
                  if($unlock!=false) flock($file, LOCK_EX);
                    fwrite($file, $contents);
                  if($unlock!=false) flock($file, LOCK_UN);
                    fclose($file);
                    chmod($path,$chmod);
                    return true;
             } else return false;
    }

}


как пользоватся:
Код

$cache = new cache(); // вызов класса
$writecache = false;

// эта функция проверят если кеш, если есть то берем его и заполняет временный кеш класса.
// если нету то заполняет кеш новыми данными
// _RESULTS_  это для поиска среди кешевых файлов. 
if(!$cache->isCache('_RESULTS_') ){
    $arr = array();
    mysql_connect('localhost','root','');
    mysql_select_db('CMS');
    $res = mysql_query('SELECT * FROM `block_items` WHERE 1');
    
    while ($row = mysql_fetch_assoc($res)):
        $arr[] = $row;
    endwhile;
    //записываем кеш    
    $cache->SetCache($arr, '_RESULTS_');
  $writecache = true; 
}else

// так как вверху используется кашировла проверка isCache
// которая проверяет если кеш, если дата старая то вносим данные новые и заполняем времменный кеш класса

$arr = $cache->GetLastTmpCache(); // отдаем обратно кеш.

print_r($arr);


Минусы и плюсы в этом методе решать вам. 

Это сообщение отредактировал(а) Sanchezzz - 30.6.2009, 07:44


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Elfet
Дата 24.1.2010, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



а где статья? smile


--------------------
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.1007 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.