Переписывание легаси-кода: история video.js
Знаете, что меня всегда завораживало в open-source (программы с открытым исходным кодом)? Иногда проекты живут своей жизнью десятилетиями, обрастают костылями как новогодняя елка гирляндами, и кажется — всё, поезд ушёл. Ан нет. Кто-то берёт и переписывает всё с нуля.
Именно это произошло с Video.js.
Шестнадцать лет спустя
Video.js появился в далёком 2008 году — чтобы помочь вебу перейти от Flash к HTML5 видео. Это была эпоха, когда «современная веб-разработка» звучала почти как оксюморон. За 16 лет проект вырос до десятков миллиардов видеоплейсов ежемесячно и стал де-факто стандартом для воспроизведения видео в браузере.
Но был один подвох.
Кодовая база продолжала отражать ту самую эпоху — эпоху jQuery (старомодная библиотека для JavaScript) и соглашений об именовании переменных типа foo и bar. API разбухал от обратной совместимости (читай: легаси — устаревший код), а размеры бандлов (готовый пакет программного кода) росли как на дрожжах.
Автор проекта решил: хватит.
Перепись легаси
В какой-то момент стало понятно: латать дыры уже недостаточно. Нужна радикальная переработка — причём не только самого Video.js, но и связанных проектов: Plyr, Vidstack и Media Chrome (библиотеки-видеоплееры, конкуренты Video.js).
Представьте: четыре open-source проекта с общим Github-счётом в 75 000 звёзд договариваются работать вместе над общей целью. Редкое зрелище, честно говоря.
Что они сделали:
- Уменьшили размер бандла на 88%. Восемьдесят восемь процентов! Это не просто оптимизация — это фокус-покус какой-то.
- Добавили первоклассную поддержку React (популярная библиотека для создания интерфейсов сайтов), TypeScript (язык программирования для проверки ошибок в коде) и Tailwind (инструмент для оформления сайтов без написания CSS). Теперь можно использовать привычные паттерны разработки вместо того чтобы учить очередной DSL.
- Переработали дефолтный внешний вид — автор даже шутит, что эксперты звонят ему с вопросом «Как вы сделали это таким крутым?». Не буду врать — мне самому стало любопытно посмотреть на результат.
- Сделали код дружелюбным к AI-агентам. Это отдельная тема для разговора — скорость развития LLM такова, что инструменты должны быть понятны не только людям, но и машинам.
РАЗМЕР БАНДЛА VIDEO.JS
─────────────────────────
v8/v9 ████████████████████████████████ ~500 KB+
v10 ████ ~60 KB (-88%)
└─────────────────────────────────────▶ время/версия
Что это значит для нас
Меня зацепило несколько моментов.
Во-первых, смелость признать, что 16 лет развития превратились в груз легаси. Многие проекты боятся breaking changes как огня — а тут взяли и переписали всё с нуля.
Во-вторых, коллаборация между конкурирующими проектами выглядит как редкий пример того, что open-source может быть больше чем «мой кусок кода».
В-третьих… помните про AI-augmented development (разработка кода с помощью искусственного интеллекта)? Авторы явно готовятся к тому миру где LLM будет писать код за вас. И если ваша библиотека дружественна к AI — вы вперёд тех кто нет.
Осторожный оптимизм
Бета есть бета. Я бы не рисковал класть v10 в продакшн завтра утром без тестирования edge cases. Но сама философия переосмысления вместо бесконечного refactoring (переписывание кода без изменения его функций) заслуживает внимания.
Особенно сейчас когда веб развивается так быстро что некоторые best practices устаревают быстрее чем успеваешь их внедрить.
Ссылки
- Официальный анонс Video.js v10 Beta — анонс новой версии Video.js.
- Video.js на GitHub — репозиторий проекта.
- Официальный сайт Video.js — официальный сайт проекта.
- Legacy документация v8 — документация для старой версии Video.js.