Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PHP, Perl, Python Новый топик    Ответить
 php - визуализация ожидания выполнения операции  [new]
waszkiewicz
Member

Откуда:
Сообщений: 968
собственно, что хотелось бы. POST отправляет на сервер запрос со страницы. в зависимости от параметров страница может готовиться не быстро. Как пользователю визуально дать понять, что про него не забыли и страница сейчас явится?
7 фев 19, 10:58    [21803306]     Ответить | Цитировать Сообщить модератору
 Re: php - визуализация ожидания выполнения операции  [new]
vkle
Member

Откуда: Самара
Сообщений: 14460
Минимально можно повесить анимированную гифку, где изображение крутится, двигается, переливается разными цветами и т.п. Другой момент, что запрос или процесс может тупо срубиться на сервере, а картинка так и будет вещать "не забыли". Ну, тут, можно через какой-то промежуток времени по таймеру вывести "ой, звиняйте, что-то пошло не так".
Если же время ожидания предполагается достаточно долгое (десятки секунд) и есть возможность отследить реальный процесс подготовки контента, то можно и настоящий прогрессбар с процентами или этапами выполнения отрисовать.
7 фев 19, 11:39    [21803361]     Ответить | Цитировать Сообщить модератору
 Re: php - визуализация ожидания выполнения операции  [new]
waszkiewicz
Member

Откуда:
Сообщений: 968
vkle,
хм. возможно бестолково объяснил.
есть у меня страница регистрации. пользователь заполняет нужные параметры и жмет "зарегистрироваться". форма уходит на сервер, там обрабатывается (в там есть код php , состояние работы которого (типа я жив) и нужно показывать пользователю. таймаут - тут вообще история. где его отслеживать? на серваке - бессмысленно, а на клиенте - так и вовсе нет пока документа.
или жестко ошибаюсь где-то?
7 фев 19, 12:18    [21803379]     Ответить | Цитировать Сообщить модератору
 Re: php - визуализация ожидания выполнения операции  [new]
vkle
Member

Откуда: Самара
Сообщений: 14460
waszkiewicz,

Давайте сперва определимся, что такое "я жив", какими оно обладает признаками. Наверняка, у Вас есть какое-то свое представление о том, что такое "я жив" и по совокупности каких признаков оно отличается от "он помер", "он завис". Если эти признаки возможно четко определить и оценить программными методами - то задача наполовину решена.

Например, это может быть какой-то процесс с некоторым PID (где взять и как хранить - вопрос другой). Ну а почему нет то? Если процесс (завис или работает - без разницы) с заданным PID есть и это процесс именно этого скрипта - считаем, что жив. Нет процесса или PID занят каким-то другим процессом - мертв. Подходит такой вариант? Наверно, как-то не очень хорошо.

Ладно, ещё вариант, о котором упомянул выше. Скрипт что-то делает. Условно, его работу можно поделить на этапы. Например, первый этап с максимально допустимым временем выполнения 7 секунд, второй этап максимум 18 секунд, третий 10 секунд и т.д. В начале работы скрипт сохраняет первую метку времени (в базе, в сессии и т.п.). После каждого этапа скрипт добавляет новую метку. По запросу от клиента или ещё откуда можно проверить количество меток (определить номер текущего этапа) и по разнице времени от текущего времени до последней метки определить, укладывается ли текущий этап в отведенное для него время. Укладывается - считаем что жив, иначе - мертв. Подходит такой вариант? Ну, не знаю. Всё же, время работы скрипта может кратно меняться в зависимости от туева хучи факторов (загрузка процессора, памяти, запросов к СУБД и ее загрузки, загруженности ФС/дисков и т.п.).

Что касается отображения на клиенте, так это следующий вопрос. Пока нет признака, нечего и отображать.
7 фев 19, 12:57    [21803424]     Ответить | Цитировать Сообщить модератору
 Re: php - визуализация ожидания выполнения операции  [new]
waszkiewicz
Member

Откуда:
Сообщений: 968
vkle,
выходит, вариант такой. POST на страничку с "прогрессом" или "ожидателем", где ставим в очередь задание и передаем туда параметры. js делаем ajax синхронный, где вычитываем статус этого задания (пока статус не равен ОК или таймаут не наступил) и в колбэк делаем редирект на страницу боли и печали (если все плохо) или на нужную?
7 фев 19, 13:23    [21803456]     Ответить | Цитировать Сообщить модератору
 Re: php - визуализация ожидания выполнения операции  [new]
waszkiewicz
Member

Откуда:
Сообщений: 968
waszkiewicz,
только одно но - нужно очередь в реальном времени организовывать
7 фев 19, 13:25    [21803458]     Ответить | Цитировать Сообщить модератору
 Re: php - визуализация ожидания выполнения операции  [new]
vkle
Member

Откуда: Самара
Сообщений: 14460
waszkiewicz,

Да, как-то так. Каких-то существенных проблем для реального времени в первом приближении не вижу. Передали параметры для основной работы, запустили таймер. По таймеру сделали ajax для проверки статуса, вывели результат, запустили таймер и так по кругу, пока не придет ответ от рабочего запроса. Ну это как вариант, конечно.
Только один момент. Проверочный ajax-запрос тоже ж может срубиться, а потому, делать ли его синхронным... это надо подумать.
7 фев 19, 13:48    [21803479]     Ответить | Цитировать Сообщить модератору
 Re: php - визуализация ожидания выполнения операции  [new]
Програмёр
Member

Откуда: Москва
Сообщений: 2981
Могу ошибаться, но также можно попробовать кинуть самый обычный XMLHttpRequest, на стороне сервера отключить буферизацию вывода и отправлять в поток результат выполнения этапов, а на клиенте как только статус запроса будет переведён в loading повесить таймер и по этому таймеру смотреть переменную с ответом сервера (которая по ходу выполнения будет наполняться данными) и исходя из этого менять прогрессбар.

Но сам не пробовал, хотя в теории вроде должно работать :) Но, разумеется, это накладывает ограничение на очерёдность выполнения кода на сервере. При таком подходе заголовки обязательно должны быть отправлены до основного текста, потому подойдёт далеко не каждому...
7 фев 19, 17:14    [21803719]     Ответить | Цитировать Сообщить модератору
Все форумы / PHP, Perl, Python Ответить