diff xml/ru/docs/njs/preload_objects.xml @ 2984:cc475ba7d406

Added Preload Objects article in njs.
author Yaroslav Zhuravlev <yar@nginx.com>
date Thu, 01 Jun 2023 17:12:18 +0100
parents
children 48f245493600
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/ru/docs/njs/preload_objects.xml	Thu Jun 01 17:12:18 2023 +0100
@@ -0,0 +1,80 @@
+<?xml version="1.0"?>
+
+<!--
+  Copyright (C) Nginx, Inc.
+  -->
+
+<!DOCTYPE article SYSTEM "../../../../dtd/article.dtd">
+
+<article name="Предзагруженные объекты"
+        link="/ru/docs/njs/preload_objects.html"
+        lang="ru"
+        rev="1"
+        toc="no">
+
+<section id="summary">
+
+<para>
+Для каждого входящего запроса в njs создаётся отдельная виртуальная машина.
+Это позволяет прогнозировать предсказуемое поглощение памяти
+или осуществить изоляцию запросов.
+</para>
+
+<para>
+Однако у такого подхода есть недостатки.
+Поскольку все запросы являются изолированными, то
+если обработчику запроса необходимо получить доступ к данным,
+ему нужно сначала их прочитать самому.
+Это неэффективно, особенно если объём данных большой.
+</para>
+
+<para>
+Это ограничение можно обойти
+при помощи разделяемого предзагруженного объекта.
+Такие объекты создаются неизменяемыми и не имеют цепочки прототипов:
+у них нет возможности
+изменить значения или добавить/удалить свойства в объектах/массивах.
+</para>
+
+</section>
+
+
+<section id="working_with_preload_objects"
+       name="Работа с предзагруженными объектами">
+
+<para>
+Примеры работы с предзагруженными объектами в njs:
+
+<list type="bullet">
+
+<listitem>
+доступ к свойствам по имени:
+<programlisting>
+preloaded_object.prop_name
+preloaded_object[prop_name]
+</programlisting>
+</listitem>
+
+<listitem>
+перечисление свойств:
+<programlisting>
+for (i in preloaded_object_name) {
+    ...
+}
+</programlisting>
+</listitem>
+
+<listitem>
+применение встроенных методов, не изменяющих состояние,
+при помощи <literal>call()</literal>:
+<programlisting>
+Array.prototype.filter.call(preloaded_object_name, ...)
+</programlisting>
+</listitem>
+
+</list>
+</para>
+
+</section>
+
+</article>