Идеальный вариант - сначала профилировать, а затем оптимизировать, где это необходимо, но это не работает с дизайном; к тому времени, когда вы получите что-нибудь исполняемое для профиля, изменение дизайна будет очень дорогим. Поэтому дизайн должен обратить внимание на эффективность заранее. Обычно это означает предварительный набросок эффективных алгоритмов и сохранение достаточной гибкости для последующих изменений. (Это часто лучше всего делать с хорошим разделением функций, сохраняя модули как можно более независимыми, и это хорошая практика проектирования по другим причинам.)
Как правило, на этапе (ах) проектирования вы хорошо представляете, насколько важна производительность. Если вам нужно, вы можете спроектировать производительность с самого начала (без учета оптимизации на уровне кода).
Существует также разработка эффективных навыков кодирования при выборе между двумя, в остальном, похожими практиками. Например, в C ++ стоит набирать ++i
вместо i++
, потому что это тривиальная вещь, которая иногда может быть значительно более эффективной.
Все, что больше, должно подождать, пока (а) не станет ясно, что повышение производительности окупится, и (б) вы знаете, где находятся горячие точки.