js_context_reuse
Директива `js_context_reuse` в NGINX позволяет повторно использовать контексты выполнения JavaScript между запросами, повышая производительность и снижая расход оперативной памяти.
Описание
Директива js_context_reuse помогает оптимизировать работу NGINX при использовании его JavaScript‑модуля (NJS), позволяя повторно использовать контексты выполнения JavaScript для нескольких запросов. Вместо создания нового контекста для каждого запроса NGINX может поддерживать пул контекстов. Это снижает накладные расходы на создание контекстов, минимизирует циклы сборки мусора и может привести к улучшению времени отклика, особенно в сценариях с высокой нагрузкой, когда множество запросов обрабатываются подряд.
Директива принимает один аргумент — 'on' или 'off'. При значении 'on' NGINX будет пытаться повторно использовать существующие контексты для обработки входящих запросов. Если указано 'off', для каждого запроса будет создаваться новый контекст, что может быть необходимо в ситуациях, где контексты должны быть изолированы друг от друга по причинам безопасности или управления состоянием. Важно учитывать последствия совместного использования контекста, такие как возможная утечка состояния между запросами, если не принять соответствующие меры.
В контексте потоков и серверов эта директива может заметно улучшить производительность событийно ориентированных приложений, например тех, которые полагаются на WebSocket‑сообщения или другие длительные соединения, снижая задержки и повышая пропускную способность обрабатываемых запросов. Возможность совместного использования контекстов выполнения JavaScript позволяет разработчикам сосредоточиться на создании функциональности, не беспокоясь чрезмерно о эффективности распределения ресурсов при обработке множества параллельных соединений.
Пример конфига
stream {
js_context_reuse on;
server {
listen 3000;
js_content my_js_module;
}
}Убедитесь, что ваш JavaScript-код не полагается на request-specific state, которое может разделяться между запросами при использовании context reuse.
Отслеживайте производительность, чтобы убедиться, что reusing contexts не вызывает неожиданного поведения из-за shared state.