V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½

ИспользованиС V8

V8 β€” это Π΄Π²ΠΈΠΆΠΎΠΊ JavaScript ΠΎΡ‚ Google, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Chrome. Он быстрый ΠΈ доступСн Π² исходных ΠΊΠΎΠ΄Π°Ρ… (Π‘++) для Linux (Ρ‚ΠΎΡ‡Π½Π΅Π΅ для gcc) ΠΈ ΠΏΠΎΠ΄ Windows.

Π’ свСтС роста популярности использования V8 я Ρ€Π΅ΡˆΠΈΠ» ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своим (Π³ΠΎΠ΄ΠΈΡ‡Π½Ρ‹ΠΌ) ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ Π΅Π³ΠΎ использования Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Windows Π² качСствС сСрвСрного скриптового Π΄Π²ΠΈΠΆΠΊΠ°.

Π§Π°ΡΡ‚ΡŒ 1. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ V8.

β€” Установка, сборка ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

Π˜Ρ‚Π°ΠΊ, V8 β€” быстрый Π΄Π²ΠΈΠΆΠΎΠΊ JavaScript (ECMA-262) ΠΎΡ‚ Google, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Chrome:

V8 доступСн Π² исходных ΠΊΠΎΠ΄Π°Ρ… ΠΏΠΎ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ BSD:

Π― расскаТу ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ MS Visual Studio Express Edition 2008. Установка ΠΏΠΎΠ΄ Windows описана здСсь:

Π—Π°Ρ‚Π΅ΠΌ добавляСм Π² PATH ΠΏΡƒΡ‚ΠΈ ΠΊ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠ°ΠΌ python, scons ΠΈ subversion.

Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ исходники V8 ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ trunk (ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ):

svn checkout v8.googlecode.com/svn/trunk v8

Π’ ΠΏΠ°ΠΏΠΊΠ΅ tools\visual studio находятся ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ V8 для Visual Studio.
Π’ Π½ΠΈΡ… ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π½ΠΎ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ V8 Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки (ΠΈΠ· ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ Π³Π΄Π΅ SConstruct), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

scons msvcltcg=off mode=release library=static snapshot=on env=»INCLUDE:C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include;C:\Program Files\Microsoft Visual Studio 9.0\VC\include,LIB:C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib;C:\Program Files\Microsoft Visual Studio 9.0\VC\lib»

(ΠΏΡƒΡ‚ΠΈ ΠΊ установкС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ MS VS EE 2008).

msvcltcg это Link Time Optimization. РСкомСндуСтся Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅Π»ΠΈΠ·ΠΎΠ², ΠΈΠ½Π°Ρ‡Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ v8.lib ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒΡΡ Π² 3-4 Ρ€Π°Π·Π° ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΡƒΠΏΠ°Π΄Π΅Ρ‚.

Как Π²ΠΈΠ΄Π½ΠΎ собираСм ΠΌΡ‹ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ v8.lib, которая скоро ΠΈ появится Π² этой ΠΆΠ΅ ΠΏΠ°ΠΏΠΊΠ΅.

Π‘Π΅Ρ€Π΅ΠΌ v8.h ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ include ΠΈ v8.lib ΠΈ добавляСм ΠΊ своСму MS Visual Studio 2008 ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ.

Π’Π°ΠΊΠΆΠ΅ Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅:

#pragma comment(lib, «ws2_32.lib»)
#pragma comment(lib, «winmm.lib»)

Π˜Π½Π°Ρ‡Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠ΅. БобствСнно, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π²ΠΈΠΆΠΎΠΊ V8 Ρƒ нас доступСн Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Embedder’s Guide

β€” Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² использованиС V8

ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ v8.h ΠΈ ΠΈΠ·ΡƒΡ‡Π°Π΅ΠΌ.

V8 прСдоставляСт свою Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ C++ классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π² пространствС ΠΈΠΌΠ΅Π½ (namespace) v8. ВсС Π²Π°ΠΆΠ½Ρ‹Π΅ javascript-структуры ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π‘++ класса. НапримСр, класс v8::Integer прСдставляСт собой Ρ†Π΅Π»ΠΎΠ΅ число (i64) Π² JavaScript.

.
class Context;
class String;
class Value;
class Utils;
class Number;
class Object;
class Array;
class Int32;
class Uint32;
class External;
class Primitive;
class Boolean;
class Integer;
class Function;
class Date;
.

Π‘Π°ΠΌΡ‹ΠΉ Π²Π°ΠΆΠ½Ρ‹ΠΉ класс β€” это контСкст (v8::Context), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ мСсто, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ компилируСтся ΠΈ выполняСтся javascript-ΠΊΠΎΠ΄. ЀактичСски это ΠΆΠ΅ ΠΈ мСсто хранСния глобального ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° javascript. Π’Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ взаимодСйствиС с v8, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ контСкста (Π½ΠΎ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΠΌΠΎΠΆΠ½ΠΎ).

