HTML5ではパーサの動作も仕様に明記。ブラウザ間の互換性が高くなる!
HTML5対応パーサがFirefox 4に搭載されることを、先週の記事「Firefox 4.0の計画が発表。Direct2Dで高速描画、マルチタッチ、64ビット対応。来月にはβ版が登場か」で紹介しました。
HTML5パーサとは、単にHTML5として記述されたHTML文書をパースできるという意味ではなく、HTML5の仕様書にあるパーサの動作についての仕様を実装したものです。
そう、HTML5ではパーサの動作についても仕様書の「8.2 Parsing HTML documents」の項目で記述されているのです。これによってどのWebブラウザでも基本的な内部動作が揃うことが期待されています。
相互互換性のためのリバースエンジニアリングも不要に
仕様書では、詳細にわたりHTML5パーサの動作がアルゴリズムのレベルで記述されています。見出しだけをリストアップしてみました。
- 8.2.1 Overview of the parsing model
- 8.2.2 The input stream
- 8.2.3 Parse state
- 8.2.4 Tokenization
- 8.2.5 Tree construction
- 8.2.6 The end
- 8.2.7 Coercing an HTML DOM into an infoset
- 8.2.8 An introduction to error handling and strange cases in the parser
モジラの開発者向けWebサイトに5月14日付けで掲載された記事「Firefox 4 の HTML5 パーサ – インライン SVG、スピード、などなど」では、このHTML5仕様に対応したHTML5パーサについて解説しています。記事によると、Webブラウザベンダ各社はこれまで相互互換性を実現するために、他社のWebブラウザのリバースエンジニアリングをすることもあったそうです。それがHTML5パーサによって標準化されるとのこと。
HTML5パーサでは何がいままでと違うのか。この記事からの解説を引用します。字句化(Tokenization)はIEに、ツリー構築(Tree Construction)はWebKitの挙動に近いとのこと。メインスレッド外の処理については、おそらくFirefoxにおけるHTML5パーサの挙動についての解説でしょう。
HTML5 の構文解析アルゴリズムは字句化 (tokenization) とツリー構築 (tree building) というふたつのパートから構成されます。字句化はソースストリームをタグやテキスト、コメント、要素中の属性などに分割する処理です。ツリー構築はそれらの情報を受け取り DOM ツリーを構築する処理になります。
HTML5 構文解析アルゴリズムの字句化パートは、これまでの Gecko の挙動よりも Internet Explorer に近いものとなっています。Internet Explorer は大きなマーケットェアを持っているので、Web サイトの多くが IE のトークナイザで壊れないようにテストされていたと言えるのです。一方、ツリー構築の部分は WebKit の挙動に近いものとなっています。ですから、HTML5 以前は WebKit が最も妥当なツリー構築手法を提供していたのです。
さらに、HTML5 パーサはネットワークストリームの構文解析をメインスレッド外で行います。これまで、ブラウザはほとんどのタスクをメインスレッドで行ってきました。このメインスレッド外での構文解析という大きな変更は、古い Gecko の HTML パーサよりもメンテナンス性の高い HTML5 パーサのコードベースによって実現できました。
HTMLパーサのコモディティ化がWebの進歩につながる
HTML5の仕様書にパーサの動作まで記述されたことでWebブラウザ間での互換性が高まることが期待されています。いままでブラウザごとの挙動の違いに悩んでいたWebデザイナー、Webデベロッパーには朗報です。
それだけでなく、誰でも互換性の高いHTML5パーサの開発が可能になることで、既存のWebブラウザベンダー以外にもさまざまなところからアプリケーションが登場してくる可能性が高まります。例えばサーバでのWebページの画面キャプチャやWebページのスクレイピングなどが以前より簡単かつ確実に実現できるようになるでしょう。
Webページを読み取って解析し、情報を抽出するという部分がHTML5ではよりコモディティ化することになります。これによるWebブラウザの進化の促進、Webページを利用したアプリケーションの拡大などで、Webはまた一段の進歩を遂げるのではないでしょうか。