Почему индикаторы прогресса иногда врут?
Индикаторы прогресса есть повсюду, и мы почти никогда не задумываемся о них. Если не считать, конечно, извечного вопроса: почему они порой останавливаются на 99% Почему полоски иногда двигаются быстро, а иногда — медленно? Портал howtogeek.com рассказал, как работают индикаторы прогресса и почему они всегда немного врут.
В истории компьютеров было время без каких-либо полосок прогресса или индикаторов. При запуске программы экран просто отключался или подвисал — и у пользователя не было никакого способа проверить, вылетела ли система или все работает корректно. ПК от IBM на MS-DOS или компьютеры линейки Apple II просто показывали экран ожидания; статус выполнения или работы какой-то программы нельзя было проверить. Единственным индикатором «прогресса» были мигающие огоньки и звуки дисковода.
Но в какой-то момент компьютерные инженеры начали уделять больше внимания UX, или опыту взаимодействия пользователя с системой. Поэтому они предложили графические индикаторы прогресса, которые постепенно заполнялись, пока пользователь ждал выполнения операции. Программисты поняли, что точность показаний этих индикаторов, на самом деле, не имеет значения. Даже если информация не соответствовала реальности, полоска прогресса помогала снизить тревогу пользователя — он видел, что ПК работает.
Именно эта философия привела к появлению индикаторов и полосок прогресса, и она актуальна до сих пор. Но что в реальности они измеряют? Некоторые просто показывают, сколько времени прошло с начала выполнения задачи, другие — отсчитывают те или иные единицы проделанной работы. Например, количество определенных операций при загрузке файла, или сколько фрагментов файла уже загружено.
Иногда те же установщики разбивают задачу на отдельные пункты, и тогда индикатор показывает, на каком этапе процесс находится в данный момент. Он не обновляется постоянно, потому новый пункт отмечается как выполненный только по завершению необходимых операций.
У индикаторов, которые измеряют прогресс от 0 до 100% есть официальное название — их называют процентными, и они же являются самым распространенным типом. Обычно процентные полоски прогресса измеряют, сколько «частей» работы проделано по сравнению с общим объемом. Однако примерные оценки времени, которые дают такие индикаторы, редко соответствуют действительности. Именно поэтому прогресс может дойти до 50% за пять минут, а потом прыгнуть до 99% за секунду.
Программа может знать, сколько работы ей нужно выполнить, но не может предсказать заранее, сколько времени займет каждая часть этой работы. Во-первых, процессы редко однотипны; операции с единичными крупными файлами проще и быстрее, но манипуляции множеством мелки файлов могут быть сложнее. К тому же, они не учитывают специфику железа компьютера, которое тоже бывает очень разным.
Примерно по той же причине индикаторы прогресса иногда «застревают» на 99%. При загрузки какого-нибудь файла из Сети вы не скачиваете его как одно монолитное целое. Он разбивается на фрагменты, или пакеты, которые посылаются в систему по очереди, и только потом машина реконструирует из них изначальный файл.
Хотя передача пакетов достаточно предсказуема при стабильном подключении, финальная реконструкция файла — совсем не. ПК нужно подтвердить, что в процессе передачи файла не было потери пакетов, а если они все-таки произошла — их необходимо восстановить. Иногда загрузчик специально запускает проверку контрольной суммы, чтобы убедиться, что файл не поврежден и не модифицирован. И все это происходит на 99%. Поэтому, хоть индикатор и стоит на месте, компьютер продолжает работать.
Почему никто до сих пор не сделал точные индикаторы прогресса? Потому что аккуратно подсчитать время, необходимое на более комплексные операции с множеством файлов и типов файлов, почти невозможно. Например, процесс установки какой-либо программы сильно зависит от программной среды. Для точного отражения времени он должен учитывать конфигурацию машины, потребление ресурсов и фоновые задачи.