Π’Π½ΡƒΡ‚Ρ€ΠΈ сСбя V8 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ свой собствСнный стСк, Π³Π΄Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ стСковыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ V8. НапримСр, для использования контСкста Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Β«Π²ΠΎΠΉΡ‚ΠΈ Π² Π½Π΅Π³ΠΎΒ». Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс C++ Context::Scope (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π½ΠΈΠΆΠ΅). ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ этого класса Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка V8 стСковый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ V8 для Π²Ρ…ΠΎΠ΄Π° Π² контСкст. Π’Ρ‹Π·ΠΎΠ² дСструктора класса Context::Scope ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ стСковый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка V8. На стСкС V8 Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ конструкции ΠΎΡ‚Π»ΠΎΠ²Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ (TryCatch), ΠΏΡƒΠ»Ρ‹ хранСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… хэндлов (HandleScope) ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ V8. ВсС классы C++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ этими ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, устроСны ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹: Π² конструкторС Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° стСк V8, Π² дСструкторС β€” ΡƒΠ±ΠΈΡ€Π°Π΅ΠΌ.

V8 (ΠΊΠ°ΠΊ ΠΈ любая javascript срСда выполнСния) содСрТит сборщик мусора, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉΡΡ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² V8, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ссылаСтся. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ взаимодСйствиС с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ V8 ΠΈΠ· C++ ΠΊΠΎΠ΄Π° происходит посрСдством хэндлов (v8::Handle), Ρ‚ΠΎ бишь ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Π£ΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎ это ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ хэндлы Π² Π²ΠΈΠ΄Π΅ template-классов C++: v8::Handle, v8::Local, v8::Persistent.
По Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ хэндлы дСлятся Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (v8::Local) ΠΈ постоянныС (v8::Persistent).
МоТно ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π°Π½Π°Π»ΠΎΠ³ΠΈ C++ стСковых ΠΈ Ρ…ΠΈΠΏΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ врСмя ΠΆΠΈΠ·Π½ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ…Π΅Π½Π΄Π»ΠΎΠ² привязано ΠΊ стСку, Π° постоянныС ΠΆΠΈΠ²ΡƒΡ‚ ΠΏΠΎΠΊΠ° ΠΈΡ… явно Π½Π΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡˆΡŒ.

Π”Π°Π»Π΅Π΅ я ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ находимся Π² пространствС ΠΈΠΌΠ΅Π½ v8 ΠΈ STL (Β«using namespace v8; using namespace std; β€ž).

Π˜Ρ‚Π°ΠΊ, Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ хэндлы V8 (v8::Local). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‡Π°Ρ‰Π΅ всСго. Π‘Ρ€Π°Π²Π½ΠΈΠΌ ΠΈΡ… врСмя ΠΆΠΈΠ·Π½ΠΈ со стСковым ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ C++:

V8 C++
< <
HandleScope handle_scope;
Local a = Integer::New(1); int a = 1;
> >
// a нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

Как Π²ΠΈΠ΄Π½ΠΎ, для хранСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ…Π΅Π½Π΄Π»ΠΎΠ² V8 понадобился ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ HandleScope. Π­Ρ‚ΠΎ стСковый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ V8 для хранСния Ρ‚Π΅Ρ… самых ссылок Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ V8. Π£ΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎ это Π°Π½Π°Π»ΠΎΠ³ Π½Π°Ρ‡Π°Π»Π° Π±Π»ΠΎΠΊΠ° стСковых ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ…Π΅Π½Π΄Π»Π° всСгда ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ созданию ссылки Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ HandleScope, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Π»ΠΈΠΆΠ΅ всСго ΠΊ Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка (стСка V8, разумССтся). НСльзя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ…Π΅Π½Π΄Π» Π±Π΅Π· HandleScope!

Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ…Π΅Π½Π΄Π»Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ часто. НапримСр, Π½Π°ΠΌ трСбуСтся ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ строку C++ Π² строку V8. Для строки Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ UTF-8 это дСлаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

МногиС классы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Integer, String, Boolean, Date) ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ New (Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ хэндл), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ V8 этого класса ΠΈ занСсти Π² Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· C++. НапримСр (см. v8.h):

Однако, ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Value:

Класс Value Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ V8. Π­Ρ‚ΠΎ Ρ‚ΠΎ, Π½Π° Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ пСрСмСнная javascript: число, строка, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, функция, массив ΠΈ ΠΏΡ€. Value прСдоставляСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ своСго Ρ‚ΠΈΠΏΠ° (IsUndefined(), IsNull(), IsString(),IsFunction() ΠΈ ΠΏΡ€.). ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Value Π² Π½ΡƒΠΆΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Cast ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰Π΅Π³ΠΎ нас класса. НапримСр:

Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя Value являСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом C++ для классов Integer, String ΠΈ ΠΏΡ€. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

β€” ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Ρ‹Π΅ хэндлы V8

Π•ΡΡ‚ΡŒ нСсколько случаСв, ΠΊΠΎΠ³Π΄Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ хэндлы Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹. Иногда Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ самим ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² V8.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ случай: контСкст V8. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ ΠΌΡ‹ создаСм сами ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ большС Π½Π΅ Π½ΡƒΠΆΠ΅Π½.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ случай: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ V8 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° C++ ΠΈ содСрТит Π²Π½ΡƒΡ‚Ρ€ΠΈ сСбя ссылку Π½Π° этот экзСмпляр. Ясно, Ρ‡Ρ‚ΠΎ Ссли сборщик мусора Π²Π΄Ρ€ΡƒΠ³ Ρ€Π΅ΡˆΠΈΡ‚ ΠΏΠΎΠ΄Ρ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ V8, Ρ‚ΠΎ ΠΌΡ‹ потСряСм ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ C++ ΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΡƒΡ‚Π΅Ρ‡ΠΊΠ° памяти. Однако, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ V8 ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π»ΠΈΡΡŒ! Нам просто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это сСйчас ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚.

