[Перевод] Магические 90%. О чём речь, когда мы говорим о производительности
Описание улучшений в производительности существует на стыке математики и лингвистики. Очень часто математика используется некорректно, употребляются неверные, вводящие в заблуждение или просто неоптимальные термины.
Рассмотрим условный пресс-релиз:
Компания AirTrain Inc. с гордостью представляет новый самолёт AirTrain-8000. Революционный новый самолёт летит из Лондона в Нью-Йорк на средней скорости 7700 км/ч — гигантский прогресс по сравнению с 770 км/ч у других самолётов. Это уменьшает скорость перелёта с десяти часов всего до одного часа, что делает AirTrain-8000 на 90% быстрее, чем наши конкуренты.
Такой пресс-релиз никогда не будет опубликован. Новый самолёт в десять раз быстрее, чем другие (7700 км/ч разделить на 770 км/ч) и никакой отдел маркетинга не позволит называть это «на 90% быстрее», что звучит словно «почти вдвое быстрее». И всё же, когда речь идёт о компьютерах — где десятикратное увеличение скорости случается довольно часто — люди нередко делают такую ошибку.
Подобное злоупотребление процентами сделало их практически бесполезными для описания оптимизаций. Нужно прекратить использовать проценты. Самолёт AirTrain-8000 в десять раз быстрее, точка.
В примере с AirTrain время перелёта сократилось на 90%. Было бы разумно сказать так в пресс-релизе. Также будет точно (хотя до бесполезности неоднозначно) сказать, что этот самолёт «на 90% лучше». Но говорить, что самолёт со скоростью 7700 км/ч «на 90% быстрее» самолёта со скоростью 770 км/ч — это просто неправильно и обречено на провал.
Примеры такой риторической ошибки найти довольно легко. Поиск в Google по фразе »90% faster» (с кавычками) находит почти исключительно те статьи, в которых говорится о сокращении времени на 90% и более, где новый процесс в реальности на 900% быстрее. Вот несколько примеров:
- Загрузка игр на 90% быстрее? — ускорение более чем в 10 раз
- Получи бизнес-образование на 90% быстрее — ускорение более чем в 13 раз
- Ускорение обработки на 90% — в 15 раз быстрее
- Поиск файлов на 90% быстрее! — в 10 раз быстрее
- На 67% быстрее, чем HTTP — в 3,07 раза быстрее или +207%
Можно продолжать.
Смелое заявление
Если вы оптимизировали задачу настолько, что время выполнения уменьшилось на 90%, то это ускорение в десять раз — так и нужно писать. Не имеет значения, будет это полёт из Лондона в Сиэтл, загрузка игры или поиск файла. Сокращение времени на 90% — это ускорение в десять раз, точка, и все пять вышеприведённых примера ошибочны.
На 90% быстрее — что это значит
Представим, что я еду на своём скутере со скоростью 10 м/с, а мой друг — со скоростью 19 м/с. Скорость 19 м/с, математически, в 1,9 раз больше, чем 10 м/с. Преобразуем это в проценты:
Следовательно, его скорость на 90% больше, чем у меня. По другому можно сказать, что он на 90% быстрее.
Ремарка: мы вычитаем 100%, потому что по умолчанию считается, что изменение в процентах всегда показывает только разницу, поэтому во фразе «ускорение в 1,9 раза» число »1,9» является соотношением двух скоростей. Не я придумал правила, это просто лингвистическая/математическая конвенция. Некоторые не соглашаются и думают, что ускорение в 1,9 раза нужно называть ускорением на 190%, но это нестандартное выражение.
На 90% быстрее — что это НЕ значит
Если я выполняю какую-то задачу за 100 секунд, а мой друг делает её за 10 секунд, то мой друг тратит на 90% меньше времени. И многие люди в такой ситуации могут сказать, что мой друг на 90% быстрее меня. Но погодите. Что если мы едем на наших скутерах на работу на расстояние 1000 метров. В этом случае я еду со скоростью 10 м/с, а мой друг (с ракетным ранцем?) — на скорости 100 м/с.
Нет смысла использовать термин «на 90% быстрее» в значении »19 м/с вместо 10 м/с» и также в значении »100 м/с вместо 10 м/с». Фраза не может иметь одновременно два значения, и во втором случае говорить об ускорении на 90% неправильно — в реальности здесь мой друг на 900% быстрее. Некоторые люди скажут, что он на 1000% быстрее (см. чуть выше), что является неудачным вариантом.
Проверка в реальных условиях
Посмотрим на один конкретный пример. В этой статье геймер описывает технику, благодаря которой удалось загрузить игру за 50 с вместо 510 с. И он называет это «Загрузка игр на 90% быстрее?»
Кажется, такая путаница возникает всякий раз, когда улучшение — это сокращение времени выполнения задачи, поэтому давайте пройдёмся по математике.
Было: игра загружалась за 510 с, то есть загружалось 0,00196 игры в секунду. Как вариант, вы могли загрузить игру 7,06 раз за час.
Стало: после некоего хака игра загружается за 50 с, то есть 0,02 игры в секунду, 72 раза в час.
Более быстрый метод способен выполнить чуть более чем в десять раз больше загрузок игры за период времени, независимо от периода. То есть он на 900% быстрее, а не на 90%.
Пример с загрузкой игры может «ощущаться» непривычно, потому что никто не собирается многократно загружать игру в течение часа и радоваться тому, что может загрузить её 72 раза, а не 7,06 раза. Но это не меняет того факта, что загрузка игры ускорилась более чем в десять раз. Парашютисты в свободном полёте летят примерно в десять раз быстрее, чем велогонщики разгоняются по трассе, но мы не отбрасываем это достижение только потому что они могут делать это лишь в течение минуты или около того. Они пролетают около трёх километров в минуту, что соответствует скорости 190 км/ч, и неспособность удерживать такую скорость в течение часа не умаляет их достижений.
Расчёт соотношения скоростей
Если у нас есть старая и новая скорости, то соотношение скоростей можно рассчитать следующим образом:
соотношение скоростей = x = НоваяСкорость / СтараяСкорость
Можно сказать, что новая скорость в x раз больше, чем старая, в десять раз в случае AirTrain-8000.
Если у нас есть старое и новое время выполнения задачи, то перевести разницу во времени во фразу «в х раз быстрее» настолько же просто:
соотношение скоростей = x = СтароеВремя / НовоеВремя
Это так же просто, как расчёт соотношения скоростей, зная скорости, хотя здесь дробь старое/новое, а не новое/старое. Такой расчёт работает для любой фиксированной задачи. Эту формулу можно вывести таким образом:
скорость = задач/с = КоличествоЗадач / ЗатраченноеВремяВСекундах
а затем подставив две скорости в формулу СтароеВремя / НовоеВремя, где КоличествоЗадач сократится. Простая алгебра.
Рекомендации
Сначала я хотел порекомендовать употреблять фразу «ускорение на 90%» только в том случае, если нечто действительно в 1,9 раза быстрее. Но анализ ситуации показал, что это ужасная идея — многочисленные случаи некорректного использования процентов настолько распространены, что сейчас просто невозможно рассчитывать, что вас правильно поймут, разве что за исключением случаев с небольшими процентами, такими как «на 20% быстрее», где двусмысленность не так проявляется.
Поэтому, когда вы сокращаете время выполнения задачи — любой задачи — следует рассчитывать соотношение скоростей как НоваяСкорость / СтараяСкорость и называть полученную цифру для описания своего достижения. Также следует публиковать конкретные цифры до и после, чтобы читатели могли проверить ваши расчёты.
Когда вы слышите от кого-то об ускорении в диапазоне от 90% до 99,9%, то следует быть осторожным. Пока не опубликованы начальные и конечные показатели, вы понятия не имеете, каково достижение на самом деле. Обычно это означает «я хорош в оптимизации, но плохо объясняю».
Никогда нельзя описывать нечто как «улучшение на 90%» или «на 90% лучше» — это бессмысленные фразы. Вместо этого воспользуйтесь ясным и точным показателем кратности. Это в десять раз лучше!
В доказательство того, что сам придерживаюсь этого принципа: когда я сократил время рендеринга конкретного видеоролика с увеличением изображения фрактала с шести месяцев до 18 часов, я не назвал это ускорением на 99,6%, я сказал «в 240 раз быстрее». Рад, что последовал своему же совету в упреждающем порядке.
Обсуждение в твиттере, обсуждение на Reddit.