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

Поиск:

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


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


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

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



Статья вот тут: http://vingrad.ru/PHP-ART-003003
Обсуждение ниже.
PM ICQ   Вверх
Opik
Дата 18.5.2006, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



Mal Hack
Мало, ни memcache, ни Pear:Cache толком ничего нету  
PM MAIL Skype   Вверх
Mal Hack
Дата 18.5.2006, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Это несколько другое. PEAR я не воспринимаю в принципе. 
PM ICQ   Вверх
-=Ustas=-
Дата 18.5.2006, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



Цитата(Opik @  18.5.2006,  17:39 Найти цитируемый пост)
 ни memcache

Не мог бы малость просветить по этому поводу?!

Mal Hack, такой подход естественно не имеет смысла. Имеет смыл когда контент генерится блоками, и затем эти блоки кэшируются... Лично у меня такой подход... 


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Mal Hack
Дата 19.5.2006, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(-=Ustas=- @  18.5.2006,  22:43 Найти цитируемый пост)
Mal Hack, такой подход естественно не имеет смысла. Имеет смыл когда контент генерится блоками, и затем эти блоки кэшируются... Лично у меня такой подход...  

Да, это хороший подход. Но не сразу люди видят, как все на блоки разбить, а статья должна дать в данном случае общий алгоритм.
Кстати на счет блоков, не всегда факт.. К примеру есть блок верхней панельки, который зависит от пользователя. Как быть в таком случае?
Да, можно разбить  все на более мелкие блоки, но ИМХО, это не удобно. 
PM ICQ   Вверх
Opik
Дата 19.5.2006, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



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

-=Ustas=-
http://ee.php.net/memcache
Если коротко: хранение данных в памяти, может использоваться как кеширование. Подробнее по ссылке выше.

Туда же:
http://ee.php.net/apc
http://ee.php.net/shm
http://pear.php.net/package/Cache
http://pear.php.net/package/Cache_Lite 
PM MAIL Skype   Вверх
-=Ustas=-
Дата 19.5.2006, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



Цитата(Mal Hack @  19.5.2006,  00:06 Найти цитируемый пост)
К примеру есть блок верхней панельки, который зависит от пользователя. Как быть в таком случае?

Элементарно, у меня хеш-ключи для имен файлов кеша формируются из данных: URI, текущая page (если она есть), и если пользователь зареган, то естественно и его id-ишник цепляется. Т.е. перекрестного подцепления не может быть в принципе.

Цитата(Mal Hack @  19.5.2006,  00:06 Найти цитируемый пост)
Да, можно разбить  все на более мелкие блоки, но ИМХО, это не удобно.  

Ну это смотря как посмотреть, и смотря какой подход использует сам программист. Например у меня свой класс шаблонов (простой, но работает так как мне надо), он у меня работает с html-шаблонами, в которых хтмл и дескрипторы вида {PANEL}. Т.е. у меня идет блочное формирование, поэтому проблем и запутывания абсолютно нет, все ясно и понятно smile В кратце, допустим есть страница:
Код

<HTML>
<head>
    <title>{TITLE}</title>
</head>
<body>
<table>
    <tr><td>
        {RANDOM}
    </td></tr>
    <tr><td>
        {PANEL}
    </td></tr>
    <tr><td>
        {CONTENT}
    </td></tr>
</table>
</body>
</HTML>

У нас есть три блока, которые заменяются другими блоками подключенных html-шаблонов.
Код

<?php
// index.php

$keyCache = (empty($_SERVER['QUERY_STRING'])) ? 'index' : $_SERVER['QUERY_STRING'];
$keyCache .= (isset($_SESSION['userID'])) ? $_SESSION['userID'] : '';

// Есть методы GetElementCache и MakeElementCache, которые формируют из переданного ключа хеш и проверяют имя файла

// Мы получили этот шаблон $_CONTENT_TMPL
// Теперь нам надо сформировать три блока контента для последующей замены в шаблоне
$_RANDOM_BLOCK  = '';
$_PANEL_BLOCK   = '';
$_CONTENT_BLOCK = '';

// {RANDOM} - получаем его без кеша, т.к. он нам нужен живой, хотя функция GetElementCache принимает 
// параметр - время в минутах (время хранения), можно поставить минут 10, этого достаточно будет, ну да ладно