ВсС это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ постоянных хэндлов V8 (Persistent).

Π― ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΎΠΏΡΡ‚ΡŒ ΠΊΠΎΠ΄ для V8 ΠΈ Π°Π½Π°Π»ΠΎΠ³ (Π² смыслС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ) ΠΊΠΎΠ΄Π° Π½Π° C++.

Persistent p; int *p = 0;
< <
HandleScope handle_scope;
Local a = Integer::New(1); int a = 1;
p = Persistent ::New(a); p = new int (a);
> >

Persistent q = p; int * q = p;
p.Dispose(); delete p;
p.Clear(); p = 0;

Π˜Ρ‚Π°ΠΊ, основной способ получСния постоянного хэндла (ΠΈΠ· Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ) β€” это использованиС Π²Ρ‹Π·ΠΎΠ²Π° Persistent::New(). Context являСтся СдинствСнным классом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ своСм создании (New) сразу Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ постоянный хэндл. НадСюсь, всСм ΡƒΠΆΠ΅ понятно β€” ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Π΅Ρ‚.

Вопрос получСния ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠΈ постоянных хэндлов ΠΌΡ‹ ΠΎΡ‚Π»ΠΎΠΆΠΈΠΌ, Π° ΠΏΠΎΠΊΠ° ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΡΠΎΠΎΡ€ΡƒΠ΄ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая выполняСт javascript.

Для этого Π½Π°ΠΌ потрСбуСтся ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ строки ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° String V8 Π² C++ ΠΊΠΎΠ΄. ΠœΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΌ способом β€” классом String::AsciiValue.

Ѐункция, которая выполняСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ javascript-ΠΊΠΎΠ΄, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

string v8_exec( const char * javascript)
<
HandleScope handle_scope; // стСковый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для хранСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… хэндлов
Persistent context = Context::New(); // создаСм контСкст ΠΈ сохраняСм Π΅Π³ΠΎ постоянный хэндл
Context::Scope context_scope(context); // стСковый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ «Π²Ρ…ΠΎΠ΄Π°» Π² контСкст; для компиляции ΠΈ выполнСния Π²Π½ΡƒΡ‚Ρ€ΠΈ контСкста
TryCatch try_catch; // стСковый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для ΠΎΡ‚Π»ΠΎΠ²Π° javascript-ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ
Local String > source = String ::New(javascript); // ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ строку с ΠΊΠΎΠ΄ΠΎΠΌ Π² строку V8
Local

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ JS: ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ устройствС V8 ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°

ΠŸΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ β€” Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΈΠ· сСрии, посвящённой особСнностям Ρ€Π°Π±ΠΎΡ‚Ρ‹ JavaScript Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄Π²ΠΈΠΆΠΊΠ° V8. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ шла Ρ€Π΅Ρ‡ΡŒ ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния V8 ΠΈ ΠΎ стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². БСгодня ΠΌΡ‹ углубимся Π² особСнности V8, благодаря ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ исходный ΠΊΠΎΠ΄ Π½Π° JS прСвращаСтся Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈ подСлимся совСтами ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°.

V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½. 9430412889624157ba2482b65b11d955. V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ Ρ„ΠΎΡ‚ΠΎ. V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½-9430412889624157ba2482b65b11d955. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 9430412889624157ba2482b65b11d955

О JS-Π΄Π²ΠΈΠΆΠΊΠ°Ρ…

JavaScript-Π΄Π²ΠΈΠΆΠΎΠΊ β€” это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΈΠ»ΠΈ, Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄, написанный Π½Π° JavaScript. Π”Π²ΠΈΠΆΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ с использованиСм Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ²: Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, Π² Π²ΠΈΠ΄Π΅ динамичСского компилятора (ΠΈΠ»ΠΈ JIT-компилятора), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный ΠΊΠΎΠ΄ Π½Π° JS Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°.

Π’ΠΎΡ‚ список популярных Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ JavaScript-Π΄Π²ΠΈΠΆΠΊΠΎΠ².

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹Π» создан Π΄Π²ΠΈΠΆΠΎΠΊ V8?

Π”Π²ΠΈΠΆΠΎΠΊ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ V8 Π±Ρ‹Π» создан ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Google, ΠΎΠ½ написан Π½Π° C++. Π”Π²ΠΈΠΆΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Google Chrome. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ V8 ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΄Π²ΠΈΠΆΠΊΠΎΠ², ΠΎΠ½ примСняСтся Π² популярной сСрвСрной срСдС Node.js.
V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½. image loader. V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ Ρ„ΠΎΡ‚ΠΎ. V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader
Π›ΠΎΠ³ΠΎΡ‚ΠΈΠΏ V8

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ V8 Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ задались Ρ†Π΅Π»ΡŒΡŽ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ JavaScript Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ…. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ высокой скорости выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, V8 транслируСт JS-ΠΊΠΎΠ΄ Π² Π±ΠΎΠ»Π΅Π΅ эффСктивный ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€. Π”Π²ΠΈΠΆΠΎΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ JavaScript-ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ инструкции Π² Ρ…ΠΎΠ΄Π΅ исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, рСализуя ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ динамичСской компиляции, ΠΊΠ°ΠΊ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ соврСмСнныС JavaScript-Π΄Π²ΠΈΠΆΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SpiderMonkey ΠΈ Rhino (Mozilla). ОсновноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ V8 Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈ исполнСнии JS-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ любой ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

