Долгое выполнение echo

Vivaldy

Новичок
Долгое выполнение echo

Столкнулся с такой проблемой, работает довольно больший скрипт..
В процессе его работы данные накапливаются в одной переменной - $val, после чего выполняется
PHP:
echo $val;
при этом замер времени работы скрипта показывает что весь скрипт выполняется в среднем 1,3 секунды, из которых именно этот echo занимает 0,95 секунды

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

-~{}~ 07.09.05 23:16:

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

Cougar

Кошак
Ну, например, собрать все данные в массив и применить array_walk()

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

Vivaldy

Новичок
на тестируемом примере немного более 36 килобайт

-~{}~ 07.09.05 23:25:

как array_walk() применить немогу сообразить ..
по строкам разбить чтоли?
 

Мутник

Новичок
Vivaldy

парень, 36 кб - это детский лепет.. у меня страница ТЕКСТА весит 1.2 метра, список на 12.000 позиций с кучей данных - бред, но надо отображать все сразу - не более 1.2 секунды на все про все, при том, что там не мало действий выполняется с массивом....

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

Vivaldy

Новичок
у меня все накапливается в этой переменной. с ней работы осуществляется тоже много, но до вывода.
И при этом именно засечка работы скрипта перед
PHP:
echo $val
и сразу после показывают такое большое значение.
 

tristram

Guest
это плохой тон. либо сразу выводи, либо создавай массив из данных и выводи.
 

Vivaldy

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

Long

Новичок
проблема в том что только когда соберется весь текст мне надо смотреть есть ли в нем определенные комбинации и ставить в том числе и в начало дополнения
сдается мне, что именно при этом "смотрении" и происходят все тормоза :) случаем не делаешь поиска по сформированному тексту?
 

Vivaldy

Новичок
нет, поиск элементов произвожу регулярными выражениями

вот сам код где замеряю время:
PHP:
 $timescript['all']['start'] = getTimeMark();
 
.......
.......(здесь порядка 450 килобай кода)
.......

 $timescript['val']['start'] = getTimeMark();
 
 echo $val;
	
 $timescript['val']['end'] = getTimeMark();
 
 $timescript['alll']['end'] = getTimeMark();
 
 $totaltime['all'] = ($timescript['all']['end'] - $timescript['all']['start']); 
 $totaltime['val'] = ($timescript['val']['end'] - $timescript['val']['start']); 

 printf ("Суммарное время работы скрипта %f сек. <br>Время вывода val %f сек.", $totaltime['all'], $totaltime['val']);
и при этом результат:
Суммарное время работы скрипта 6.485139 сек.
Время вывода val 6.254134 сек.
 

Z.O.S.

Новичок
попробуй после echo ставить flush(), или использовать для вывода print, бо здается мне - тут с буфером проблемка...
 

Vivaldy

Новичок
прописал output_buffering=on все сразу отдача echo стала равна 0.000264 сек, т.е. так как и должно быть в теории.

Может подскажите чем черевата установка этого парметра в on ??? Какие минусы, а то что-то ответа на этот вопрос найти не могу....
 

kvf77

Red Devil
Vivaldy

делай проще:
в начале скрипта
ob_start

в конце:
ob_flush();

А между ними выводи на экран как хочешь - будет осуществляться автоматическая буферизация, которая ЗНАЧИТЕЛЬНО ускорит твои скрипты.

мой способ удобнее еще и тем, что ты ob_flush(); можешь подать в любое время, тем самым выводя на экран какие-то промежуточные результаты. После этого необходимо вновь давать команду ob_stert().

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

Vivaldy

Новичок
да я понимаю....
но я в коде ob_start() юзаю для того чтоб выполнить отдельно лежаший модуль а его вывод забрать в обработку а не на экран...
хотя можно ob_flush() сделать перед этим моим кодом а помле сделать опять ob_start()...

но тут скорее я задал вопрос - какие проблемы может сулить такой подход.... ???
То что он позволит оперировать сессиями и куками в ходе работы вего скрипта это понятно.... но не получится ли так что в надежность сервера при этом уменьшится при большом кол-ве запросов или какой-то код не станет работать???
 

kvf77

Red Devil
Vivaldy
нет, не получится. PHP выделяет буфер в 40 кб. для буферизации вывода. Увеличивает его на 10 кб. при достижении скриптом 40 кб.
 
Сверху