<?xml version="1.0"?>
<!DOCTYPE article SYSTEM "../../../../dtd/article.dtd">
<article name="Движок JavaScript"
link="/ru/docs/njs/engine.html"
lang="ru"
rev="6"
toc="no">
<section>
<para>
Начиная с версии <link doc="../njs/changes.xml" id="njs0.8.6">0.8.6</link>
поддерживается несколько JS-движков.
Для выбора движка используется директива <literal>js_engine</literal>
в
<link doc="../http/ngx_http_js_module.xml" id="js_engine">http</link>
и
<link doc="../stream/ngx_stream_js_module.xml" id="js_engine">stream</link>.
По умолчанию используется движок njs.
</para>
</section>
<section id="njs_engine" name="Движок njs">
<para>
<note>
Движок njs объявлен устаревшим
начиная с <link doc="changes.xml" id="njs1.0.0">1.0.0</link>;
для нового кода следует использовать движок
<link id="quickjs_engine">QuickJS</link>.
</note>
</para>
<para>
njs — встроенный движок JavaScript,
разработанный как часть модуля njs.
Подробнее см. в разделе <link doc="compatibility.xml">Совместимость</link>.
</para>
</section>
<section id="quickjs_engine" name="Движок QuickJS">
<para>
<link url="https://bellard.org/quickjs/">QuickJS</link> — компактный
встроенный движок JavaScript, который поддерживает
спецификацию <link url="https://tc39.es/ecma262/2023/">ES2023</link>,
включая модули, асинхронные генераторы, прокси и BigInt.
</para>
<para>
Начиная с <link doc="changes.xml" id="njs0.8.6">0.8.6</link>
доступна
оперативная замена
<link doc="reference.xml">njs/nginx objects</link>
для обеспечения совместимости с движком njs, но с некоторыми исключениями:
<list type="bullet">
<listitem>
API njs:
<link doc="reference.xml" id="njs_dump"><literal>njs.dump()</literal></link>,
<literal>console.dump()</literal>.
</listitem>
<listitem>
устаревшее API:
<literal>require()</literal>,
вместо необходимо использовать утверждение <literal>import</literal>.
</listitem>
<listitem>
директива <literal>js_preload_object</literal> для
<link doc="../http/ngx_http_js_module.xml" id="js_preload_object">http</link>
и
<link doc="../stream/ngx_stream_js_module.xml" id="js_preload_object">stream</link>.
</listitem>
</list>
</para>
<para>
статус встроенных модулей njs:
<list type="bullet">
<listitem>
<link doc="reference.xml" id="buffer"><literal>buffer</literal></link>:
начиная с <link doc="changes.xml" id="njs0.8.6">0.8.6</link>.
</listitem>
<listitem>
<link doc="reference.xml" id="crypto"><literal>crypto</literal></link>:
начиная с <link doc="changes.xml" id="njs0.8.10">0.8.10</link>.
</listitem>
<listitem>
<link doc="reference.xml" id="njs_api_fs"><literal>fs</literal></link>:
начиная с <link doc="changes.xml" id="njs0.8.9">0.8.9</link>.
</listitem>
<listitem>
<link doc="reference.xml" id="querystring"><literal>querystring</literal></link>:
начиная с <link doc="changes.xml" id="njs0.8.10">0.8.10</link>.
</listitem>
<listitem>
<link doc="reference.xml" id="builtin_crypto"><literal>WebCrypto</literal></link>:
начиная с <link doc="changes.xml" id="njs0.8.10">0.8.10</link>.
</listitem>
<listitem>
<link doc="reference.xml" id="xml"><literal>xml</literal></link>:
начиная с <link doc="changes.xml" id="njs0.8.10">0.8.10</link>.
</listitem>
<listitem>
<link doc="reference.xml" id="zlib"><literal>zlib</literal></link>:
начиная с <link doc="changes.xml" id="njs0.8.5">0.8.5</link>.
</listitem>
</list>
</para>
<para>
статус встроенных объектов njs:
<list type="bullet">
<listitem>
<link doc="reference.xml" id="process"><literal>process</literal></link>:
начиная с <link doc="changes.xml" id="njs0.8.8">0.8.8</link>.
</listitem>
<listitem>
<link doc="reference.xml" id="textdecoder"><literal>TextDecoder</literal></link>:
начиная с <link doc="changes.xml" id="njs0.8.10">0.8.10</link>.
</listitem>
<listitem>
<link doc="reference.xml" id="textencoder"><literal>TextEncoder</literal></link>:
начиная с <link doc="changes.xml" id="njs0.8.10">0.8.10</link>.
</listitem>
</list>
</para>
<para>
статус встроенных объектов nginx:
<list type="bullet">
<listitem>
<link doc="reference.xml" id="ngx_fetch"><literal>ngx.fetch</literal></link>:
начиная с <link doc="changes.xml" id="njs0.9.1">0.9.1</link>.
</listitem>
<listitem>
<link doc="reference.xml" id="ngx_shared"><literal>shared dictionary</literal></link>:
начиная с <link doc="changes.xml" id="njs0.8.8">0.8.8</link>.
</listitem>
</list>
</para>
</section>
</article>