О Π΄Π²ΡƒΡ… компиляторах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ использовались Π² V8

Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ устройство V8 измСнилось с Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ вСрсии 5.9, которая появилась совсСм Π½Π΅Π΄Π°Π²Π½ΠΎ. Π”ΠΎ этого ΠΆΠ΅ ΠΎΠ½ использовал Π΄Π²Π° компилятора:

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° собСрёт достаточно Π΄Π°Π½Π½Ρ‹Ρ… для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ систСма ΠΌΠΎΠ³Π»Π° ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Π”Π°Π»Π΅Π΅, Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, начинаСтся оптимизация с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Crankshaft. Он ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ абстрактноС синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ JavaScript Π² высокоуровнСвоС прСдставлСниС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π΅ модСль СдинствСнного статичСского присваивания (static single-assignment, SSA). Π­Ρ‚ΠΎ прСдставлСниС называСтся Hydrogen. Π—Π°Ρ‚Π΅ΠΌ Crankshaft пытаСтся ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Ρ„ ΠΏΠΎΡ‚ΠΎΠΊΠ° управлСния Hydrogen. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ выполняСтся Π½Π° этом ΡƒΡ€ΠΎΠ²Π½Π΅.

ВстраиваниС ΠΊΠΎΠ΄Π°

ΠŸΠ΅Ρ€Π²Π°Ρ оптимизация ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π·Π°Π±Π»Π°Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ встраивании Π² мСста Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большСго ΠΎΠ±ΡŠΡ‘ΠΌΠ° ΠΊΠΎΠ΄Π°. ВстраиваниС ΠΊΠΎΠ΄Π° β€” это процСсс Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (строки, Π³Π΄Π΅ вызываСтся функция) Π½Π° Π΅Ρ‘ Ρ‚Π΅Π»ΠΎ. Π­Ρ‚ΠΎΡ‚ простой шаг позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ.

V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½. image loader. V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ Ρ„ΠΎΡ‚ΠΎ. V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader

Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ замСняСтся Π½Π° Π΅Ρ‘ Ρ‚Π΅Π»ΠΎ

Π‘ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ классы

JavaScript β€” это язык, основанный Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°Ρ…: здСсь Π½Π΅Ρ‚ классов. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ здСсь ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с использованиСм процСсса клонирования. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, JS β€” это динамичСский язык программирования, это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ, послС создания экзСмпляра ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ свойства ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ JS-ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ структуры, Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ словари (основанныС Π½Π° использовании Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ), для хранСния свСдСний ΠΎ мСстС располоТСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² памяти. ИспользованиС ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… структур Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ свойств Π² JavaScript Π±ΠΎΠ»Π΅Π΅ слоТной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, Ρ‡Π΅ΠΌ Π² нСдинамичСских языках, Ρ‚Π°ΠΊΠΈΡ…, ΠΊΠ°ΠΊ Java ΠΈ C#. Π’ Java, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, всС свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π΅ΠΉΡΡ послС компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ схСмой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈΡ… нСльзя динамичСски Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ (Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² C# Π΅ΡΡ‚ΡŒ динамичСский Ρ‚ΠΈΠΏ, Π½ΠΎ Ρ‚ΡƒΡ‚ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½Π° это Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅). Как Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, значСния свойств (ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° эти свойства) ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сохранСны, с фиксированным смСщСниСм, Π² Π²ΠΈΠ΄Π΅ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π² памяти. Π¨Π°Π³ смСщСния ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° Ρ‚ΠΈΠΏΠ΅ свойства, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π² JavaScript это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ свойства ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’Π°ΠΊ ΠΊΠ°ΠΊ использованиС словарСй для выяснСния адрСсов свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² памяти ΠΎΡ‡Π΅Π½ΡŒ нСэффСктивно, V8 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ вмСсто этого Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄: скрытыС классы. Π‘ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ классы ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ классы Π² Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ языкС программирования, Π²Ρ€ΠΎΠ΄Π΅ Java, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ всё это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Пока, Π΅Ρ‰Ρ‘ Π΄ΠΎ выполнСния конструктора, Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Point Π½Π΅Ρ‚ свойств, поэтому класс C0 пуст.

V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½. 4f82100d46b84183a50a626111de2c5f. V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ Ρ„ΠΎΡ‚ΠΎ. V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½-4f82100d46b84183a50a626111de2c5f. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 4f82100d46b84183a50a626111de2c5f
ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ добавляСтся Π½ΠΎΠ²ΠΎΠ΅ свойство, Π² старый скрытый класс Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ свСдСния ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ скрытому классу. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ скрытыми классами Π²Π°ΠΆΠ½Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ скрытыС классы. Если Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠΉ скрытый класс ΠΈ ΠΊ Π½ΠΈΠΌ добавляСтся ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ свойство, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ обСспСчат Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ скрытый класс ΠΈ вСсь ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ΄Ρ‘Ρ‚ вмСстС с Π½ΠΈΠΌ.

V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½. 80d221e494cc43cb8865b81df04be730. V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ Ρ„ΠΎΡ‚ΠΎ. V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½-80d221e494cc43cb8865b81df04be730. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 80d221e494cc43cb8865b81df04be730
ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ использованию класса C2 послС добавлСния ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ свойства y

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ скрытыми классами зависят ΠΎΡ‚ порядка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ свойства. ВзглянитС Π½Π° этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°:

