|
php - визуализация ожидания выполнения операции
|
|||
---|---|---|---|
#18+
собственно, что хотелось бы. POST отправляет на сервер запрос со страницы. в зависимости от параметров страница может готовиться не быстро. Как пользователю визуально дать понять, что про него не забыли и страница сейчас явится? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 10:58 |
|
php - визуализация ожидания выполнения операции
|
|||
---|---|---|---|
#18+
Минимально можно повесить анимированную гифку, где изображение крутится, двигается, переливается разными цветами и т.п. Другой момент, что запрос или процесс может тупо срубиться на сервере, а картинка так и будет вещать "не забыли". Ну, тут, можно через какой-то промежуток времени по таймеру вывести "ой, звиняйте, что-то пошло не так". Если же время ожидания предполагается достаточно долгое (десятки секунд) и есть возможность отследить реальный процесс подготовки контента, то можно и настоящий прогрессбар с процентами или этапами выполнения отрисовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 11:39 |
|
php - визуализация ожидания выполнения операции
|
|||
---|---|---|---|
#18+
vkle, хм. возможно бестолково объяснил. есть у меня страница регистрации. пользователь заполняет нужные параметры и жмет "зарегистрироваться". форма уходит на сервер, там обрабатывается (в там есть код php , состояние работы которого (типа я жив) и нужно показывать пользователю. таймаут - тут вообще история. где его отслеживать? на серваке - бессмысленно, а на клиенте - так и вовсе нет пока документа. или жестко ошибаюсь где-то? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 12:18 |
|
php - визуализация ожидания выполнения операции
|
|||
---|---|---|---|
#18+
waszkiewicz, Давайте сперва определимся, что такое "я жив", какими оно обладает признаками. Наверняка, у Вас есть какое-то свое представление о том, что такое "я жив" и по совокупности каких признаков оно отличается от "он помер", "он завис". Если эти признаки возможно четко определить и оценить программными методами - то задача наполовину решена. Например, это может быть какой-то процесс с некоторым PID (где взять и как хранить - вопрос другой). Ну а почему нет то? Если процесс (завис или работает - без разницы) с заданным PID есть и это процесс именно этого скрипта - считаем, что жив. Нет процесса или PID занят каким-то другим процессом - мертв. Подходит такой вариант? Наверно, как-то не очень хорошо. Ладно, ещё вариант, о котором упомянул выше. Скрипт что-то делает. Условно, его работу можно поделить на этапы. Например, первый этап с максимально допустимым временем выполнения 7 секунд, второй этап максимум 18 секунд, третий 10 секунд и т.д. В начале работы скрипт сохраняет первую метку времени (в базе, в сессии и т.п.). После каждого этапа скрипт добавляет новую метку. По запросу от клиента или ещё откуда можно проверить количество меток (определить номер текущего этапа) и по разнице времени от текущего времени до последней метки определить, укладывается ли текущий этап в отведенное для него время. Укладывается - считаем что жив, иначе - мертв. Подходит такой вариант? Ну, не знаю. Всё же, время работы скрипта может кратно меняться в зависимости от туева хучи факторов (загрузка процессора, памяти, запросов к СУБД и ее загрузки, загруженности ФС/дисков и т.п.). Что касается отображения на клиенте, так это следующий вопрос. Пока нет признака, нечего и отображать. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 12:57 |
|
php - визуализация ожидания выполнения операции
|
|||
---|---|---|---|
#18+
vkle, выходит, вариант такой. POST на страничку с "прогрессом" или "ожидателем", где ставим в очередь задание и передаем туда параметры. js делаем ajax синхронный, где вычитываем статус этого задания (пока статус не равен ОК или таймаут не наступил) и в колбэк делаем редирект на страницу боли и печали (если все плохо) или на нужную? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 13:23 |
|
php - визуализация ожидания выполнения операции
|
|||
---|---|---|---|
#18+
waszkiewicz, только одно но - нужно очередь в реальном времени организовывать ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 13:25 |
|
php - визуализация ожидания выполнения операции
|
|||
---|---|---|---|
#18+
waszkiewicz, Да, как-то так. Каких-то существенных проблем для реального времени в первом приближении не вижу. Передали параметры для основной работы, запустили таймер. По таймеру сделали ajax для проверки статуса, вывели результат, запустили таймер и так по кругу, пока не придет ответ от рабочего запроса. Ну это как вариант, конечно. Только один момент. Проверочный ajax-запрос тоже ж может срубиться, а потому, делать ли его синхронным... это надо подумать. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 13:48 |
|
php - визуализация ожидания выполнения операции
|
|||
---|---|---|---|
#18+
Могу ошибаться, но также можно попробовать кинуть самый обычный XMLHttpRequest, на стороне сервера отключить буферизацию вывода и отправлять в поток результат выполнения этапов, а на клиенте как только статус запроса будет переведён в loading повесить таймер и по этому таймеру смотреть переменную с ответом сервера (которая по ходу выполнения будет наполняться данными) и исходя из этого менять прогрессбар. Но сам не пробовал, хотя в теории вроде должно работать :) Но, разумеется, это накладывает ограничение на очерёдность выполнения кода на сервере. При таком подходе заголовки обязательно должны быть отправлены до основного текста, потому подойдёт далеко не каждому... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 17:14 |
|
|
start [/forum/topic.php?fid=23&msg=39770582&tid=1460003]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 253ms |
total: | 381ms |
0 / 0 |