Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: вопрос по ob_start()

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Eazy-E
Отправлено: 15 Ноября, 2011 - 10:45:39
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Сент. 2011  
Откуда: Анапа


Помог: 0 раз(а)




Добрового времени суток, уважаемые форумчане. ob_start() сильно тормозит работу скрипта и вывод исходной страницы пользователю?

Заранее благодарю за ответы. Улыбка


-----
Новое всегда пугает — даже того, кто это новое создает.
(RZA)
 
 Top
EuGen Администратор
Отправлено: 15 Ноября, 2011 - 11:03:47
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Можно просто проверить, эксперимента ради.
Вот bench.php:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function benchmark($func, $args, $times)
  3. {
  4.         $max=(int)$times;
  5.         $time_start     = microtime(true);
  6.         $mem_start      = memory_get_usage();
  7.         for($i=0; $i<$max; $i++)
  8.         {
  9.                 call_user_func_array($func, $args);
  10.         }
  11.         $time_end       = microtime(true);
  12.         $mem_end        = memory_get_usage();
  13.         return array(
  14.                 'time'  => $time_end - $time_start,
  15.                 'memory'=> $mem_end  - $mem_start
  16.         );
  17. }
  18.  
  19. var_dump(benchmark(function()
  20.         {
  21.                 ob_start();
  22.                 echo("ZZZZZZZZ");
  23.                 ob_end_flush();
  24.         },array(),$_SERVER['argv'][1]));
  25. var_dump(benchmark(function()
  26.         {
  27.                 echo("ZZZZZZZZ");
  28.         },array(),$_SERVER['argv'][1]));


Запуская, скажем, 10000 раз, видим:
CODE (htmlphp):
скопировать код в буфер обмена
  1. user@host:/path$ php bench.php 1000000 | grep -v "Z"
  2.   ["time"]=>
  3.   float(18.142766952515)
  4.   ["memory"]=>
  5.   int(248)
  6. }
  7.   ["time"]=>
  8.   float(9.7588059902191)
  9.   ["memory"]=>
  10.   int(192)
  11. }

- уменьшение производительности составляет около 100% - предлагаю подумать почему.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Eazy-E
Отправлено: 15 Ноября, 2011 - 11:15:55
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Сент. 2011  
Откуда: Анапа


Помог: 0 раз(а)




EuGen пишет:
user@host:/path$ php bench.php 1000000 | grep -v "Z"


Значит все таки 1000000 раз? Все равно плохо.. Просто начал авторизацию делать, при нажатии на "Выход" срабатывает редирект. Без этой функции нифига не работает. С другой стороны буферизация используется в многих cms, и не сказать что они так уж медленно работают


-----
Новое всегда пугает — даже того, кто это новое создает.
(RZA)
 
 Top
EuGen Администратор
Отправлено: 15 Ноября, 2011 - 11:22:54
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Eazy-E пишет:
Значит все таки 1000000 раз?

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


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Самогонщик
Отправлено: 15 Ноября, 2011 - 11:25:23
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




Из теста видно, что ни разу не медленно, если взять время вывода содержимого страницы (именно операции вывода, а не генерации контента), то накладные расходы ob_start(); выглядят не такими уж накладными.
 
 Top
Eazy-E
Отправлено: 15 Ноября, 2011 - 11:33:01
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Сент. 2011  
Откуда: Анапа


Помог: 0 раз(а)




Самогонщик пишет:
Из теста видно, что ни разу не медленно, если взять время вывода содержимого страницы (именно операции вывода, а не генерации контента), то накладные расходы ob_start(); выглядят не такими уж накладными.


Вы меня радуете Улыбка Действительно, если не использовать ob_start, то и заголовки уже никак не отправить если была включена session_start().. Или я снова ошибаюсь? Просто без редиректа вообще никак..


-----
Новое всегда пугает — даже того, кто это новое создает.
(RZA)
 
 Top
Мелкий Супермодератор
Отправлено: 15 Ноября, 2011 - 11:35:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Тот же тест:
CODE (htmlphp):
скопировать код в буфер обмена
  1. user@brtech-ws-03:~$ php -f testf.php 1000000 | grep -v "Z"
  2.   ["time"]=>
  3.   float(4.4153249263763)
  4.   ["memory"]=>
  5.   int(304)
  6. }
  7.   ["time"]=>
  8.   float(3.4117238521576)
  9.   ["memory"]=>
  10.   int(240)
  11. }
  12. user@brtech-ws-03:~$ php -f testf.php 10000000 | grep -v "Z"
  13.   ["time"]=>
  14.   float(44.279800891876)
  15.   ["memory"]=>
  16.   int(304)
  17. }
  18.   ["time"]=>
  19.   float(33.254997014999)
  20.   ["memory"]=>
  21.   int(240)
  22. }

Отстаём только на треть.
PHP5.3.5

И даже так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. php -f bench.php 1000000 | grep -v Z
  2.   ["time"]=>
  3.   float(43.827120065689)
  4.   ["memory"]=>
  5.   int(168)
  6. }
  7.   ["time"]=>
  8.   float(41.192767858505)
  9.   ["memory"]=>
  10.   int(132)
  11. }

виртуалка с PHP 5.3.3


-----
PostgreSQL DBA
 
 Top
Eazy-E
Отправлено: 15 Ноября, 2011 - 11:39:16
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Сент. 2011  
Откуда: Анапа


Помог: 0 раз(а)




Думаю это норма Улыбка


-----
Новое всегда пугает — даже того, кто это новое создает.
(RZA)
 
 Top
EuGen Администратор
Отправлено: 15 Ноября, 2011 - 12:33:49
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Самогонщик пишет:
(именно операции вывода, а не генерации контента)

это существенное уточнение. В этом случае верно, проигрыш будет невелик.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB