Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Progress Bar


Автор: NetFlame 7.3.2008, 00:09
Здравствуйте.

Есть скрипт, который выполняется по времени минут 5. Во время его выполнения, нужно создать прогресс-бар, который будет по центру монитора пользователя отображать процесс его выполнения. Искал по инету - подходящего ничего не нашел...
Скорее всего, тут надо использовать AJAX: скрипт посылает прогресс-бару степень своего выполнения, а прогресс-бар её отображает.

Может быть есть уже такой скрипт, или инфа как его сделать?

Заранее спс.

Автор: solenko 7.3.2008, 00:35
NetFlame, посылать процент не получится. Клиент может переодически запрашивать процент выполнения. Как его определять -- вам виднее. Как вариант -- запись процента в временный файл. Другой скрипт занимается тем что этот процент читает и отдает клиенту. 

Автор: SelenIT 7.3.2008, 01:17
Почему же - как раз в этом случае можно и посылать. Перед началом работы, например, отдать клиенту JS-функцию display_progress (которая и будет заниматься перерисовкой всего, что надо), и время от времени выплевывать куски вида <script>display_progress(новый_процент)</script>, не забывая делать после этого flush(). Конечно, это в предположении, что ничего другого скрипт не выводит - только делает какую-то чисто серверную рутину типа обновления очень большой базы...

Автор: NetFlame 7.3.2008, 10:18
У меня не очень хорошо с Java, может быть есть какие-то примеры?

Автор: MoLeX 7.3.2008, 10:22
NetFlame примеры с Явой в соответсвующим разделе...

Добавлено через 11 минут
если нет вопросов по части РНР, то тему закрю.

Автор: SelenIT 7.3.2008, 12:52
В простейшем случае можно обойтись и без JS - вместо блоков скрипта "выплевывать" палочки "|", по одной - 100 штук. Чтобы браузер не тупил с их отображением, можно выводить так: 1 палочка - 256 пробелов (а то IE, ЕМНИП, часто не любит перерисовывать страницу ради одного принятого символа). Получится элементарный текстовый прогрессбар. Если его малость стилизовать через CSS и выводить в frame подходящего размера - такое можно будет на первых порах (до лучшего освоения JS ;) использовать на практике...

Автор: flashaa 7.3.2008, 13:07
Цитата(SelenIT @  7.3.2008,  01:17 Найти цитируемый пост)
Почему же - как раз в этом случае можно и посылать. Перед началом работы, например, отдать клиенту JS-функцию display_progress (которая и будет заниматься перерисовкой всего, что надо), и время от времени выплевывать куски вида <script>display_progress(новый_процент)</script>, не забывая делать после этого flush(). Конечно, это в предположении, что ничего другого скрипт не выводит - только делает какую-то чисто серверную рутину типа обновления очень большой базы... 

А какой смысл выплевывать куски запроса по очереди? Разве они будут приняты отдельно? По-моему AJAX дождется прихода всего запроса целиком и потом его выдаст. Либо надо делать несколько запросов.

Автор: SelenIT 7.3.2008, 14:12
flashaa, куски не запроса, а ответа - который формируется постепенно и очень долго...

Автор: awers 7.3.2008, 15:00
flush(); - прекрасно отдает кусочки, которые прикрасно по одному отображает браузер. проверено.

немного офтопа по js могу посоветовать использовать jQuery.

Автор: flashaa 7.3.2008, 15:28
SelenIT, да, ответа. Я это имел в виду.
Цитата(awers @  7.3.2008,  15:00 Найти цитируемый пост)
flush(); - прекрасно отдает кусочки, которые прикрасно по одному отображает браузер. проверено.

Браузер отображает. Но как - зависит от браузера. По-крайней мере когда выводятся к примеру куски html-кода, то он их кеширует и выдает по мере "построения" сайта из html-кода. Как он работает с текстом - тоже его сугубо личное дело. Не советовал бы на это полагаться. Но если я не прав, то можно пример такого скрипта.
Мы говорили про обычный запрос, теперь давайте ближе к делу, а именно - AJAX. Как надо работать на стороне JS, чтобы принять разделенный запрос? Можно код? Не видел других вариантов, кроме как обработка полученного ответа на событие получения ответа.

Автор: SelenIT 7.3.2008, 15:52
Я про AJAX не говорил, я как раз описывал простейшую синхронную альтернативу. Более того, я вообще сомневаюсь в возможности кроссбраузерной реализации затяжного AJAX-ответа (где-то по статусу loading вроде и есть доступ к данным, но вроде не везде, к тому же Опера, по-моему, дает серверу всего 3 секунды на ответ - не уверен, специально не исследовал, но какие-то обрывки с других форумов в голове остались;).

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

Автор: solenko 7.3.2008, 15:55
SelenIT, 
в варианте со скриптом -- разве скрипт начнет интерпретироваться до того как будет получен полностью?
В варианте с просто отдачей контента мне удалось добится результата только в FF

Автор: flashaa 7.3.2008, 16:02
Цитата(SelenIT @  7.3.2008,  15:52 Найти цитируемый пост)
Опера, по-моему, дает серверу всего 3 секунды на ответ

На практике не так. А если б и было так, то это серьезный баг, который сразу бы исправили. Таймаут-то xmlhttprequest'у можно выставить произвольный по документации. http://ru.wikipedia.org/wiki/XMLHttpRequest

Автор: SelenIT 7.3.2008, 16:50
Цитата(solenko @  7.3.2008,  15:55 Найти цитируемый пост)
разве скрипт начнет интерпретироваться до того как будет получен полностью?
Насколько я знаю, интерпретируется поблочно, так что полученные целиком блоки, если не обращаются к еще не созданным элементам, вполне работоспособны до получения последующих.
Цитата(solenko @  7.3.2008,  15:55 Найти цитируемый пост)
В варианте с просто отдачей контента...
С пробелами "для массовки" или без них?

Цитата(flashaa @  7.3.2008,  16:02 Найти цитируемый пост)
На практике не так.
Это хорошо, возможно, мне запомнился баг какой-то конкретной древней версии. Но все равно с обработкой затяжных ответов много нетривиальных браузероспецифичных нюансов.

Автор: solenko 7.3.2008, 17:11
SelenIT, пробовал с пробелами (~50-ти в span'е)

Автор: NetFlame 7.3.2008, 21:06
Люди, живые примеры есть?

Добавлено через 1 минуту и 40 секунд
P.S. Сам прогрессбар я нашел как сделать, а вот чтобы там реальная информация отображалась - ....

Автор: awers 7.3.2008, 23:37

M
awers
Если вопросов по PHP больше нет, советую консультироваться в соответствующем форуме по JavaScript.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)