ВстроСнныС кэши

V8 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ выполнСния динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ встроСнным кэшСм Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². ВстроСнноС ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ основано Π½Π° наблюдСнии, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ обращСния ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ с использованиСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ± этом ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ здСсь. Если Ρƒ вас Π½Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ слишком Π² это ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ, читая Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», здСсь ΠΌΡ‹ ΠΈΠ·Π»ΠΎΠΆΠΈΠΌ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ встроСнного ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π² Π΄Π²ΡƒΡ… словах.

Π˜Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΆΠ΅ всё это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? V8 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ кэш Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π½Π΅Π΄Π°Π²Π½ΠΎ Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. Если V8 смог ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΈΠΏΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ процСсс выяснСния Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ свойствам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π°, вмСсто этого, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΡ…Ρ€Π°Π½Ρ‘Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ скрытому классу ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ВстроСнноС ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, являСтся ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Π°ΠΊ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ° использовали ΠΎΠ±Ρ‰ΠΈΠ΅ скрытыС классы. Если Π²Ρ‹ создаётС Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½ΠΎ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ скрытыми классами (ΠΊΠ°ΠΊ сдСлано Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅), V8 Π½Π΅ смоТСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ встроСнноС ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ, Π΄Π°ΠΆΠ΅ хотя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ, Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠΌ скрытых классах Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ Ρ€Π°Π·Π½ΠΎΠ΅ смСщСниС ΠΈΡ… свойствам.

V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½. c28006adf58644e19ca0487ca318dfdd. V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ Ρ„ΠΎΡ‚ΠΎ. V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½-c28006adf58644e19ca0487ca318dfdd. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° c28006adf58644e19ca0487ca318dfdd
ΠŸΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½ΠΎ ΠΈΡ… свойства a ΠΈ b Π±Ρ‹Π»ΠΈ созданы Π² Ρ€Π°Π·Π½ΠΎΠΌ порядкС ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½ΠΎΠ΅ смСщСниС

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³Ρ€Π°Ρ„ Hydrogen ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, Crankshaft ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ Π² Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ΅ прСдставлСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ называСтся Lithium. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ Lithium зависимо ΠΎΡ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ систСмы. На этом ΡƒΡ€ΠΎΠ²Π½Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, происходит Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ рСгистров.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ Lithium-прСдставлСниС компилируСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π—Π°Ρ‚Π΅ΠΌ происходит Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ называСтся Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ Π² стСкС (on-stack replacement, OSR). ΠŸΠ΅Ρ€Π΅Π΄ компиляциСй ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΈΡ… Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ. Π—Π°Ρ‚Π΅ΠΌ, Π½Π΅ прСрывая Ρ€Π°Π±ΠΎΡ‚Ρƒ, V8 трансформируСт контСкст (стСк, рСгистры) Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ слоТная Π·Π°Π΄Π°Ρ‡Π°, учитывая Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΈΠΌΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ, V8 ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ выполняСт встраиваниС ΠΊΠΎΠ΄Π°. V8 β€” Π½Π΅ СдинствСнный Π΄Π²ΠΈΠΆΠΎΠΊ, способный это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

Как Π±Ρ‹Ρ‚ΡŒ, Ссли оптимизация оказалась Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΉ? ΠžΡ‚ этого Π΅ΡΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚Π° β€” Ρ‚Π°ΠΊ называСмая дСоптимизация. Она Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π° Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ систСму ΠΊ использованию Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² Ρ‚ΠΎΠΌ случаС, Ссли прСдполоТСния, сдСланныС Π΄Π²ΠΈΠΆΠΊΠΎΠΌ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π² основу ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, большС Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π‘Π±ΠΎΡ€ΠΊΠ° мусора

Для сборки мусора V8 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ гСнСалогичСский ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Β«ΠΏΠΎΠΌΠ΅Ρ‚ΡŒ ΠΈ выброси» (mark-and-sweep) для ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ очистки ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠΉ ΠΊΠΎΠ΄Π°. Π€Π°Π·Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ остановку выполнСния JavaScript. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° систСму, ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡƒΡŽ сборщиком мусора ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π±ΠΎΠ»Π΅Π΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ, V8 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ маркирования: вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ всю ΠΊΡƒΡ‡Ρƒ, ΠΎΠ½ пытаСтся ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ всё, Ρ‡Ρ‚ΠΎ смоТСт, обходя лишь Ρ‡Π°ΡΡ‚ΡŒ ΠΊΡƒΡ‡ΠΈ. Π—Π°Ρ‚Π΅ΠΌ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° возобновляСтся. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ сборщика мусора ΠΏΠΎ ΠΊΡƒΡ‡Π΅ начинаСтся Ρ‚Π°ΠΌ, Π³Π΄Π΅ закончился ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ. Π­Ρ‚ΠΎ позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΎΡ‡Π΅Π½ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… ΠΏΠ°ΡƒΠ· Π² Ρ…ΠΎΠ΄Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ выполнСния ΠΊΠΎΠ΄Π°. Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, Ρ„Π°Π·ΠΎΠΉ очистки памяти Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ.

Ignition ΠΈ TurboFan

Π‘ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ Π² этом Π³ΠΎΠ΄Ρƒ V8 вСрсии 5.9. Π±Ρ‹Π» прСдставлСн ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ выполнСния ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ позволяСт Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Π΅Ρ‰Ρ‘ большСго ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ экономии памяти, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ, Π½Π΅ Π² тСстах, Π° Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… JavaScript-прилоТСниях.

