comparison 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
comparison
equal deleted inserted replaced
2983:67dd348c9757 2984:cc475ba7d406
1 <?xml version="1.0"?>
2
3 <!--
4 Copyright (C) Nginx, Inc.
5 -->
6
7 <!DOCTYPE article SYSTEM "../../../../dtd/article.dtd">
8
9 <article name="Предзагруженные объекты"
10 link="/ru/docs/njs/preload_objects.html"
11 lang="ru"
12 rev="1"
13 toc="no">
14
15 <section id="summary">
16
17 <para>
18 Для каждого входящего запроса в njs создаётся отдельная виртуальная машина.
19 Это позволяет прогнозировать предсказуемое поглощение памяти
20 или осуществить изоляцию запросов.
21 </para>
22
23 <para>
24 Однако у такого подхода есть недостатки.
25 Поскольку все запросы являются изолированными, то
26 если обработчику запроса необходимо получить доступ к данным,
27 ему нужно сначала их прочитать самому.
28 Это неэффективно, особенно если объём данных большой.
29 </para>
30
31 <para>
32 Это ограничение можно обойти
33 при помощи разделяемого предзагруженного объекта.
34 Такие объекты создаются неизменяемыми и не имеют цепочки прототипов:
35 у них нет возможности
36 изменить значения или добавить/удалить свойства в объектах/массивах.
37 </para>
38
39 </section>
40
41
42 <section id="working_with_preload_objects"
43 name="Работа с предзагруженными объектами">
44
45 <para>
46 Примеры работы с предзагруженными объектами в njs:
47
48 <list type="bullet">
49
50 <listitem>
51 доступ к свойствам по имени:
52 <programlisting>
53 preloaded_object.prop_name
54 preloaded_object[prop_name]
55 </programlisting>
56 </listitem>
57
58 <listitem>
59 перечисление свойств:
60 <programlisting>
61 for (i in preloaded_object_name) {
62 ...
63 }
64 </programlisting>
65 </listitem>
66
67 <listitem>
68 применение встроенных методов, не изменяющих состояние,
69 при помощи <literal>call()</literal>:
70 <programlisting>
71 Array.prototype.filter.call(preloaded_object_name, ...)
72 </programlisting>
73 </listitem>
74
75 </list>
76 </para>
77
78 </section>
79
80 </article>