Для своего сайта делаю кеш. Статические странички лежат в директории. Я получаю сообщение браузера (обрабатываю его), открываю файл и отдаю его браузеру: PHP: if(file_exists($doc_root."/cache/".$cache_filename)) { $bl = file_get_contents($doc_root."/wp-content/cache/".$cache_filename); echo $bl; exit(); return; } В данной реализации меня смущает один момент. Для отображения страницы я использую инструкцию ECHO. Это единственная инструкция передачи содержимого браузеру или есть какие более эффективные альтернативы? Можно ли оптимизировать этот код? Какие есть варианты?
echo нормально. есть ещё print, но эффект тот же самый. лично я предпочитаю больше эхо а оптимизировать можно - убрать return;
Спасибо что уделили мне время. Прошу Вас не засорять темы, открытые мной. Если Вам есть, что по теме сказать, говорите, а общение на другие темы оставим на потом. Поймите правильно. В вашей компетенции никто не сомневается, просто открытые темы предназначены для обсуждения определенных вопросов. Задавая свои вопросы, вы уводите суть темы в другое русло. Таким образом на ответы (для вас) будет потрачено уйма времени, а мои вопросы решаться не будут. Я сам очень общительный человек и всегда поддержу разговор, но данное место не для сторонних разговоров. Здесь много технических специалистов которые как и я ищут ответы на свои вопросы. И чем меньше будет "воды" в темах форума, тем более понятнее будет суть обсуждаемых вопросов. Если Вы хотите пообщаться со мной, свяжитесь со мной лично. Мы обсудим с Вами любые темы. А данные темы прошу оставить для обсуждения только тех вопросов по которым они открыты. Очень надеюсь на Ваше понимание. Спасибо Вам еще раз.
midisa простите, блин, сэр если вам что-то кажется не относящимся к теме, это еще не значит, что не относится. Может у вас кругозор узковат, не задумывались об этом? А стоило бы.
Код (Text): if(file_exists($doc_root."/cache/".$cache_filename)) { readfile($doc_root."/wp-content/cache/".$cache_filename); exit; } Но так не принято, лучше Код (Text): $temp_filename = $doc_root."/cache/".$cache_filename; if(file_exists($temp_filename)) { readfile($temp_filename); exit; } Сервак на Celeron 266 например ? (у меня такой был) Однако igordata тоже прав
GZIP перед отдачей от сервера. На сервере сжимать, можно с помощью буфера обмена. PHP: ob_start('gz_handler'); // action readfile(...) ob_end_flush();
Спасибо за очень хорошую рекомендацию. Хотел уточнить. Таким образом страница будет передаваться браузеру в запакованном виде? У меня очень маленький опыт программирования на php, можете приложить полный код? И скажите на сколько трудоемко будет для сервера сжимать каждую страницу? Идея вроде бы понятна, но я боюсь что не правильно что то напишу и идея будет испорчена.
еще хотел уточнить ... Моя программа которая отдает страничку сайта не сжимает страницу. Но когда запускаю тест, то он мне вроде бы говорит, что страница запакована ... или я что то не пойму. Или это он говорит, что если бы она могла быть запакована? 215 ms page generation time 804 ms page fetch time 14 KB/sec effective transfer speed 53 KB/sec burst download speed 207 ms feed generation time 421 ms feed fetch time 8 KB/sec effective feed transfer speed 6,819 KB/sec burst feed download speed Page size (uncompressed): 39,555 bytes Download size (compressed): 10,716 bytes Bandwidth saved by compression: 72.9% Content ratio: 29.1% Blog If-Modified-Since response: 200 Feed If-Modified-Since response: 200 Тесть вот этот: http://ismyblogworking.com/ Заранее спасибо за помощь.
и еще дополнительный вопрос ... может мне их сжимать не в момент отдачи, а в момент сохранения? Думаю, что если так будет возможно, то так будет более эффективнее? Один раз сжал, а потом просто раздаю. Так возможно реализовать?
наверное так эффективнее, если они действительно не меняются. тогда уж и отдавать их не через php а как статику.
Прошу вас дать комментарий ... нашел в сети информацию: Для того чтобы сжимать страницы нужно в .httacces добавить строку: php_flag zlib.output_compression On и в хеадер сайта добавить строку: if(!ini_get('zlib.output_compression')) { ob_start("ob_gzhandler"); } об этой инструкции ob_end_flush(); ничего не сказано. хотел спросить, правильно ли человек сказал? Нужна ли эта инструкция ob_end_flush() мне? В документации сказано: очищает (отправляет) буфер вывода и отключает буферизацию вывода. Мне ее после echo писать или до echo? А то у меня сомнение по ее работоспособности ... если она очищает буфер, то если поставить перед echo то должна тогда отобразится пустая страница? Ставлю эту инструкцию и до и после ... определить не могу где она более эффективнее будет работать. P.S. Сжатие страниц пока у меня не получается ... Знаний не хватает как нужно правильно делать. Но пусть хотя бы на выходе жмет страницы ... И как можно в браузере посмотреть жмет он страницы или нет? (браузеры все есть).
поставил после echo выкроил примерно 200 миллисекунд. результат очередного теста: 211 ms page generation time 605 ms page fetch time 18 KB/sec effective transfer speed 54 KB/sec burst download speed 208 ms feed generation time 405 ms feed fetch time 8 KB/sec effective feed transfer speed 7,740 KB/sec burst feed download speed Page size (uncompressed): 39,744 bytes Download size (compressed): 10,793 bytes Bandwidth saved by compression: 72.8% Content ratio: 29.0% Blog If-Modified-Since response: 200 Feed If-Modified-Since response: 200 супер! уже очень близко к желаемому результату.
midisa ты может их хранить будешь на виртуальном диске в оперативной памяти тогда уж. Небось x10 ускорится.