Рассчитать процентную прогрессию на основе событий - PullRequest
1 голос
/ 18 января 2012

Мне нужно реализовать индикатор выполнения, который показывает прогресс генерации отчета, проблема в том, что я должен представлять процент хода отчета на основе события, сгенерированного генерацией, но без предварительного знания общего количества события, поэтомуНапример, генерация отчета отправляет следующее событие (этап):

 - Starting Report generation
 - Start Query execution
 - End Query execution
 - Start Report Rendering
 - End Report Rendering
 - End Report Generation

В этом примере всего 3 задачи и 6 событий, я не знаю общее количество задач, но я знаю, чтообщее количество событий вдвое превышает количество заданий.

Я не знаю, какие события присутствуют и сколько их , но я должен представлять прогрессию с помощью индикатора выполнениятак с числом от 0 до 100.

Как его можно рассчитать?Какой лучший способ представить прогрессию?

Ответы [ 2 ]

3 голосов
/ 18 января 2012

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

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

  • Увеличение прогресса на основе уровня вложенности текущей обрабатываемой задачи. По сути, идея заключается в том, что чем более мелкозернистой является задача, тем меньше она способствует общему прогрессу. Под вложенностью задач я имею в виду, конечно, иерархию, подразумеваемую заключением в скобки ваших Start и End сообщений.

  • Получите разумную оценку максимального количества задач, которые вы можете ожидать, и отрегулируйте увеличение скорости прогресса в зависимости от того, насколько вы близки к завершению. Например, если вы ожидаете не более 500 задач, и вы обработали 300, но уже показывает 80% прогресса, вы должны серьезно замедлить любое дальнейшее увеличение. Точно так же, если вы отстаете, вам следует увеличить масштаб приращения прогресса.

  • Избегайте больших прыжков. Даже если вам нужно быстро наверстать упущенное, как описано в предыдущем пункте, делайте это постепенно и со временем. Чтобы привести конкретный пример: вместо того, чтобы увеличивать один раз на 10%, а затем стоять на месте в течение 10 секунд, сделайте 10 приращений по 1% каждый в течение 10 секунд.

Возможно, есть еще много техник, которые вы можете попробовать использовать. В общем, это довольно интересная проблема, связанная с UX и математикой, но вы должны подумать, стоит ли тратить на нее когнитивные усилия. Я ожидаю, что в большинстве случаев неопределенный прогресс будет абсолютно нормальным.

1 голос
/ 18 января 2012

То, что вам требуется, невозможно с обычным индикатором прогресса, поскольку вы в основном не имеете ни малейшего представления о прогрессе, который вы пытаетесь отследить.Что вы можете сделать, так это иметь выделенную индикаторную строку (индикатор выполнения, который продолжает работать бесконечно), чтобы показать пользователю, что ваше приложение все еще работает, а также над или под ним, иметь не редактируемое текстовое поле, отображающее задачи, которые вы упомянули выше.

...