Описание тега premature-optimization

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

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

Термин "преждевременная оптимизация" взят из цитаты из статьи Кнута "Структурированное программирование с операторами goto", в которой он заявляет:

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

Тем не менее, мы не должны упускать наши возможности в этих критических 3 %. Хорошего программиста такие рассуждения не убаюкивают, он поступит мудро, если внимательно взглянет на критический код; но только после того, как этот код будет идентифицирован. Часто ошибочно делать априорные суждения о том, какие части программы действительно важны, поскольку универсальный опыт программистов, использующих инструменты измерения, показывает, что их интуитивные догадки терпят неудачу.

Эту цитату часто сокращают до простого

Преждевременная оптимизация - корень всех зол

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

Лучшие практики, воплощенные в наблюдении Кнута, следующие:

  1. Сначала измерьте производительность кода, а затем
  2. Оптимизируйте только горячие точки, те части кода, которые оказывают наибольшее влияние на производительность.

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