За последние 24 часа нас посетили 19504 программиста и 1610 роботов. Сейчас ищут 927 программистов ...

Можно ли оптимизировать этот код?

Тема в разделе "Прочие вопросы по PHP", создана пользователем midisa, 12 авг 2011.

  1. midisa

    midisa Активный пользователь

    С нами с:
    12 авг 2011
    Сообщения:
    46
    Симпатии:
    0
    Для своего сайта делаю кеш.

    Статические странички лежат в директории.
    Я получаю сообщение браузера (обрабатываю его), открываю файл и отдаю его браузеру:

    PHP:
    1.  
    2. if(file_exists($doc_root."/cache/".$cache_filename))
    3. {
    4.     $bl = file_get_contents($doc_root."/wp-content/cache/".$cache_filename);
    5.     echo $bl;
    6.     exit();
    7.     return;
    8. }
    9.  
    В данной реализации меня смущает один момент. Для отображения страницы я использую инструкцию ECHO.
    Это единственная инструкция передачи содержимого браузеру или есть какие более эффективные альтернативы?
    Можно ли оптимизировать этот код? Какие есть варианты?
     
  2. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    echo нормально. есть ещё print, но эффект тот же самый. лично я предпочитаю больше эхо :)
    а оптимизировать можно - убрать return;
     
  3. midisa

    midisa Активный пользователь

    С нами с:
    12 авг 2011
    Сообщения:
    46
    Симпатии:
    0
    Спасибо Вам за консультацию. Удачного Вам дня.
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    PHP:
    1. exit($bl);
    =)
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    что ж за нагрузка такая, что на файликах все кешируется? =) миллионы людей?
     
  6. midisa

    midisa Активный пользователь

    С нами с:
    12 авг 2011
    Сообщения:
    46
    Симпатии:
    0
    Спасибо что уделили мне время. Прошу Вас не засорять темы, открытые мной. Если Вам есть, что по теме сказать, говорите, а общение на другие темы оставим на потом.
    Поймите правильно.
    В вашей компетенции никто не сомневается, просто открытые темы предназначены для обсуждения определенных вопросов. Задавая свои вопросы, вы уводите суть темы в другое русло.
    Таким образом на ответы (для вас) будет потрачено уйма времени, а мои вопросы решаться не будут.
    Я сам очень общительный человек и всегда поддержу разговор, но данное место не для сторонних разговоров.
    Здесь много технических специалистов которые как и я ищут ответы на свои вопросы.
    И чем меньше будет "воды" в темах форума, тем более понятнее будет суть обсуждаемых вопросов.

    Если Вы хотите пообщаться со мной, свяжитесь со мной лично. Мы обсудим с Вами любые темы.
    А данные темы прошу оставить для обсуждения только тех вопросов по которым они открыты.

    Очень надеюсь на Ваше понимание.
    Спасибо Вам еще раз.
     
  7. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    midisa
    простите, блин, сэр

    если вам что-то кажется не относящимся к теме, это еще не значит, что не относится.
    Может у вас кругозор узковат, не задумывались об этом? А стоило бы.
     
  9. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Код (Text):
    1. if(file_exists($doc_root."/cache/".$cache_filename)) {
    2.     readfile($doc_root."/wp-content/cache/".$cache_filename);
    3.     exit;
    4. }
    Но так не принято, лучше
    Код (Text):
    1. $temp_filename = $doc_root."/cache/".$cache_filename;
    2. if(file_exists($temp_filename)) {
    3.     readfile($temp_filename);
    4.     exit;
    5. }
    Сервак на Celeron 266 например ?
    (у меня такой был)

    Однако igordata тоже прав
     
  10. Greg1978

    Greg1978 Активный пользователь

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    GZIP перед отдачей от сервера.
    На сервере сжимать, можно с помощью буфера обмена.

    PHP:
    1. ob_start('gz_handler');
    2. // action
     
  11. midisa

    midisa Активный пользователь

    С нами с:
    12 авг 2011
    Сообщения:
    46
    Симпатии:
    0
    Спасибо за очень хорошую рекомендацию.
    Хотел уточнить. Таким образом страница будет передаваться браузеру в запакованном виде?

    У меня очень маленький опыт программирования на php, можете приложить полный код?
    И скажите на сколько трудоемко будет для сервера сжимать каждую страницу?

    Идея вроде бы понятна, но я боюсь что не правильно что то напишу и идея будет испорчена.
     
  12. midisa

    midisa Активный пользователь

    С нами с:
    12 авг 2011
    Сообщения:
    46
    Симпатии:
    0
    еще хотел уточнить ...
    Моя программа которая отдает страничку сайта не сжимает страницу.
    Но когда запускаю тест, то он мне вроде бы говорит, что страница запакована ... или я что то не пойму. Или это он говорит, что если бы она могла быть запакована?

    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/

    Заранее спасибо за помощь.
     
  13. midisa

    midisa Активный пользователь

    С нами с:
    12 авг 2011
    Сообщения:
    46
    Симпатии:
    0
    и еще дополнительный вопрос ... может мне их сжимать не в момент отдачи, а в момент сохранения? Думаю, что если так будет возможно, то так будет более эффективнее?
    Один раз сжал, а потом просто раздаю.
    Так возможно реализовать?
     
  14. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    наверное так эффективнее, если они действительно не меняются. тогда уж и отдавать их не через php а как статику.
     
  15. midisa

    midisa Активный пользователь

    С нами с:
    12 авг 2011
    Сообщения:
    46
    Симпатии:
    0
    Прошу вас дать комментарий ...
    нашел в сети информацию:
    Для того чтобы сжимать страницы нужно в .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. Сжатие страниц пока у меня не получается ... :) Знаний не хватает как нужно правильно делать. Но пусть хотя бы на выходе жмет страницы ... И как можно в браузере посмотреть жмет он страницы или нет? (браузеры все есть).
     
  16. midisa

    midisa Активный пользователь

    С нами с:
    12 авг 2011
    Сообщения:
    46
    Симпатии:
    0
    поставил после 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

    супер! уже очень близко к желаемому результату.
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    midisa
    ты может их хранить будешь на виртуальном диске в оперативной памяти тогда уж. Небось x10 ускорится.