まもなく標準化するHTTP/2のサポート状況

我々が普段閲覧しているWebページの表示には、HTTPという、WebサーバーとWebブラウザー間でデータの送受信を行う通信プロトコルが欠かせない。起源をさかのぼれば、ハイパーテキストやXanaduプロジェクトなど数多くあれど、ドキュメントとして残されたのは1991年のHTTP 0.9が最初だ。そのドキュメントは現在でもWorld Wide Web ConsortiumのWebページで閲覧できる。

現行のHTTP/1.1がRFC 2616として定められたのは1999年だが、既に15年もの月日が経っている。そのためIETFに所属するHTTPbis WGは、GoogleのSPDYプロトコルをベースにしたHTTP/2を2012年11月に発表。そして先日、Microsoftは、Windows 10テクニカルプレビューに搭載したInternet ExplorerがHTTP/2に対応していることを明らかにした。Webブラウザー側の実装が始まりつつあるのだ。

Internet Explorer 11の開発者ツールでHTTP/2をサポートしていることをアピールした

まずはHTTP/2の特徴を解説しよう。従来のHTTP/1.1はWebサーバーとデータ送受信を行う際、Webクライアントはサーバーにリクエストを送信し、その結果WebサーバーはレスポンスをWebクライアントへ送信する。この繰り返しにより、Webページの表示を行うため、必然的に通信量の増加も発生する。

HTTP/1.1の概念図。基本的にはリクエストとレスポンスを順番に行う

HTTP/2はWebサーバーとWebクライアント間のTCPセッション(コネクション)を多重化することで、パフォーマンスの向上を実現した。ストリームと呼ばれる仮想的な通信路を用いた結果、従来は複数張られていたコネクションを1つで済ませている。HTTP/2への対応は通信量の軽減につながるため、スマートフォンなど外出先でのネットワーク環境も向上しそうだ。

実のところHTTP/1.1でもパイプラインという解決法を用いていたが、レスポンスの順番を変更できないため、完全な問題解決には至らなかった。その他にもプロトコルの内容もテキストベースからバイナリベースへ変更し、ヘッダー圧縮やサーバープッシュといった機能も備えている。

HTTP/2の概念図。仮想的なストリーム内でデータを送受信するため、効率性が向上する

気になるのはHTTP/2対応がどこまで進んでいるかという点だ。前述したSPDYベースでGoogleをはじめとする大手Webサイトは対応していたが、HTTP/2の標準化に伴い、TwitterやYahoo! JAPANはHTTP/2への取り組みを表明済み。クライアント側もGoogle Chorome Canary版やMozilla Firefox Nightlyビルド、そして冒頭で述べたInternet Explorer for Windows 10テクニカルプレビューが対応している。なお、プレビュー版の配布を開始したWindows ServerテクニカルプレビューのIISも対応するという。

さらなるJavaScriptのパフォーマンス向上

プロトコルの高速化による恩恵はWebサーバー側の対応が待たなくてはならないが、エンドユーザーレベルでもメリットを享受できるのが、JavaScriptエンジンのパフォーマンス向上だ。もともとInternet Explorerは、長年「Chakra(チャクラ)」というJavaScriptエンジンを搭載している。

そのJavaScriptは、逐次解析しながら実行するインタプリタ方式が一般的だったが、近年は実行前にコンパイルして処理を高速化するJIT(Just-in-Time)コンパイラを備えるようになった。Internet Explorerはバージョン9からJITコンパイラを実装済みである。バージョンを重ねるごとにJITコンパイラの最適化を進めてきたが、今回もさらなる改善を加えた。

その一つがシンプル化。Windows 8/8.1のInternet Explorer 11は少々煩雑なプロセスを経てソースコードをJITコンパイラに渡していたが、Internet Explorer for Windows 10テクニカルプレビューは、最適化時に複雑なコード生成を避けることでシンプル化を実現した。開発チームは文字どおり「Simple JIT」と読んでいる。

Internet Explorer 11のJavaScript実行パイプライン

Internet Explorer for Windows 10のシンプルな実行パイプライン

もう一つの改善点は、実行デバイスを認識してJITスレッドを複数実行する仕組みを導入した点だ。Windows 10が再統合を目指したOSであることは過去のレポートでも紹介したが、その際Internet Explorerは、マシンパワーが異なるデバイス上で動作することを想定しなければならない。そこでChakraにハードウェアを認識させ、ハードウェアリソースに余裕があるデバイスの場合は、複数のJITコンパイラを同時に実行する仕組みを導入させるという。開発チームによるとTypeScript(JavaScriptを拡張した言語)のパフォーマンスが最大30%高速化するそうだ。

デバイスによって複数スレッドを実行することで、TypeScriptコンパイラも最大30%高速化する

その他にもコードのインライン化機能を強化し、ガベージコレクションを改善するなど、数多くの改良が加わっている。HTTP/2のサポートはWebサーバー側の対応が必要だか、Chakraの最適化はWebサーバー管理者もコンテンツ作成者も関係なく、我々エンドユーザーの利益に結びつくことは明らかだろう。新たにInternet Explorer 12としてリリースするのか、バージョン番号を取り外すのか現時点で不明だが、Windows 10正式リリースの暁には、より快適なWeb閲覧環境を享受できそうだ。

阿久津良和(Cactus)