Новая систСма построСна Π½Π° Π±Π°Π·Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Ingnition ΠΈ новСйшСго ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ компилятора TurboFan. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ ΠΎΠ± этих Π½ΠΎΠ²Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°Ρ… V8 ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅.

Π‘ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ V8 5.9 full-codegen ΠΈ Crankshaft (Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ использовались Π² V8 с 2010-Π³ΠΎ Π³ΠΎΠ΄Π°) большС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚. Команда V8 Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ срСдства, ΡΡ‚Π°Ρ€Π°ΡΡΡŒ Π½Π΅ ΠΎΡ‚ΡΡ‚Π°Ρ‚ΡŒ ΠΎΡ‚ Π½ΠΎΠ²Ρ‹Ρ… возмоТностСй JavaScript ΠΈ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ этих возмоТностСй. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Π½ΠΎΠ²Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΠΎΡ‚ΠΊΠ°Π· ΠΎΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ старых ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ V8 Π² сторону Π±ΠΎΠ»Π΅Π΅ простой ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ управляСмой Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹.

V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½. image loader. V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ Ρ„ΠΎΡ‚ΠΎ. V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader

Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π² тСстах ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΈ сСрвСрного Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования JS

Π­Ρ‚ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ β€” лишь Π½Π°Ρ‡Π°Π»ΠΎ. Новый ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ выполнСния ΠΊΠΎΠ΄Π° Π½Π° основС Ignition ΠΈ TurboFan ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡƒΡ‚ΡŒ ΠΊ дальнСйшим оптимизациям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ JavaScript ΠΈ ΡΠ΄Π΅Π»Π°ΡŽΡ‚ V8 экономичнСС.

ΠœΡ‹ рассмотрСли Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ особСнности V8, Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘ΠΌ нСсколько совСтов ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°. На самом Π΄Π΅Π»Π΅, кстати, всё это Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ вывСсти ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, ΠΎ Ρ‡Ρ‘ΠΌ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅.

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ JavaScript-ΠΊΠΎΠ΄Π° для V8

Π˜Ρ‚ΠΎΠ³ΠΈ

ΠœΡ‹, Π² SessionStack, стараСмся ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΡˆΠ΅ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ ΠΏΡ€ΠΈ написании JS-ΠΊΠΎΠ΄Π°. НадССмся, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π²ΡˆΠΈΡΡŒ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ V8, ΠΈ учтя Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ рассказали Π²Ρ‹ΡˆΠ΅, Π²Ρ‹ смоТСтС ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ качСство ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! Какими совСтами ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ JS-ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π²Ρ‹?

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Руководство ΠΏΠΎ Node.js, Ρ‡Π°ΡΡ‚ΡŒ 2: JavaScript, V8, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΡ‘ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΡ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° этого руководства ΠΏΠΎ Node.js, ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΌΠ½Π΅Π½ΠΈΠ΅ Π°ΡƒΠ΄ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΎ Ρ‚ΠΎΠΌ, стоит Π»ΠΈ Π½Π°ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π»ΠΈ нСбольшой опрос. Как оказалось, Π½Π°ΡˆΡƒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Ρƒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 94% ΠΏΡ€ΠΎΠ³ΠΎΠ»ΠΎΡΠΎΠ²Π°Π²ΡˆΠΈΡ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ встрСчайтС Π²Ρ‚ΠΎΡ€ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ руководства ΠΏΠΎ Node.js.

V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½. image loader. V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ Ρ„ΠΎΡ‚ΠΎ. V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° V8 Π΄Π²ΠΈΠΆΠΎΠΊ javascript для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader

БСгодня ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠΌΠΈ знаниями Π² области JS Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ прилоТСния для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Node.js, обсудим различия Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΈ сСрвСрного JavaScript-ΠΊΠΎΠ΄Π°, ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ JS-Π΄Π²ΠΈΠΆΠΊΠ°Ρ… ΠΈ ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΈΡ‘ΠΌΠ°Ρ… Node.js-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Какими JS-знаниями Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ для Node.js-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ?

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π»ΠΈ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Насколько Π³Π»ΡƒΠ±ΠΎΠΊΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ JavaScript для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ освоСния Node.js? ΠΠ°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅ΠΌΡƒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ уровня, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Ρ‘Ρ‚ Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΡƒΡŽ ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π² своих ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Π²Ρ‹ΠΊΠ°Ρ…. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, изучая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ, Π³Π΄Π΅ заканчиваСтся Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½Ρ‹ΠΉ JavaScript ΠΈ начинаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° для Node.js.

Если Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π² самом Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡƒΡ‚ΠΈ JavaScript-программиста, я посовСтовал Π±Ρ‹ Π²Π°ΠΌ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ для Node.js, Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ языка:

Π’Ρ‹ΡˆΠ΅ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒ вопрос ΠΎ Ρ‚ΠΎΠΌ, Π³Π΄Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π³Ρ€Π°Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвСрной ΠΈ клиСнтской Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Π½Π° JavaScript. ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± этом.

Различия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ Node.js ΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ

