Как выбирать между двумя библиотеками с похожим функционалом
Что проверяют
Умеете ли вы принимать инженерное решение по проверяемым критериям, а не по звёздам на GitHub. Следом обычно просят реальный случай из вашего опыта или предлагают сравнить две конкретные библиотеки прямо на собеседовании.
Как отвечать
Начните с требований: какую задачу решаем и какие у проекта ограничения (SSR, мобильный трафик, поддерживаемые браузеры). Потом пройдитесь по критериям, у каждого есть способ проверки:
- вес и tree shaking: сколько добавит в бандл именно ваш импорт, а не весь пакет. Смотрят bundlephobia или pkg-size, проверяют ESM-сборку и поле
sideEffects, в проекте контролируют черезsize-limit; - совместимость: работа с вашей версией React или Vue, с SSR и серверными компонентами, встроенные типы TypeScript вместо отдельного
@types; - живость: дата последнего релиза, число мейнтейнеров, скорость реакции на issues, changelog и гайды по миграции между мажорами;
- безопасность и лицензия: число транзитивных зависимостей,
npm audit, лицензия. MIT и Apache 2.0 спокойно подходят коммерческому продукту, а с GPL или AGPL разбираются до внедрения; - доступность и API: для UI-компонентов клавиатура и ARIA, для любых библиотек удобство API в вашем коде.
Затем практический шаг: короткий прототип обеих библиотек на одном реальном сценарии и замеры на своих данных. Итог фиксируют в ADR, чтобы через год было понятно, почему выбрали именно эту. И задайте встречный вопрос: нужна ли библиотека вообще, иногда хватает Intl, structuredClone или десятка строк своего кода.
С примером из опыта ответ сильнее, но только со своими фактами. Если такого выбора вы не делали, разберите вслух знакомую пару, например date-fns и dayjs.
Где спотыкаются
Выбирают по звёздам и скачиваниям. Популярность отражает прошлое, а не то, будет ли пакет поддерживаться завтра.
Не проверяют итоговый размер и работу с SSR и узнают о проблеме после сборки или на ошибке гидратации.
Не думают о стоимости смены. Библиотеку, которая используется в сотне файлов, заменить трудно, поэтому её часто оборачивают своим тонким слоем.