Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
nginx
GitHub Repository: nginx/nginx.org
Path: blob/main/xml/ru/docs/njs/preload_objects.xml
1 views
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="3"
13
toc="no">
14
15
<section id="summary">
16
17
<para>
18
<note>
19
Предзагруженные объекты поддерживаются только в JavaScript-движке
20
<link doc="engine.xml" id="njs_engine">njs</link>
21
и недоступны в движке
22
<link doc="engine.xml" id="quickjs_engine">QuickJS</link>.
23
</note>
24
</para>
25
26
<para>
27
Для каждого входящего запроса в njs создаётся отдельная виртуальная машина.
28
Это позволяет прогнозировать предсказуемое поглощение памяти
29
или осуществить изоляцию запросов.
30
Однако поскольку все запросы являются изолированными, то
31
если обработчику запроса необходимо получить доступ к данным,
32
ему нужно сначала их прочитать самому.
33
Это неэффективно, особенно если объём данных большой.
34
</para>
35
36
<para>
37
Это ограничение можно обойти
38
при помощи разделяемого предзагруженного объекта.
39
Такие объекты создаются неизменяемыми и не имеют цепочки прототипов:
40
у них нет возможности
41
изменить значения или добавить/удалить свойства в объектах/массивах.
42
</para>
43
44
</section>
45
46
47
<section id="working_with_preload_objects"
48
name="Работа с предзагруженными объектами">
49
50
<para>
51
Примеры работы с предзагруженными объектами в njs:
52
53
<list type="bullet">
54
55
<listitem>
56
доступ к свойствам по имени:
57
<programlisting>
58
preloaded_object.prop_name
59
preloaded_object[prop_name]
60
</programlisting>
61
</listitem>
62
63
<listitem>
64
перечисление свойств:
65
<programlisting>
66
for (i in preloaded_object_name) {
67
...
68
}
69
</programlisting>
70
</listitem>
71
72
<listitem>
73
применение встроенных методов, не изменяющих состояние,
74
при помощи <literal>call()</literal>:
75
<programlisting>
76
Array.prototype.filter.call(preloaded_object_name, ...)
77
</programlisting>
78
</listitem>
79
80
</list>
81
</para>
82
83
</section>
84
85
</article>
86
87