Π§Π΅ΠΌ JS-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° для Node.js отличаСтся ΠΎΡ‚ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΠΎΠ³ΠΎ программирования? Бходство ΠΌΠ΅ΠΆΠ΄Ρƒ этими срСдами Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ Ρ‚Π°ΠΌ ΠΈ Ρ‚Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ язык. Но Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, рассчитанных Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, ΠΎΡ‡Π΅Π½ΡŒ сильно отличаСтся ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. НСсмотря Π½Π° использованиС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ языка, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ различия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π΄Π²Π° эти Π²ΠΈΠ΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ занятия.

Надо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли Ρ‚ΠΎΡ‚, ΠΊΡ‚ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅ занимался Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ΠΎΠΌ, Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Node.js, Ρƒ Π½Π΅Π³ΠΎ имССтся вСсьма ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ довольно быстро ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ всё Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π° ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΠΎΠΌ Π΅ΠΌΡƒ языкС. Если ΠΊ нСобходимости ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ срСду добавляСтся Π΅Ρ‰Ρ‘ ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ язык, Π·Π°Π΄Π°Ρ‡Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ услоТняСтся.
Π˜Ρ‚Π°ΠΊ Π³Π»Π°Π²Π½ΠΎΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ приходится ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π² экосистСмах этих срСд.

Π’ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π½Π΅Ρ‚ Ρ‚Π΅Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π² срСдС Node.js ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Π²ΠΈΠ΄Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ. НапримСр, это API для доступа ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС.

Π•Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ клиСнтской ΠΈ сСрвСрной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Π½Π° JS Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² срСдС Node.js Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅. Если Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚Π΅ΡΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ опСнсорсного прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π²Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅Ρ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° ΠΊΠ°ΠΊΠΎΠΉ вСрсии Node.js Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π² сравнСнии с клиСнтским ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π³Π΄Π΅ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ приходится Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΌΡΡ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅, Π½Π΅ опасаясь ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ новСйшими возмоТностями языка.

Π’Π°ΠΊ ΠΊΠ°ΠΊ JavaScript ΠΊΡ€Π°ΠΉΠ½Π΅ быстро развиваСтся, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ просто Π½Π΅ ΡƒΡΠΏΠ΅Π²Π°ΡŽΡ‚ достаточно ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС Π΅Π³ΠΎ Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²Π°. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° самых свСТих вСрсиях Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ². Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅, Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ это ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ совмСстимости ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π»ΠΈΡ‚ΡŒΡΡ Π² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΊΠ°Π·Π° ΠΎΡ‚ соврСмСнных возмоТностСй JavaScript. МоТно, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, для прСобразования ΠΊΠΎΠ΄Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, совмСстимый со стандартом EcmaScript 5, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ всС Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ транспилятором Babel, Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Node.js Π²Π°ΠΌ это Π½Π΅ понадобится.

V8 ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ JavaScript-Π΄Π²ΠΈΠΆΠΊΠΈ

V8 β€” это Π½Π°Π·Π²Π°Π½ΠΈΠ΅ JavaScript-Π΄Π²ΠΈΠΆΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Google Chrome. ИмСнно ΠΎΠ½ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ JavaScript-ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅. V8 прСдоставляСт срСду выполнСния для JavaScript. DOM ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ API Π²Π΅Π±-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ.

JS-Π΄Π²ΠΈΠΆΠΎΠΊ нСзависим ΠΎΡ‚ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ИмСнно этот Ρ„Π°ΠΊΡ‚ сдСлал Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ появлСниС ΠΈ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Node.js. V8 Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ Π² качСствС Π΄Π²ΠΈΠΆΠΊΠ° для Node.js Π² 2009 Π³ΠΎΠ΄Ρƒ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ прямо-Ρ‚Π°ΠΊΠΈ Π²Π·Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ роста популярности Node.js V8 оказался Π΄Π²ΠΈΠΆΠΊΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² наши Π΄Π½ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ³ΠΎ количСства сСрвСрного JS-ΠΊΠΎΠ΄Π°.

ЭкосистСма Node.js ΠΎΠ³Ρ€ΠΎΠΌΠ½Π°. Благодаря этому V8 Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, посрСдством ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Electron, ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Надо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ, ΠΏΠΎΠΌΠΈΠΌΠΎ V8, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π²ΠΈΠΆΠΊΠΈ:

Π­Ρ‚ΠΈ Π΄Π²ΠΈΠΆΠΊΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ECMA-262, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ Π΅Ρ‰Ρ‘ ECMAScript. ИмСнно эта спСцификация стандартизируСт JavaScript. Π‘Π²Π΅ΠΆΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ стандарта ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь.

▍Разработка JS-Π΄Π²ΠΈΠΆΠΊΠΎΠ² ΠΈ стрСмлСниС ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Π”Π²ΠΈΠΆΠΎΠΊ V8 написан Π½Π° C++, Π΅Π³ΠΎ постоянно ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΡŽΡ‚. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ… систСмах, Π² частности, Π½Π° Mac, Windows ΠΈ Linux. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ дСталях Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ V8. БвСдСния ΠΎ Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… публикациях, Π² Ρ‚ΠΎΠΌ числС β€” Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС V8. Они со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, ΠΈΠ½ΠΎΠ³Π΄Π° β€” ΠΎΡ‡Π΅Π½ΡŒ ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ.

V8 постоянно развиваСтся, Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈ ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΄Π²ΠΈΠΆΠΊΠ°Ρ…. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚, Π² частности, ΠΊ росту ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Node.js. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ Π΄Π²ΠΈΠΆΠΊΠΎΠ² для Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² постоянно ΡΠΎΡ€Π΅Π²Π½ΡƒΡŽΡ‚ΡΡ, Π±ΠΎΡ€ΡΡΡŒ Π·Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΊΠΎΠ΄Π°, продолТаСтся это ΡƒΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π³ΠΎΠ΄Ρ‹. Всё это ΠΈΠ΄Ρ‘Ρ‚ Π½Π° ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΈ программистам.

