Mercurial > hg > nginx-site
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> |