На сайте долгоиграющая задача выполняется шагами: серия ajax вызовов. Каждый выполняется секунд 12–18. Пользователю хочется показывать что-то часто обновляемое, предсказуемое, типа живого прогресса, мелкими шагами.
Попробовал сделать линейно: предполжил, что
progress = f(time)
это просто
k * time
. При поступлении следующего ответа, этот k корректируется исходя из последней полученной точки. fiddle – имитация, время выполнения очередной пачки случайно +- 4 сек.
Похоже, линейность — неправильный подход: если реальный шаг внезапно тормозит, по сравнению с предыдущими, мой прогресс откатывается назад, когда приходят, наконец, реальные данные.
Как можно относительно реалистично угадывать прогресс, опираясь на дискретные шаги?