За последние 24 часа нас посетили 17448 программистов и 1721 робот. Сейчас ищут 1522 программиста ...

Буферизация вывода и быстрые шаблоны

Тема в разделе "PHP для новичков", создана пользователем 440Hz, 11 авг 2006.

  1. virabhadra

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

    С нами с:
    11 дек 2006
    Сообщения:
    127
    Симпатии:
    0
    Адрес:
    Praha, Czech Republic
    Так пусть код будет максимально простым и без наворотов, чтобы не терять наглядность.
     
  2. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    А в чем смысл такого ограничения?
     
  3. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    это как пример был. хочешь расширить функциональность - пожалуйста. у меня в рабочей верссии можно черта в ступе передать.
     
  4. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    понял.
     
  5. newnoob

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

    С нами с:
    8 авг 2006
    Сообщения:
    151
    Симпатии:
    0
    Соеденил 2 статьи (Эту и webscript.ru/stories/03/04/11/6874707 ), мот кому и пригодиться для примера, новичкам...

    rapidshare.com/files/10783761/simple.rar
     
  6. virabhadra

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

    С нами с:
    11 дек 2006
    Сообщения:
    127
    Симпатии:
    0
    Адрес:
    Praha, Czech Republic
    И все же как оценить скорость выполнения кода РНР?
    Например, какой из двух кодов будет быстрее:
    PHP:
    1. echo 'bla-bla-bla';
    2. echo 'bla-bla-bla';
    3. echo 'bla-bla-bla';
    4. echo 'bla-bla-bla';
    5. echo 'bla-bla-bla';
    или
    PHP:
    1. $buffer = '';
    2. $buffer .= 'bla-bla-bla';
    3. $buffer .= 'bla-bla-bla';
    4. $buffer .= 'bla-bla-bla';
    5. $buffer .= 'bla-bla-bla';
    6. $buffer .= 'bla-bla-bla';
    7. echo $buffer;
    :roll:
     
  7. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
  8. Batman

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

    С нами с:
    9 окт 2006
    Сообщения:
    72
    Симпатии:
    2
    440Hz
    вы тут сказали что юзаете сей принцип на практике, и сделали разбор GLOBALS универсальным...
    не кажется ли вам что лучше те переменные которые необходимо пускать в шаблон запихнуть в нечто вроде $GLOBALS['tpl'] и парсить уже GLOBALS['tpl'].

    Я делаю именно так.

    Хотелось бы услышать ваше мнение.
     
  9. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Batman

    стрик, именно так и надо. ты молодец.
     
  10. Batman

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

    С нами с:
    9 окт 2006
    Сообщения:
    72
    Симпатии:
    2
    offtop: ват из "стрик"?
     
  11. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Batman
    старик. буковку пропустил. руки уже по клаве не попадали...
     
  12. virabhadra

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

    С нами с:
    11 дек 2006
    Сообщения:
    127
    Симпатии:
    0
    Адрес:
    Praha, Czech Republic
    Действительно, проверил скорость вывода, разницы почти никакой. между выводами (то что писал выше). Текст в 5кб выводит за тысячные доли секунды.
    Но заметил интересную вещь. Совсем не понимаю, с чем связана.
    Если делаю вывод подобного кода:
    PHP:
    1. <?php
    2. $time_start = microtime(true);
    3. $buff = '';
    4. $buff .= 'bla bla bla';
    5. $buff .= 'bla bla bla';
    6. $buff .= 'bla bla bla';
    7. $buff .= 'bla bla bla';
    8. $buff .= 'bla bla bla';
    9. echo $buff;
    10. $time_end = microtime(true);
    11. $time = $time_end - $time_start;
    12. echo '<p>'.$time.'</p>';
    13. ?>
    только размером в 5кб.
    Код повторяется несколько раз на странице и у каждого мерится время вывода, то соотношение этих времен, такое:
    1й, 3й и 5й блок выводятся где-то за 2е-5 секунды, а 2й и 4й тде%то за 2е-4, т.е. в 10 раз дольше.
    Жал апдэйт много раз, цифры меняются, но соотношение сохраняется, т.е. четные выводы в 10 раз медленнее.
    К чему бы это? :roll:

    И я еще не до конца понял, в какой момент происходит передача кода сервером клиенту?
    Только когда РНР сформирует код страницы до конца или после каждого echo?
     
  13. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Не всё так просто господа, зависит от того, откуда и куда данные передаються. Если локально - то ясно, что это будет оочень быстро. Однако с буффером делать лучше, поскольку echo каждый раз заставляет отправить данные клиенту, тратя на это ресурсы процессора и сетевые ресурсы. Лучше отправить один раз, одним вызовом. К тому же учтите, что вывод не 5КБ обычно, и вызовы echo не происходят один за другим, а разбросаны по всем скриптам (я надеюсь мазахистов, пишуших один фаил на каждую отдельную страничку тут нету?)
     
  14. virabhadra

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

    С нами с:
    11 дек 2006
    Сообщения:
    127
    Симпатии:
    0
    Адрес:
    Praha, Czech Republic
    Вот с чего надо было начинать, если говорим о буфферизации! Какая разница между буфферизацией и небуфферизацией.
    Да и то что удобно программисту, не обязательно удобно компилятору.
     
  15. .50

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

    С нами с:
    7 июн 2006
    Сообщения:
    136
    Симпатии:
    0
    Адрес:
    СПб
    Однозначно Smarty. Кто не согласен, того в Сибирь, для промывания мозгов.
     
  16. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Попрошу Сибирь тут всуе не упоминать ;)
    У Smarty своих заморочек хватает. Пользоваться им можно конечно, но... осторожно.
     
  17. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Знаете ли, при всей его крутости, до моих запросов он очень сильно не дотянул... Слишком медлителен и ограничен в некоторых возможностях а так же очень небрежен к кол-ву потребляемой оперативной памяти (до ужоса небрежен), а это очень плохо.
     
  18. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    А поездку мне оплатите ? С командировочными ?
    (меня тут друзья сибиряки в баньку приглашают пивка попить, в страйкбол побегать, а у меня всё никак времени нет)
     
  19. Петр

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

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    Vladson, тоже чтоль шарометчик?
     
  20. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    PHP сначала накапливает данные а буфер и после заполнения буфера отправляет данные клиенту. Тоесть идёт пакетная передача данных.
     
  21. Ti

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

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    если программер и верстальщик это один человек, то удобно шаблоны выполнять ввиде классов

    PHP:
    1. class page {
    2.  
    3.  
    4. function show() {
    5. ?>
    6. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    7.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    8.  
    9. <html>
    10. <?$this->showHead()?>
    11. <?$this->showBody()?>
    12. </html>
    13. <?
    14. }
    15. // имхо, очень просто и очень удобно
    16.  
    17. }
     
  22. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Я бы сказал что это даже немного извращённый вариант... У нас просто есть глобальный layout.htm где основной костяк, и в нём 3 вызова:
    <?=$parser->get('content_left')?>
    <?=$parser->get('content_center')?>
    <?=$parser->get('content_right')?>
    всё, никаких классов или тому подобного в шаблонах :) Всё накапливаеться в буфер и потом флушиться одним вызовом в браузер :)
     
  23. Ti

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

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    Psih
    и у кого после этого извращенный вариант?

    классы, в отличии от шаблонов, более гибкие
     
  24. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Чем же? :)
    Я как хочу в модулях, так и манипулирую выводом, только и всего :)
     
  25. Ti

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

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    речь идет о шаблонах. Ваш метод так назвать нельзя