β–Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡ ΠΈ компиляция

JavaScript считаСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ языком, Π½ΠΎ соврСмСнныС Π΄Π²ΠΈΠΆΠΊΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ JS-ΠΊΠΎΠ΄Π°. Они Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚. Π­Ρ‚ΠΎ вСяниС ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ с 2009-Π³ΠΎ Π³ΠΎΠ΄Π°, ΠΊΠΎΠ³Π΄Π° компилятор JavaScript Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² Firefox 3.5, послС Ρ‡Π΅Π³ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ Π΄Π²ΠΈΠΆΠΊΠΎΠ² ΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² пСрСняли эту идСю.

V8 выполняСт ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ JavaScript для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠ΄Π°. Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ появлСния Google Maps Π² 2004-ΠΌ Π³ΠΎΠ΄Ρƒ JavaScript ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π», прСвратился ΠΈΠ· языка, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ, для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… возмоТностСй Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ писали ΠΏΠΎ нСсколько дСсятков строк, Π² язык, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΈΡˆΡƒΡ‚ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½Ρ‹Π΅ прилоТСния, состоящиС ΠΈΠ· тысяч ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ сотСн тысяч строк ΠΊΠΎΠ΄Π°. Π’Π°ΠΊΠΈΠ΅ прилоТСния ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ часами, Ρ‡Ρ‚ΠΎ ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ отличаСтся ΠΎΡ‚ старых сцСнариСв использования JS, ΠΊΠΎΠ΄ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠ³ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ лишь для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π² Ρ„ΠΎΡ€ΠΌΡ‹. Π’ соврСмСнных условиях компиляция ΠΊΠΎΠ΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ смысл, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ, хотя Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этого шага ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΌΠΎΠΌΠ΅Π½Ρ‚ запуска ΠΊΠΎΠ΄Π°, послС компиляции ΠΊΠΎΠ΄ оказываСтся Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ρ‡Π΅ΠΌ Ρ‚ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обрабатывался Π±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ запускался Π±Ρ‹ быстрСС, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π» Π±Ρ‹ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, обсудив Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ полоТСния, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ JS-Π΄Π²ΠΈΠΆΠΊΠΎΠ², ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ компиляции ΠΊΠΎΠ΄Π°, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. А ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Node.js-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Node.js-прилоТСния

БущСствуСт нСсколько способов Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Node.js-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ ядра process прСдоставляСт ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Node.js-прилоТСния. Выглядит это Ρ‚Π°ΠΊ:

Если вас Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅Π» устраиваСт β€” ΠΌΠΎΠΆΠ΅Ρ‚Π΅ этим ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. ΠŸΡ€ΠΈ Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅ΠΌΡƒ Ρ†Π΅Π»ΠΎΠ΅ число, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ воспринято ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ этот ΠΊΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠ΄Ρ‹ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ для использования ΠΈΡ… Π² собствСнной систСмС для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Π»Π°Π΄ΠΈΡ‚ΡŒ взаимодСйствиС ΠΎΠ΄Π½ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ.
ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ ΠΎ ΠΊΠΎΠ΄Π°Ρ… Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ здСсь.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Node.js Π²Π΅Ρ€Π½Ρ‘Ρ‚ систСмС этот ΠΊΠΎΠ΄.

Надо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ СстСствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ всС Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½Π΅ΠΉ дСйствия. Однако Π² случаС с Node.js часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π² ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… условиях, рассчитаны Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ± HTTP-сСрвСрах, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΎΠΌΡƒ:

Для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ сигналом SIGTERM ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ дСйствия с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «сигналы»? Π‘ΠΈΠ³Π½Π°Π»Ρ‹ β€” это срСдства взаимодСйствия процСссов Π² стандартС POSIX (Portable Operating System Interface). Они ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой увСдомлСния, отправляСмыС процСссу для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Π΅ΠΌΡƒ ΠΎ Π½Π΅ΠΊΠΈΡ… событиях.

ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ сигнал ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΠΈΠ· самой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, воспользовавшись ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

Для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ выполнСния ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ PID процСсса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ планируСтся Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ.

Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния ΠΈΠ· Node.js

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ срСды, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с Ρ‚Π΅ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ установлСны Π²Π°ΠΌΠΈ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Π˜Ρ‚ΠΎΠ³ΠΈ

БСгодня ΠΌΡ‹ ΠΊΠΎΡΠ½ΡƒΠ»ΠΈΡΡŒ вопросов Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΈ сСрвСрного программирования Π½Π° JavaScript, ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ JS-Π΄Π²ΠΈΠΆΠΊΠ°Ρ…, ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды ΠΈΠ· Node.js-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π· ΠΌΡ‹ расскаТСм ΠΎ хостингах для Node.js-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Node.js Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ REPL, ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ скриптам ΠΏΡ€ΠΈ ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π΅, ΠΎ взаимодСйствии с консолью, ΠΈ ΠΎΠ± ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° Π² Π²ΠΈΠ΄Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! КакиС ΡƒΡ‡Π΅Π±Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΏΠΎ JavaScript Π²Ρ‹ посовСтовали Π±Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ?

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *