Найти в Дзене
АйТиДела / IThings

Оптимизация и рефакторинг кода: что это и зачем нужно?

Всем привет! Сегодня поговорим о двух важных процессах в разработке — оптимизации и рефакторинге кода. Возможно, вы уже слышали эти термины, но не до конца понимаете, чем они отличаются и зачем вообще нужны. Давайте разбираться на реальных примерах. Рефакторинг — это улучшение структуры кода без изменения его поведения. Проще говоря, мы берем рабочий, но некрасивый или запутанный код и делаем его чище, читаемее и поддерживаемее. Допустим, у нас есть функция, которая считает сумму заказа с учетом скидки: До рефакторинга: function calculateTotal(items) {
let total = 0;
for (let i = 0; i < items.length; i++) {
total += items[i].price * items[i].quantity;
}
if (total > 1000) {
return total * 0.9;
} else if (total > 500) {
return total * 0.95;
} else {
return total;
}
} После рефакторинга: function calculateItemTotal(item) {
return item.price * item.quantity;
}
function applyDiscount(total) {
if (total > 1000) return total
Оглавление

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

Что такое рефакторинг?

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

Зачем это нужно?

  1. Читаемость — код пишется один раз, но читается десятки раз. Если через месяц вы (или другой разработчик) не сможете разобраться в своем же коде — это проблема.
  2. Масштабируемость — чем чище код, тем проще добавлять новые функции.
  3. Снижение количества багов — запутанный код = больше ошибок.

Пример рефакторинга

Допустим, у нас есть функция, которая считает сумму заказа с учетом скидки:

До рефакторинга:

function calculateTotal(items) {
let total = 0;
for (let i = 0; i < items.length; i++) {
total += items[i].price * items[i].quantity;
}
if (total > 1000) {
return total * 0.9;
} else if (total > 500) {
return total * 0.95;
} else {
return total;
}
}

После рефакторинга:

function calculateItemTotal(item) {
return item.price * item.quantity;
}

function applyDiscount(total) {
if (total > 1000) return total * 0.9;
if (total > 500) return total * 0.95;
return total;
}

function calculateTotal(items) {
const subtotal = items.reduce((sum, item) => sum + calculateItemTotal(item), 0);
return applyDiscount(subtotal);
}

Видите разницу? Код стал модульным, его легче тестировать и изменять.

Что такое оптимизация?

Оптимизация — это улучшение производительности кода. Мы меняем алгоритмы или структуры данных, чтобы программа работала быстрее или потребляла меньше ресурсов.

Зачем это нужно?

  1. Скорость — пользователи не любят ждать. Медленный код = плохой UX.
  2. Экономия ресурсов — серверное время, память, трафик.
  3. Конкурентоспособность — быстрые приложения выигрывают.
График нагрузки сервера до и после оптимизации — снижение пиков CPU
График нагрузки сервера до и после оптимизации — снижение пиков CPU

Пример оптимизации

Допустим, у нас есть функция поиска дубликатов в массиве:

Медленный вариант (O(n²)):

function findDuplicates(arr) {
const duplicates = [];
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j] && !duplicates.includes(arr[i])) {
duplicates.push(arr[i]);
}
}
}
return duplicates;
}

Оптимизированный вариант (используем Set для O(n) сложности):

function findDuplicates(arr) {
const seen = new Set();
const duplicates = new Set();
for (const item of arr) {
if (seen.has(item)) {
duplicates.add(item);
} else {
seen.add(item);
}
}
return Array.from(duplicates);
}

Теперь функция работает в разы быстрее на больших массивах!

Когда делать рефакторинг, а когда — оптимизацию?

  • Рефакторинг — когда код трудно поддерживать, но он работает.
  • Оптимизация — когда код медленный, но структура может быть нормальной.
-3

Практические советы

  1. Рефакторите постепенно — не переписывайте весь проект сразу.
  2. Пишите тесты — чтобы не сломать функциональность.
  3. Измеряйте производительность — оптимизируйте только то, что действительно тормозит.
  4. Автоматизируйте — используйте линтеры (ESLint, Prettier) для поддержания чистоты кода.

Заключение

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

Программист до рефакторинга (хаос) vs после (дзен)
Программист до рефакторинга (хаос) vs после (дзен)

А вы часто рефакторите или оптимизируете код? Делитесь в комментариях! 🚀

Ставьте лайки и подписывайтесь!

АйТиДела / IThings