[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Приостановление выполнения скрипта для кеширования
Zerstoren
Здравствуйте коллеги.

При создании своего фреймворка, мне требуется врубить "частичное" кеширование (когда кешируется только позиция с точки A до точки Б).
Я видел данную вещь на многих CMSках но не смог найти способ реализации.

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

Существую такие функции?

Или может кто-то посоветуете с реализацией?



Спустя 51 минута, 41 секунда (16.02.2011 - 13:22) LRCenter написал(а):
Для захвата части контента генерируемого скриптом используйте буферизацию - смотрите ob_start() и другие смежные с ней функции. А после захвата можно уже и кешировать и все что угодно делать с ним.

Остановить по команде нельзя (не считая дисконнекта со страницы или exit-a))). Можно только остановить на заранее заданный промежуток времени - см. функцию sleep()

Спустя 52 минуты, 42 секунды (16.02.2011 - 14:15) Zerstoren написал(а):
Слип делает таймаут на странице. И после таймаута продолжает выполнение скрипта.

в любом случае без буферизации не обойтись - это я понимаю.

Заметил что возможно использовать команды break; & continue;
но они не могут быть использованы на высшем уровне.

Если сделать примерно такую конструкцию.

$this->add_lib('cache'); // Подгружаем либу с кешированием

while($this->cache->start('page')): //Смотрим есть ли сейчас кеш, если есть вывести его и вернуть false иначе сделать один цикл
$this->cache->begin() // В функции делаем кешированую копию.

//Проводим код под кеширование


$this->cache->end_cache();
endwhile;



т.е мы получаем все содержимое между точками А и Б при этом не создаем сильных нагрузок.
Конечно конструкция смотрится очень тупо, но она может быть одним из выходов.


Т.к. мой фрейморк уже показал сверх результаты. Но как обычно хочется большего)

Скорость загрузки страницы которая включает:
2 виевера
1 Модель
1 Запрос к базе
1 Библиотеку (API БД)
И конечно контроллер.

0,004-0,008 секунд загрузка полноценной страницы.

Спустя 1 час, 11 минут, 14 секунд (16.02.2011 - 15:26) LRCenter написал(а):
Это на каких мощностях? Блин, у меня просто пустая страница с одним счетчиком грузится 0,05 секунд где-то в среднем smile.gif

Спустя 16 минут, 5 секунд (16.02.2011 - 15:42) Zerstoren написал(а):
http://ukraine.com.ua/ Тариф "Старт"
т.к. это всего навсего виртуальный хостинг то скорость не равномерная.
Преимущественно скачки идут от 0,05 до 1 секунды, по этому я смог выделить из мусорных данных реальную скорость (проверял глубоко ночью)
И преимущественно были цифры от 0,004 до 0,008

Web сервер 6 (web6.ukraine.com.ua) - web сервер

Платформа: Supermicro 6016T-M3F (1U)
MotherBoard: Supermicro X8DTL-3F
CPU: 2 x Intel Xeon E5504 4x2.0, FSB 800Mhz, 45 nm, 80W
RAM: 4 x 2Gb RAM ECC DDR-3 Kingston
HDD: 4 x 146Gb Seagate Cheetah 15K.6 SAS 15000rpm
RAID: Adaptec 5405 Kit 4 ports SAS RAID controller, 256Mb cache (SASx4)

Но конечно вместе с моим сайтом, стоит еще толпа других.

Собственно сам сабж http://test.forum-game.com.ua/
снизу находится стандартный код проверки времени работы скрипта и отожранной памяти во время работы скрипта.


$start_t = microtime ('get_as_float');
$start = memory_get_usage();

// Код

echo memory_get_usage() - $start; echo ' байт<br />';
echo microtime ('get_as_float') - $start_t; echo ' секунд';



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

Спустя 3 часа, 32 минуты, 46 секунд (16.02.2011 - 19:15) LRCenter написал(а):
Zerstoren
Мне кажется что расход памяти недостоверно показывает, надо смотреть memory_get_peak_usage();

Спустя 2 минуты, 40 секунд (16.02.2011 - 19:17) LRCenter написал(а):
У меня таймер такой:

#Начинаем замер времени
function getmicrotime()
{list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);}
$time_start = getmicrotime();

#Код


$time_end = getmicrotime();
$time = $time_end - $time_start;
$time = round($time, 2);

echo"<br />Выполнено за $time сек.";



Спустя 55 минут, 38 секунд (16.02.2011 - 20:13) Zerstoren написал(а):
Цитата (LRCenter @ 16.02.2011 - 16:15)
Zerstoren
Мне кажется что расход памяти недостоверно показывает, надо смотреть memory_get_peak_usage();

Ну, как вы заметили то расход памяти написан исключительно на выполнение кода.

Т.к. если вы попытаетесь запустить чистую страницу memory_get_peak_usage();
то вы увидите что расход начинается не с нуля. А близко 80кб+
Соответственно я выписал реальный расход памяти чисто кодом.

memory_get_peak_usage() поставил. Возросло до 260976 байт. Думаю это более реальные цифры.



Попробовал ваш скрипт)))
Честно он меня улыбнул) http://clip2net.com/clip/m50902/1297876733-clip-18kb.png
Видимо скрипт выполнился за 0,0035 секунд)

Спустя 30 минут, 52 секунды (16.02.2011 - 20:44) LRCenter написал(а):
ага, там округление такое))

Кстати memory_get_peak_usage() показывает расход памяти sql или только php?

Спустя 1 день, 16 часов, 31 минута, 46 секунд (18.02.2011 - 13:16) Zerstoren написал(а):
Все) Решил проблемы.

Конструкция через while весьма глупая была
заменил ее на if


if($this->cache->start('page')):
// Код
$this->cache->end_cache();
endif;


При кешировании страница открывается стабильно 0,001-0,002
Но это если кешировать сразу все. При этом не подключая Либ БД и остальных.

В общем идет все гуд)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.