Предзагруженные объекты
Для каждого входящего запроса в njs создаётся отдельная виртуальная машина. Это позволяет прогнозировать предсказуемое поглощение памяти или осуществить изоляцию запросов. Однако поскольку все запросы являются изолированными, то если обработчику запроса необходимо получить доступ к данным, ему нужно сначала их прочитать самому. Это неэффективно, особенно если объём данных большой.
Это ограничение можно обойти при помощи разделяемого предзагруженного объекта. Такие объекты создаются неизменяемыми и не имеют цепочки прототипов: у них нет возможности изменить значения или добавить/удалить свойства в объектах/массивах.
Работа с предзагруженными объектами
Примеры работы с предзагруженными объектами в njs:
-
доступ к свойствам по имени:
preloaded_object.prop_name preloaded_object[prop_name]
-
перечисление свойств:
for (i in preloaded_object_name) { ... }
-
применение встроенных методов, не изменяющих состояние,
при помощи
call()
:Array.prototype.filter.call(preloaded_object_name, ...)