Moose - фантастическая объектная структура. Беда в том, что вместе с ее зависимостями она очень большая. Наше профилирование показывает, что на нашей платформе просто загрузка Moose будет нести 5-6 секундные накладные расходы на непостоянные сценарии приложений CGI. Это просто неприемлемо для этих одноразовых приложений.
В отличие от этого, когда мы используем постоянную систему процессов (например, FCGI), эта служебная нагрузка запуска исключается (или, скорее, только понесена один раз), и все хорошо. Проблема заключается в том, что мы не можем гарантировать, что весь наш код всегда будет работать под постоянным процессом.
Мы исследовали с помощью Mouse в качестве ограниченной замены замены для Moose, но, как выясняется (как указано в этот ответ), что не является жизнеспособным вариантом. Любые библиотеки, которые мы пишем для работы с Moose, не будут работать с Mouse тонкими, но важными способами. И мы действительно не хотим разветвлять все наши модули, чтобы мы могли поддерживать как Moose в постоянной среде, так и Mouse для "vanilla" CGI.
Учитывая это, мы имеем следующие варианты:
- Создайте собственные модули для работы с Moose или Mouse, если это необходимо. (Тьфу!)
- Разрабатывайте только модули для FCGI/Moose. Не поддерживайте "vanilla" CGI. Если нам приходится писать сценарии, которые не являются постоянными, они не смогут использовать наши внутренние модули.
- Не используйте Moose или Mouse, но некоторые другие объекты.
Какой вариант лучше? Сейчас мы наклоняемся к 2, и мы просто высасываем его, если нам нужно что-то запустить как ванильный CGI. Как насчет других структур? Есть ли что-нибудь более легкое, над которым мы должны смотреть?