Как повысить быстродействие вашей программы
Данный текст будет посвящён в большей степени тем, кто только делает свои первые шаги в программировании и о производительности совершенно не задумывается. А между тем, практически все основные шаги по увеличению скорости выполнения вашей программы непосредственно связаны с компьютерной грамотностью и пониманием происходящих процессов. Итак, оставим общие фразы и перейдём непосредственно к сути.
Не навреди
На скорость выполнения вашей программы влияет 2 непосредственных фактора:
- Скорость исполнения кода
- Объём выделяемой памяти
Как вы понимаете, минимизировать одновременно влияние обоих этих факторов невозможно: заигрывания с памятью неизбежно приводят к раздуванию кода, а «малобуквенный» текст к повышенному потреблению ресурсов исполняемой машиной. Поэтому главным правилом оптимизации является исключение излишеств в вашей программе. Это означает никакого лишнего кода и строго ограниченное использование памяти. На словах это легко, а на деле?
Операции по оптимизации
Если задача оптимизации встала перед вами уже после написания кода, то наиболее разумным решением будет предварительная очистка и разбиение на части с последующим изучением времени выполнения отдельных блоков. Очистка предполагает удаление неиспользуемых участков, переменных, избыточных заходов циклов.
Анализ скорости выполнения после разбиения чистого кода даст вам объективную оценку того, в какую сторону направить свои усилия по оптимизации. Логично, что если одна операция выполняется 40% времени, а другая – 2%, то и разработчик должен куда больше усилий приложить к уменьшению производственных потерь в первом случае.
Так как мы предполагаем, что код уже чистый, то необходимо в первую очередь рассмотреть выполнение следующих правил:
- Минимизировано количество используемых переменных. Например, ваша программа изобилует различными циклами. По правилам красивого кода, вы можете создать для каждого цикла свой уникальный счётчик, но с точки зрения оптимизации – это трата драгоценных ресурсов. Если в одной части программы переменная “отработала”, то её вполне можно применить в другой.
- Правильно выбраны типы данных. Как известно, каждый тип данных имеет свой используемый диапазон, то есть собственно тот размер памяти, который резервируется под его использование. Например, создавая код в Java и имея переменную, способную принимать только два значения (например, «on» и «off»), лучше использовать boolean с созданием последующего соответствия, но никак не char.
- Минимизировано количество присваиваний. Опять-таки, руководствуясь принципами красоты кода, вы можете разбить длинное арифметическое выражение на несколько более мелких. Это чревато появлением избыточных переменных и лишними операциями присваивания, что позитивно на быстродействии точно не скажется.
- Переменные инициируются при объявлении. Это правило хорошего тона в программировании не только повысит производительность, исключая лишние операции, но и избавит от невынужденных ошибок.
- Однотипные повторяющиеся операции объединены в процедуру или функцию. Еще один приём из основ программирования, который, тем не менее, часто игнорируется новичками.
- Однотипные циклы объединены. Допустим, у вас есть несколько массивов одинаковой размерности, которые надо заполнить в цикле. Вы можете создать несколько циклов и повысить читабельность или запихнуть все операции в общий цикл и повысить быстродействие. Решать вам.
- Использованная память немедленно очищается. Безусловно, не стоит удалять каждую переменную сразу после окончания её использования, но когда речь идет о работе с существенным объемом памяти (например, с большими массивами), контролировать потребление ресурсов просто необходимо.
Когда оптимизация не имеет смысла
Безусловно, подобные приемы не являются универсальными, а в случае с рядом языков и компиляторов (как в случае Dart в JavaScript с помощью dart2js), вы и вовсе получите настолько оптимизированный код, что собственными руками вряд ли создадите что-то лучше.
Однако, в любом случае, опыт применения описанных выше приемов поможет новичку перейти из разряда хороших программистов в разряд эффективных, ведь так вы сэкономите не только ресурсы машины, но и свое личное время.
А какие приёмы для оптимизации кода используете вы?