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