Модуль и синглтон
Вопрос
Что такое модульный паттерн и синглтон? Чем синглтон опасен?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
модуль скрывает внутренности и отдаёт публичный интерфейс
в ESM модуль и так синглтон - выполняется один раз, кэшируется
синглтон - единственный экземпляр с глобальной точкой доступа
опасность: скрытая глобальная зависимость, тесты влияют друг на друга
в SSR синглтон на сервере делится между запросами пользователей
лечение: передавать экземпляр явно или создавать на запрос
Что могут спросить следом
- Почему синглтон опасен именно в SSR
- Как изолировать состояние между тестами
- Когда глобальный кэш на клиенте оправдан
Разбор
Модульный паттерн - сокрытие внутреннего состояния за публичным интерфейсом; исторически это IIFE с замыканием, сейчас - обычный ESM-модуль.
Важная деталь: модуль ES уже синглтон - он выполняется один раз при первом импорте,
дальше все получают тот же экземпляр. Поэтому export const cache = new Map() - это
глобальное состояние со всеми вытекающими.
Чем опасен: зависимость скрыта (по сигнатуре функции не видно, что она читает глобальный стор), тесты начинают влиять друг на друга через общее состояние, а в SSR один экземпляр на процесс разделяется между запросами разных пользователей - это готовая утечка данных между клиентами.
Лечение: либо передавать экземпляр явно, либо создавать его на запрос.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.