Как отрефакторить миллион строк кода и не сойти с ума
Алексей Золотых, Wrike
Софт для коллаборации
Немного фактов
Кодовая база с 2007 года
Измененные библиотеки в git
50 фронтенд разработчиков
2 000 000 строк кода для фронтенда
Полная регрессия занимает месяц
Рудольф Клаузиус
1822 — 1888
Второе начало термодинамики
Закон неубывания энтропии
Если в некоторый момент времени замкнутая система находится в неравновесном макроскопическом состоянии, то в последующие моменты времени наиболее вероятным следствием будет монотонное возрастание её энтропии.
Если не наводить порядок, то код будет запутываться
Принцип КИДАО
Принцип SMART
Правила постановки умных задач
SMART
Specific — Конкретный
Measurable — Измеримый
Achievable — Достижимый
Relevant — Актуальный
Time-bound — Ограниченный во времени
Легаси стили wrike
Хороший повод для рефакоринга?
Уменьшить размер файла
на 20%за 2 недели
Specific 👍
Measurable 👎👍
Achievable
😜
Relevant
👍👎
Time-bound
👎👍
Это вообще возможно?
Нужен анализ
font-family
CSS здорового человека
Скорее всего семейство шрифтов не поменяется никогда
Наш CSS
font-family встречается 500 раз
Занимает 4% от всех стилей
В чем причина?
Почему так?
Компоненты иногда вставляются в отдельную страницу
Решение
Выпилить из миксинов font-family и сглаживание
Создать общий CSS файл и тянуть его во все отдельностоящие проекты
Как работать с подобными изменениями?
Правило туриста СССР
полянку нужно оставить чище, чем она была
— Давайте договоримся приводить в порядок код постепенно!
— Настроим статическую проверку кода и внедрим ревью кода!
— Будем выделять на это 10% времени и рефакторить
Решение - ДТПП
Добрые туристы по принуждению!
Git hooks + статический анализ кода
Через полгода кодовую базу будет не узнать
— Нет времени объяснять...
— Нужен коммит
— Мы не можем разрабатывать, все время срабатывают линтеры
Тренировка и еще раз тренировка!
Рефакторинг, когда поздно пить Боржоми
Менять что-то вручную нереально или почти нереально
Два подхода к рефакторингу
Код как текст
Код как код
Код как текст
Работа с путями
Выпиливание свойств
Другие небольшие изменения
Меняем пути для картинок
Все предусмотрели?!
Гораздо проще работать с кодом, если он единообразный