?

Log in

No account? Create an account

mercury13_kiev


Это не баг, это фича!


Previous Entry Share Next Entry
Джеймс Хэг. Строка прогресса — это сложно
mercury13_kiev

Оригинал: Progress Bars are Surprisingly Difficult

Жаль, что такой необычный блог официально остановился. Но на нём появилась ещё парочка новых статей.

Мы все видели строки прогресса, которые сначала идут медленно 20 минут, потом быстро заполняются за 30 секунд. Или наоборот, строка, которая резво шла к концу, покрыла последние пиксели за 50 % времени. Не редкость даже строки, которые ползут назад.

Месяц назад, когда я установил MacOS Sierra, процесс закончился, когда строка была полна на 2/3. В Doom (2016) круглый измеритель прогресса с цифрой в центре, и она часто засиживается на 0 %, потом на 74 и 99, а иногда заканчивается где-то за 90, не доходя до 100 %.

Явно это не тривиальная задача, иначе бы мы не видели столько глюков.

Концептуально идеальную строку прогресса сделать просто. Всё, что нужно знать — это сколько длится всё вычисление, и обновлять строку в отдельном потоке, чтобы анимация была плавной. Просто! Почему разработчики так не могут? Всё, что нужно знать,— это сколько точно…

Ой!

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

Есть аналогичный вопрос в диспетчеризации программ. Нужно автоматически последовательно запустить несколько программ: запускаем одну, дожидаемся окончания, затем другую. Если цель — иметь минимальное среднее время до окончания всех программ, то лучший критерий — исполнить все программы от короткой к длинной (см. «Кратчайшая работа следующей»). Но для этого нужно знать наперёд, как долго будет выполняться каждая из программ, и в общем случае это невозможно.

И хотя точная строка прогресса никогда не будет достижима, полезны даже такие, как установил Брэд Аллан Мейерс в 1985 году в статье «Важность индикаторов процента в человека-компьютерных интерфейсах». Но процент чего? Несложно превратить загрузку десятка сходных по размеру файлов в процент готовности. Не так просто — когда закачка и локальная обработка объединяются в одно число. И тут индикатор прогресса теряет весь смысл, кроме одного: идёт какое-то движение к цели и, скорее всего, программа не застряла.


  • 1
Я тут прочитал книжку по диагонали. У меня есть нечто подобное (в самом низу об индикаторе прогресса).
https://mercury13-kiev.livejournal.com/16413.html

  • 1