メインコンテンツまでスキップ

「internals」タグの記事が26件件あります

全てのタグを見る

Liftoff: WebAssemblyのためのV8における新しいベースラインコンパイラ

· 約19分
Clemens Backes、WebAssemblyコンパイルの達人

V8 v6.9には、WebAssemblyのための新しいベースラインコンパイラであるLiftoffが含まれています。Liftoffは現在デスクトップシステムでデフォルトで有効になっています。この記事では新しいコンパイルレベルを導入する動機と、Liftoffの実装とパフォーマンスについて詳しく説明します。

V8の並行マーク

· 約17分
Ulan Degenbaev、Michael Lippautz、Hannes Payer — メインスレッドの解放者

この投稿では、並行マーク と呼ばれるガベージコレクション技術について説明します。この最適化により、ガベージコレクターがヒープをスキャンして生存オブジェクトを発見・マークしている間もJavaScriptアプリケーションの実行が続けられます。我々のベンチマークでは、並行マークによりメインスレッドのマーキング時間が60%~70%短縮されることが示されています。並行マークは、Orinocoプロジェクト という、古いガベージコレクターを新しい主に並行かつ並列のガベージコレクターに徐々に置き換えるプロジェクトの最後の欠片です。Chrome 64およびNode.js v10では並行マークがデフォルトで有効になっています。

コードキャッシュの改善

· 約7分
Mythri Alle, 主任コードキャッシャー

V8は、頻繁に使用されるスクリプトのために生成されたコードをキャッシュするためにコードキャッシングを使用します。Chrome 66から、トップレベルの実行後にキャッシュを作成することで、より多くのコードをキャッシュしています。これにより、初回読み込み時の解析時間とコンパイル時間が20〜40%削減されます。

JavaScriptからDOMへ、そして再び戻るまでのトレース

· 約6分
ウラン・デゲンバエフ、アレクセイ・フィリポフ、マイケル・リッパウツ、ハンネス・ペイヤー — DOMの仲間

Chrome 66では、メモリリークのデバッグが格段に簡単になりました。ChromeのDevToolsは、JavaScriptから参照可能なすべてのC++ DOMオブジェクトをトレースおよびスナップショットを取得して、その参照とともに表示することができます。この機能は、V8ガベージコレクタの新しいC++トレースメカニズムの恩恵の一つです。

JavaScriptコードカバレッジ

· 約12分
Jakob Gruber ([@schuay](https://twitter.com/schuay))

コードカバレッジは、アプリケーションの特定部分が実行されたかどうか、必要に応じてどれくらい頻繁に実行されたかについての情報を提供します。テストスイートが特定のコードベースをどれほど徹底的に試験しているかを判断するために一般的に使用されます。

なぜ有益なのか?

JavaScript開発者として、コードカバレッジが有効な状況に直面することがよくあります。例えば以下のような場合です:

  • テストスイートの品質を気にしていますか?大規模なレガシープロジェクトをリファクタリングしていますか?コードカバレッジはコードベースのどの部分がカバーされているかを正確に示します。
  • コードベースの特定部分が到達されているかどうかをすぐ知りたいですか?console.logを用いたprintf\式デバッグやコードを手動でステップ実行する代わりに、コードカバレッジはアプリケーションのどの部分が実行されたかについてライブ情報を表示できます。
  • また、速度向上を目指していて注目すべき箇所を知りたい場合はどうでしょうか?実行回数がホットな関数やループを指摘できます。

V8におけるElementsの種類

· 約19分
Mathias Bynens ([@mathias](https://twitter.com/mathias))
注記

注: 記事を読むよりプレゼンを見る方が好みの方には、以下の動画をぜひお楽しみください!

JavaScriptのオブジェクトは、任意のプロパティを関連付けることができます。オブジェクトプロパティ名には任意の文字が含まれることが可能です。JavaScriptエンジンが最適化を選択する興味深いケースの1つが、名前が純粋に数値であるプロパティ、特に配列インデックスです。

V8での高速なプロパティ

· 約16分
Camillo Bruni([@camillobruni](https://twitter.com/camillobruni))、また[「Fast `for`-`in`](/blog/fast-for-in)」の著者でもあります

この記事では、V8が内部的にJavaScriptプロパティをどのように扱うかを説明したいと思います。JavaScriptの観点からは、プロパティに必要な区別はわずかです。JavaScriptオブジェクトは主に辞書のように振る舞い、キーは文字列であり、値には任意のオブジェクトを使用できます。ただし仕様では、整数インデックス付きのプロパティとその他のプロパティを反復中に異なる扱いをしています。それ以外では、異なるプロパティは、整数インデックス付きであるかどうかに関係なくほぼ同じ動作をします。

IgnitionとTurboFanの導入

· 約8分
V8チーム

本日、V8 v5.9用の新しいJavaScript実行パイプラインの導入を発表できることに興奮しています。このバージョンはChrome v59の安定版に到達します。この新しいパイプラインにより、実際のJavaScriptアプリケーションで大幅なパフォーマンス改善と大きなメモリ節約を実現しました。本記事の最後で数値について詳しく説明しますが、まずはパイプライン自体について見ていきましょう。

V8における高速な`for`-`in`

· 約17分
Camillo Bruni ([@camillobruni](http://twitter.com/camillobruni))

for-inは多くのフレームワークで使用される広く普及した言語機能です。その普及にもかかわらず、実装の観点から見るとやや分かりづらい言語構造の一つです。V8はこの機能を可能な限り高速化するために大変な努力を重ねました。昨年にかけて、for-inは完全に仕様に準拠し、コンテキストによっては最大で3倍速くなりました。

V8の未来をテストするために助けてください!

· 約3分
Daniel Clifford ([@expatdanno](https://twitter.com/expatdanno)), オリジナルミュンヘンV8醸造者

V8チームは現在、リアルワールドのJavaScriptに向けた将来のスピードアップを実現する新しいデフォルトのコンパイラパイプラインに取り組んでいます。この新しいパイプラインは、すべてのChromeチャンネルに新しい構成を展開する際に驚きがないことを確認するために、今日Chrome Canaryでプレビューできます。