Chrome が誕生したときからの 4 つの基本原則の 1 つがスピードです。これは今でも、私たちの作業を導く中核的な原則であり続けています。最近の技術改善によって、Chrome のパフォーマンスは Speedometer(さまざまなプラットフォームで動作するブラウザ ベンチマーク)で新たなマイルストーンに到達しました。今回の速さと好奇心の投稿では、どのようにしてそれを実現したかについて説明します。
スピードは、ウェブのブラウジング エクスペリエンスを左右する重要な要素です。速ければ速いほど、ブラウジング エクスペリエンスは楽しくなります。Chrome の最新リリースでは、Chrome のエンジン内部まで深く入り込み、キャッシュやメモリ管理の改良などによってスピードと効率を向上させる余地がある場所を探しました。
HTML 解析処理の改善と特定の機能の最適化
頻繁に使われる JS `Object.prototype.toString` 関数と `Array.prototype.join` 関数をターゲットに、いくつかの最適化を行えることがわかりました。また、CSS の InterpolableColor をターゲットとした改善も行いました。
JavaScript で DOM をアップデートする際によく使われるのが、`innerHTML` です。そこで、これに特化した高速解析パスを追加しました。うれしい驚きだったのは、この作業の一部は WebKit にも効果がありそうなことです。そのため、この作業は WebKit のエンジンにも搭載する予定です。私たちの目的は常に、すべてのウェブユーザーに優れたウェブ エクスペリエンスを提供することです。この作業が幅広い効果を与えることを期待しています。
V8 と Oilpan でのポインタ圧縮と割り当ての効率化
ポインタ圧縮は、V8 と Oilpan(DOM オブジェクトのガベージ コレクタ)の両方で使われ、メモリの節約に貢献しています。そこで、ポインタの圧縮と解凍の方法を最適化し、高トラフィックな項目は圧縮しないようにしました。このオペレーションが行われる頻度を考えれば、パフォーマンスへの影響は非常に幅広い範囲におよびます。さらに、JavaScript の `undefined` のような頻繁にアクセスされるオブジェクトをメモリベースの先頭に移動し、より高速なマシンコードを使ってアクセスできるようにしました。
機能とポインタ圧縮効率の改善を合わせると、この 3 か月で Apple の Speedometer 2.1 ブラウザ ベンチマークが 10% 向上しました。
ハイエンド モバイル デバイスを最大限に活用する
Android 版 Chrome は、常にフットプリントが最小になるように最適化されています。しかし、Android エコシステムは多様で、機能レベルが異なるデバイスが含まれています。ハイエンド デバイスでの Chrome のパフォーマンスを最大限に高めるため、こういったデバイスには、バイナリサイズではなくスピードのためにチューニングしたコンパイラ フラグを使ったバージョンの Chrome を導入します。
このバージョンの Chrome は、対応デバイスで Speedometer 2.1 ベンチマークを 30% 高速に実行できます。