V8 エクストラ
V8はJavaScript言語の組み込みオブジェクトと関数の大部分をJavaScript自体で実装しています。たとえば、Promisesの実装がJavaScriptで書かれているのを見ることができます。このような組み込み機能は、自己ホスト型 と呼ばれます。これらの実装は、スタートアップスナップショットに含まれており、新しいコンテキストをランタイムで自己ホスト型の組み込み機能をセットアップして初期化する必要なく迅速に作成できます。
V8はJavaScript言語の組み込みオブジェクトと関数の大部分をJavaScript自体で実装しています。たとえば、Promisesの実装がJavaScriptで書かれているのを見ることができます。このような組み込み機能は、自己ホスト型 と呼ばれます。これらの実装は、スタートアップスナップショットに含まれており、新しいコンテキストをランタイムで自己ホスト型の組み込み機能をセットアップして初期化する必要なく迅速に作成できます。
約6週間ごとに、私たちはリリースプロセスの一環として新しいV8ブランチを作成しています。各バージョンはV8のGitマスターから直前に分岐し、Chrome Betaマイルストーン用にChromeが分岐するタイミングで行われます。本日、最新のブランチV8バージョン4.9を発表できることを嬉しく思います。このバージョンはChrome 49 Stableと連動してリリースされるまでベータ版です。V8 4.9は開発者向けの魅力的な機能が満載で、数週間後のリリースに先立ち、そのいくつかのハイライトを紹介したいと思います。
Math.random()
は引数を取らず、0以上1未満の正の符号を持つNumber
値をランダムまたは擬似ランダムにほぼ均等分布で返します。この関数は実装依存のアルゴリズムまたは戦略を使用します。
約6週間ごとに、リリースプロセスの一環としてV8の新しいブランチを作成します。各バージョンは、ChromeがChrome Betaマイルストーン用のブランチを作成する直前にV8のGitマスターから分岐されます。本日、最新のブランチであるV8バージョン4.8を発表できることを嬉しく思います。このバージョンはChrome 48 Stableと連携してリリースされるまでベータ版として滞在します。V8 4.8にはいくつかの開発者向け機能が含まれているため、リリースの数週間前にそのハイライトをプレビューしたいと思います。
ジャンク、言い換えれば目に見えるスタッター(処理の遅延)は、Chromeが16.66ms以内にフレームをレンダリングできない場合(60フレーム毎秒の動きが邪魔される)に発生します。現時点では、V8のガベージコレクションのほとんどがメインレンダリングスレッドで実行されています(図1参照)。これにより、多くのオブジェクトを管理する必要がある場合にジャンクが発生することが多々あります。ジャンクの排除はV8チームにとって常に最優先事項でした(1, 2, 3)。この記事では、Chrome 41からChrome 46までに実装された最適化について説明し、ガベージコレクションの一時停止を大幅に削減し、ユーザー体験を向上させる結果となったものを紹介します。
およそ6週間ごとに、リリースプロセスの一環としてV8の新しいブランチが作成されます。それぞれのバージョンは、Chromeのベータ版マイルストーンのためにChromeがブランチ化される直前に、V8のGitマスターからブランチ化されます。本日は、私たちの最新のブランチ、V8バージョン4.7を発表できることを嬉しく思います。このバージョンはChrome 47の安定版と連動してリリースされるまでベータ版となります。V8 v4.7には開発者向けのさまざまな新機能が詰まっており、数週間後のリリースに向けて一部のハイライトをお届けします。
JavaScript仕様には多くの組み込み機能が含まれています。例えば、数学関数から完全装備の正規表現エンジンまでです。V8の新しいコンテキストにはこれらの関数が最初から利用可能です。これが機能するためには、グローバルオブジェクト(例えばブラウザのwindowオブジェクト)とすべての組み込み機能が設定され、コンテキストが作成される際にV8のヒープに初期化されなければなりません。この初期化を一から行うにはかなりの時間がかかります。
約6週間ごとに、私たちはリリースプロセスの一環としてV8の新しいブランチを作成します。各バージョンはV8のGitマスターからChromeがChrome Betaマイルストーン用にブランチを分岐する直前に分岐されます。本日、私たちは最新のブランチV8バージョン4.6を発表できることを喜ばしく思います。このバージョンは、Chrome 46 Stableと連携してリリースされるまでベータ版です。V8 4.6は、開発者向けの便利な機能でいっぱいなので、数週間後のリリースに先立って、いくつかのハイライトを事前にお届けしたいと思います。
JavaScriptのパフォーマンスはChromeの価値の重要な側面の1つであり、特にスムーズな体験を実現する上で重要です。Chrome 41以降、V8は新しい技術を利用して、アイドル時間内の小さな未使用時間に高コストなメモリ管理操作を隠すことで、Webアプリケーションの応答性を向上させています。この結果、Web開発者はガベージコレクションによるジャンクが大幅に軽減され、スムーズなスクロールや滑らかなアニメーションを期待することができます。
V8はジャストインタイムコンパイル (JIT) を使用してJavaScriptコードを実行します。これは、スクリプトを実行する直前にそれを解析してコンパイルしなければならないことを意味し、これがかなりのオーバーヘッドを引き起こす可能性があります。私たちが最近発表したように、コードキャッシュはこのオーバーヘッドを軽減するための技術です。スクリプトが初めてコンパイルされる際、キャッシュデータが生成されて保存されます。次回V8が同じスクリプトをコンパイルする必要があるとき、たとえ異なるV8インスタンスであっても、キャッシュデータを使用してコンパイル結果を再現することができ、一からコンパイルする必要がありません。その結果、スクリプトはより速く実行されます。