annotate xml/en/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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2984
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
1 <?xml version="1.0"?>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
2
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
3 <!--
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
4 Copyright (C) Nginx, Inc.
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
5 -->
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
6
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
7 <!DOCTYPE article SYSTEM "../../../../dtd/article.dtd">
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
8
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
9 <article name="Understanding preloaded objects"
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
10 link="/en/docs/njs/preload_objects.html"
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
11 lang="en"
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
12 rev="1"
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
13 toc="no">
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
14
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
15 <section id="summary">
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
16
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
17 <para>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
18 For each incoming request njs creates a separate virtual machine.
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
19 This brings a lot of benefits such as predictable memory consumption
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
20 or requests isolation.
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
21 </para>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
22
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
23 <para>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
24 However, it also has its own downsides.
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
25 Since all requests are isolated,
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
26 if a request handler needs to access some data,
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
27 it has to read it by itself.
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
28 This is not efficient especially when the amount of data is large.
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
29 </para>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
30
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
31 <para>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
32 To address this limitation,
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
33 a preloaded shared object was introduced.
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
34 Such objects are created immutable and do not have prototype chains:
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
35 their values cannot be changed, properties cannot be added or removed.
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
36 </para>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
37
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
38 </section>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
39
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
40
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
41 <section id="working_with_preload_objects"
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
42 name="Working with preload objects">
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
43
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
44 <para>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
45 Here are some examples of how to work with a preload object in njs:
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
46
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
47 <list type="bullet">
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
48
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
49 <listitem>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
50 access properties by name:
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
51 <programlisting>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
52 preloaded_object.prop_name
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
53 preloaded_object[prop_name]
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
54 </programlisting>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
55 </listitem>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
56
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
57 <listitem>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
58 enumerate properties:
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
59 <programlisting>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
60 for (i in preloaded_object_name) {
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
61 ...
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
62 }
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
63 </programlisting>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
64 </listitem>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
65
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
66 <listitem>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
67 apply non-modifying built-in methods using <literal>call()</literal>:
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
68 <programlisting>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
69 Array.prototype.filter.call(preloaded_object_name, ...)
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
70 </programlisting>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
71 </listitem>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
72
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
73 </list>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
74 </para>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
75
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
76 </section>
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
77
cc475ba7d406 Added Preload Objects article in njs.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
diff changeset
78 </article>