Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) "долгий" вывод данных / 25 сообщений из 48, страница 1 из 2
08.12.2010, 19:19
    #37003067
it-nowa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
суть задачи - вывод данных из БД
скрипт, который запрашивает данные из БД, работает долго - несколько минут
пока все данные из БД скрипт не получит - ничего пользователю не отображается ((((

как организовать скрип/вывод данных, чтобы пользователю отобразилась страница (верх или верх и низ страницы), а по мере получения данных - данные (в центре или хотя бы дописывались вниз страницы)
...
Рейтинг: 0 / 0
08.12.2010, 19:22
    #37003074
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
Партиями в цикле. Боюсь спросить сколько там данных что они долго отображаются?
...
Рейтинг: 0 / 0
08.12.2010, 21:29
    #37003232
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
it-nowa,

Никак.
...
Рейтинг: 0 / 0
08.12.2010, 21:51
    #37003261
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
it-nowa,

с помошью пхп генерить js файл вида:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 var  table = document.createElement('table');
document.body.appendChild(table);
<?php  for ($i= 0 ,$n= sizeof ($arr);$i<$n;$i++): ?>
 var  tr = document.createElement('td');
<?php  foreach ($arr[$i]  as  $text): ?>
 var  td = document.createElement('td');
td.innerHTML = "<?php print strtr($text,array('"'=>'\"')); ?>";
tr.appendChild(td);
<?php  endforeach ; ?>
table.appendChild(tr);
<?php  flush (); ?>
<?php  endfor ; ?>
...
Рейтинг: 0 / 0
09.12.2010, 15:18
    #37004700
shmaltorhbooks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
В данном случае - никак. Пхп кешируемый, если это можно так назвать. То есть пока весь пхп не выполнится - ничего отдано не будет. Единственный выход - разбивать обработку данных из базы на маленькие кусочки и аяксом запрашивать поочеередно все этапы вычисления.
...
Рейтинг: 0 / 0
09.12.2010, 15:26
    #37004725
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
shmaltorhbooksВ данном случае - никак. Пхп кешируемый, если это можно так назвать. То есть пока весь пхп не выполнится - ничего отдано не будет. Единственный выход - разбивать обработку данных из базы на маленькие кусочки и аяксом запрашивать поочеередно все этапы вычисления.
Откройте для себя виртуоз плеск контейнер... тьфу не то. Откройте для себя функцию flush() ...
...
Рейтинг: 0 / 0
09.12.2010, 16:19
    #37004902
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
it-nowa,

Открою глаза Топикстартеру и другим говорящим что php этого не умеет.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
ob_implicit_flush( 1 );
for($s='',$x= 0 ;$x< 10 ;$x++) {
	ob_start(); 
	echo 'data '.$i;
	$s = ob_get_contents();
	ob_end_flush();
	ob_end_clean(); 
	sleep( 1 );
}
...
Рейтинг: 0 / 0
09.12.2010, 16:49
    #37004992
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
Это не пхп не умеет, это протокол http не умеет.
...
Рейтинг: 0 / 0
09.12.2010, 19:52
    #37005426
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
r uit-nowa,

Открою глаза Топикстартеру и другим говорящим что php этого не умеет.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
ob_implicit_flush( 1 );
for($s='',$x= 0 ;$x< 10 ;$x++) {
	ob_start(); 
	echo 'data '.$i;
	$s = ob_get_contents();
	ob_end_flush();
	ob_end_clean(); 
	sleep( 1 );
}

ничего не доказывающий пример
...
Рейтинг: 0 / 0
09.12.2010, 20:31
    #37005458
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
Дегтярев Евгенийничего не доказывающий пример
Скрипт раз в секунду отправляет строку "дата".
Проверял - работает. То что можно отправлять данные до того как скрипт закончит выполняться - данный пример показал. Евгений, а вы что имели в виду?
...
Рейтинг: 0 / 0
09.12.2010, 20:31
    #37005459
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
Дегтярев Евгенийничего не доказывающий пример
он не доказывает что можно выдавать информацию браузеру порциями?))
ТС именно об этом спрашивал
...
Рейтинг: 0 / 0
09.12.2010, 20:53
    #37005480
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
ИМХО несколько хлипка эта отдача порциями. В том смысле, что сильно зависит от настроек сервера. Нарывался на проблему, когда всё нормально работало на тестовом сервере, где PHP установлен модулем Апача, но перестало работать на хостинге, где PHP установлен как CGI и включено gzip-сжатие по дефолту.
Полагаю, что в данном случае более удобен способ вывода части длинной страницы, когда сервер отдаёт по запросу клиента именно тот фрагмент, который видит пользователь (ну, прокрутил он страницу к середине). Кажется, видел подобное решение на каком-то гуглёвом сервисе.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
09.12.2010, 22:17
    #37005595
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
vkle,

Ну нельзя и нельзя, хоть ты тресни. В классическом варианте, понятное дело. Даже браузер не будет ничего отображать, пока польностью всё не придёт. Это не на пхп или ещё чего-то на сервере делается. Я же говорю, протокол хттп так устроен.
В гугле сделано подгрузкой по технологии JSONP, просьба не путать с JSON - две большие разницы.
JSONP - кроссдоменный аякс, если кому интересно. Ну да, только аяксом это возможно.
...
Рейтинг: 0 / 0
09.12.2010, 23:11
    #37005668
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
ShSerge,

а че тебе вариант 9907807 не устроил?
если он не заработает, то нужно будет его обрамить тегами <script> и все - проверено, все работает. Браузер как догрзит блок скрипта его выполняет, потом как загрузит второй - выполнит его итд.

Единствено получим таблицу, которая генерироваться вся будет через JS что не есть айс, но тем не менее проблема решена и довольно просто.
...
Рейтинг: 0 / 0
09.12.2010, 23:36
    #37005693
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
Ренат,

Креате элемент и всё такое - правильно. Вот только не понял о чём ты говоришь. Этот яваскрипт заработает только тогда, когда целиком и полностью отработает твоя пхп-программа, а смысл?
...
Рейтинг: 0 / 0
09.12.2010, 23:40
    #37005702
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
Ну сам проверь, если не веришь. То, что ты операторы пхп в страницу вставил, ничего не решает. Сервер с пхп сначала обработают страницу с операторами (я это и назвал пхп-программой), а потом залпом это всё выплёвывают.
...
Рейтинг: 0 / 0
09.12.2010, 23:44
    #37005709
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
ShSergeРенат,

Креате элемент и всё такое - правильно. Вот только не понял о чём ты говоришь. Этот яваскрипт заработает только тогда, когда целиком и полностью отработает твоя пхп-программа, а смысл?
попробуй выполнить код: заметь, в поле "q" цыфры меняться раз в секунду, а не один раз через 10 секунд.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<html>
<body>
<div id="q"></div>
<?php
ob_implicit_flush( 1 );
for($s='',$x= 0 ;$x< 10 ;$x++) {
	ob_start(); 
?>
<script language="JavaScript">
document.getElementById('q').innerHTML = <?php print $x; ?>;
</script>
<?php
	$s = ob_get_contents();
	ob_end_flush();
	ob_end_clean(); 
	sleep( 1 );
}
?>
</body>
</html>
...
Рейтинг: 0 / 0
09.12.2010, 23:48
    #37005715
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
Ренат,

Завтра посмотрю. Сегодня уже лень даже на код смотреть. Может ты чего-то изобрёл. Хотя, покамест я остаюсь при своём мнении.
...
Рейтинг: 0 / 0
10.12.2010, 10:26
    #37006256
artas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
it-nowa,

comet
...
Рейтинг: 0 / 0
10.12.2010, 11:58
    #37006634
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
ShSergeНу нельзя и нельзя, хоть ты тресни. Даже браузер не будет ничего отображать, пока польностью всё не придёт. Я же говорю, протокол хттп так устроен.
что именно нельзя?
-нельзя отдавать данные порциями в рамках одного соединения? - МОЖНО
-браузеру нельзя показывать страницу пока она недогрузилась? МОЖНО, это умеют все современные браузеры.
-протокол http не так устроен? как не так? в рамках поставленного ТС вопроса - все реально. нет? обоснуйте, дайте пример который доказывает что вы правы. а то мужики то незнают)
...
Рейтинг: 0 / 0
10.12.2010, 13:43
    #37007112
SmeL_md
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
it-nowa,
Оптимизируйте sql запрос, почитайте что такое index. уверен на 90% это то что Вам поможет
...
Рейтинг: 0 / 0
10.12.2010, 14:31
    #37007306
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
SmeL_mdit-nowa,
Оптимизируйте sql запрос, почитайте что такое index. уверен на 90% это то что Вам поможет
it-nowa,

Кстати, чем вызвано такое большое время выполнения скрипта?
- слишком много данных высылается
(как реализовать уже написали)
- или сам запрос долго работает?
(пока мускул не обработает запрос - он ничего не вернет, следовательно тут можно ждать только окончание выполнения. Как посоветовал Смелмд, раставте по нормальному индексы.)
...
Рейтинг: 0 / 0
12.12.2010, 20:11
    #37010122
it-nowa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
Ренат, SmeL_md,
запрос сложный, обрабатывает аналитику, оптимизация самого запроса ведется, но резкого ускорения "в разы" на базе в несколько гигов не предвидится :)
вывести надо всего около 10-15 строк (в данный момент), но при изменении отчетности вывести придется 100+ строк
...
Рейтинг: 0 / 0
12.12.2010, 20:22
    #37010129
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
r u-нельзя отдавать данные порциями в рамках одного соединения? - МОЖНО
-браузеру нельзя показывать страницу пока она недогрузилась? МОЖНО, это умеют все современные браузеры.
-протокол http не так устроен? как не так? в рамках поставленного ТС вопроса - все реально. нет? обоснуйте, дайте пример который доказывает что вы правы. а то мужики то незнают)
1. Комет
2. Аякс
3. А вот здесь и закавыка. То, что хочет сделать ТС, не получится, если дело в запросе .
Поскольку я говорю "нельзя", а Вы говорите "можно", то пример с Вас. :)
...
Рейтинг: 0 / 0
12.12.2010, 20:26
    #37010135
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) "долгий" вывод данных
r u-браузеру нельзя показывать страницу пока она недогрузилась? МОЖНО, это умеют все современные браузеры.Тут соглашусь. Сам неоднократно видел полстраницы http://www.sql.ru/forum/actualforum.aspx , когда много параллельных закачек идет на узком канале.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) "долгий" вывод данных / 25 сообщений из 48, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]