if (!$_PANEL_BLOCK = GetCacheElement('panel-blocks', $keyCache, 60)) {
    // допустим функция GetCacheElement возращает контент файла кеша, в противном случае FALSE
    // если этот файл уже старый, то функция удаляет его и возращает FALSE
    // если данного файла нет, то формируем этот блок
    ...
    ...
    ...
    ...
    // Сформировали, теперь надо его закешировать
    // при условии что контент поблочный, таким образом $_PANEL_BLOCK 
    // содержит готовый сгеренеренный хтмл
    MakeCacheElement('panel-blocks', $keyCache, $_PANEL_BLOCK);
    // функции передаем имя для файла, ключ для файла, и сам контент блока
    // в итоге у нас получается файлик с именем panel-block-8df17c77af23061ef4322d47d6c431fa.cache
    // который уже при обновлении текущей страницы уже подключиться выше, и генерация контента уже выполняться не будет
    // Все, кеш для данного блока готов
}

...
...
...
// Остальные блоки

// Т.е. вся работа делается с помошью двух функций
// Далее идет замена дескрипторов на блоки и все готово

?>


Конечо, такой подход может показаться на первый взгляд немного муторным, но я уже привык и практически не замечаю этого smile
Зато сервак разгружает очень даже заметно! 


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
AztEK
Дата 20.5.2006, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



-=Ustas=-,  а как быть с блоками, которые сами по себе генерируются рандомно (типа "случайная новость" и проч.)? И ещё, какая логика у скрипта, управляющим кешированием? В каком случае страница убирается из кеша?

Добавлено @ 08:26 
Виноват, не страница а блок. 


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
-=Ustas=-
Дата 20.5.2006, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



Цитата(AztEK @  20.5.2006,  08:26 Найти цитируемый пост)
-=Ustas=-,  а как быть с блоками, которые сами по себе генерируются рандомно (типа "случайная новость" и проч.)? 

Я же упомянул об этом smile Такие блоки в кэш не помещать просто напросто.
Цитата(AztEK @  20.5.2006,  08:26 Найти цитируемый пост)
И ещё, какая логика у скрипта, управляющим кешированием? В каком случае страница убирается из кеша?

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


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
IZ@TOP
Дата 6.6.2006, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



Сейчас появилась интересная тема использования перенаправляющих легких HTTP серверов типа nginx. Советую почитать по этой теме. 


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Empirik
Дата 8.9.2006, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Форумчане, по поводу кеширования, скажите пожалуйста, можно ли перехвотить вывод в стандартный поток в php? Ну тоесть перехватить данные которые уходят при помощи вызова функций print и echo ? 
--------------------
Постоянно удивляюсь человеческой фантазии напридумывают гаджетов
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 8.9.2006, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Empirik, а я о чем в статье писал???
PM ICQ   Вверх
Empirik
Дата 10.9.2006, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ты как раз об этом и писал. Позволь мою мысль объяснить немного конкретней. В класическом случаее кеширование осуществляеться по следующей схеме: все сохраняеться в какую то глобальную переменную, или в простую переменную и потом записываеться в файл и выводиться пользователю. Это не совсем удобно потому, что сначало нужно сформировать весь контент в одной переменной, ну или в нескольких. 
   Меня же интересовало, как можно не формируя контент в одной переменной, а копируя то что уходит пользователю, кешировать страницы.  Поясню примерным примером: 

Стандартный процесс кеширования
Код

$pagebody="";//переменная в котору

$pagebody='<table width="100%">';//собираем страницу или блок 
//....

$pagebody='</table>';

fwrite($fd,$pagebody);//кешируем страницу или блок

print $pagebody//Выводим пользователю


А хотелось бы что бы кеширование производилось следующим образом 

Код

start_cache("some_file_name");//начинаем кеширование

print '<table width="100%">';//собираем страницу или блок 
//....

print '</table>';

end_cache();//заканчиваем кеширование

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


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


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

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



Empirik, читай статью внимательно. Я писал именно о том, КАК ПЕРЕХВАТИТЬ САМ ВЫВОД...
Никаких переменных у меня там нет.
PM ICQ   Вверх
Vaulter
Дата 10.9.2006, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Empirik, читай про
ob_start();
ob_end_flush();
ob_list_handlers(); например еще smile


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

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

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


 




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


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

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