JSONの軽やかなペイロードに比べて,"ファット"なXMLは何と遅く,リソースを浪費するものなのだろうか – そう信じる多くの意見に対して,MarklogicのリードエンジニアであるDavid Lee氏は怯まなかった。33の異なるドキュメントによる実験と,もっとも一般的に使用されているブラウザやオペレーティングシステム上での1,200に及ぶテストを実施して,その結果を発表したのだ。氏が発見したのは,ユーザエクスペリエンス全体としてのパフォーマンス(転送,解析,ドキュメントのクエリ)を比較したとき,XMLとJSONフォーマットはほとんど同じだという事実である。
実験のために氏は,Webサーバが配信したドキュメントをブラウザで解析してクエリを行うという,XMLとJSONドキュメントのユースケースを模倣するテスト環境を構築して,それを一般公開した。サーバがクライアントにソースデータを提供し,クライアントから送信される結果を収集する,という構成だ。クライアントはブラウザ上で動作するJavaScriptアプリケーションで,jQueryのパフォーマンス測定部分以外は,JavaScriptを使って手作業で記述されたコードを使用して測定を行う。
テストには100kBから1MBまでの7つのドキュメントを使用する。ドキュメントはそれぞれ,2つのJSONと3つのXMLバリアントで構成されている。さらに氏は,さまざまなデバイスやブラウザ,おペレーティングシステムやネットワークについても,テストで取り上げることを試みている。テストは "クラウドソーシング" で実施された。すなわち,テスト環境のURLをパブリックなものとして,メーリングリストやソーシャルメディアサイトで広く公開したのだ。現在までに1,200件,個別に成功したテスト結果が集まっている。一般的に使用されているブラウザやオペレーティングシステムはほとんどカバーできた。氏は自身の記事において,すべてのテストデータと個別のテスト結果について資料を作成している。
実験の結果を元に氏が描いた結論は,概ね次のようなものだ。
- パース速度は使用するテクニックによってまちまちだ。純粋なJavaScriptによるパース処理では,一般的にXMLの方がJSONよりもパフォーマンスがよいが,クエリ速度はJSONの方が速い。ただしどちらについても,反対の結果となる例外が存在する。
- JavaScriptのライブラリであるjQueryの使用は,JSONでも相当のペナルティとなるが,XMLではさらに顕著だ。
- は非常に大きなものであっても,格納しているコンテント情報がほぼ同じならば,圧縮方法に関わりなく,ほとんど同じサイズに圧縮される。
- 圧縮されたドキュメントは,JSONあるいはXMLとしてさまざまなデバイスへのドキュメント転送に要する時間は,マークアップの形式には関係なく,実質的にデバイス毎に同じである。
実験の結果を踏まえて氏は,アーキテクトや開発者に対していくつかの提言をしている。
- トータルパフォーマンスにおいては,可能な限りHTTP圧縮を使うことが,唯一の最重要なファクタである。
- 転送とクエリのためにマークアップを最適化せよ。
- データ転送やパース処理,クエリが他の問題に比較して重大なものでない限り,最適化を試みてはならない。
最後に氏は,次のようにアドバイスする。
誰も信用しないことです。
言われたことを盲目的に信じてはいけません。実験するのです。自分自身のデータとコードを使って,自分自身のユーザとデバイスでテストしなさい。"自明"なことが常に真実とは限りません。