AWS LambdaがNode.js 8.10に対応。非同期処理を簡潔に記述できるasync/awaitサポート、新インタプリタ&コンパイラで省メモリかつ高速に
Node.js 8.10に対応したAWS Lambdaでは、非同期処理を簡潔に記述できる新しい構文のasync/awaitをサポートし、JavaScriptエンジンのV8に搭載された「Ignition」インタプリタと「Turbofan」JITコンパイラの組み合わせで省メモリかつ高速な実行を実現した。
AWS LambdaがNode.js 8.10に対応したことが発表されました(AWSブログの紹介記事、下記はアナウンスのページ)。
AWS Lambdaは、サーバの起動や終了、負荷に応じてサーバ数を増減させるといったサーバの管理や運用をクラウドが自動的に行うなど、サーバのことを意識せずにプログラマがアプリケーションを実行できる、いわゆる「サーバレスコンピューティング」や「サーバレスアーキテクチャ」と呼ばれるアプリケーション実行環境を実現するサービスです。
AWS Lambdaは、このサーバレスアーキテクチャのサービスとしてもっとも普及しているサービスの1つ。
今回AWS LambdaがNode.js 8.10に対応したことで、ECMAScript 2017から採用された新しい構文であるasync/awaitが利用可能になりました。
また、Node.js 8.10に搭載されているJavaScriptエンジンの新しい「Ignition」インタプリタと「Turbofan」コンパイラによって、これまでよりもり省メモリかつ高速にコードが実行できるようになっています。
async/awaitで簡潔に非同期処理を記述可能に
非同期処理を記述したコードは、コードが書かれた順番に処理が進んでいくとは限らないなどの理由から、一般にコードが複雑で可読性が低くなりがちです。AWS Lambdaが対応したNode.js 8.10でサポートされたasync/awaitは、こうした複雑なコードをより簡潔に記述するための新しい構文です。
また、Node.js 8.10では、JavaScriptエンジンの「V8 Release 5.9」から搭載された「Ignition」インタプリタと「Turbofan」JITコンパイラが搭載されています。
このインタプリタとJITコンパイラの組み合わせでは、プログラムの実行開始時、まだJITコンパイラのTurbofanから最適化されたバイナリコードが生成されない初期段階では、Ignitionインタプリタによって小さなメモリオーバーヘッドでコードを実行します。
そしてコードを解析していたTurbofanが最適化されたネイティブコードを生成できるようになった段階でIgnitionからTurbofanへと処理を受け渡し、そこからはTurbofanによって生成されたネイティブコードによる高速な実行へ移行します。
これにより、それまでNode.jsに採用されていた「Crankshaft」JavaScriptエンジンよりも省メモリかつ最大20%程度高速にJavaScriptのコードを実行できるようになっています。
「V8 Release 5.9」はWebブラウザのChrome 59以降にも搭載されています。
あわせて読みたい
マーチン・ファウラー氏「リファクタリング 2nd Edition」で20年ぶり内容刷新、サンプルコードはJavaScriptに。Web主体で書籍はエッセンシャル版の位置づけ
≪前の記事
高収入なIT資格はどれ? 1位 公認ITガバナンス、2位 AWSソリューションアーキテクト、3位 プロジェクトマネジメントプロフェッショナル。米グローバルナレッジ調べ