XML 解析を最適化するための最初の戦術の 1 つは、オンザフライで解析することです。つまり、データ全体が到着するまで待たずに、解析するものがあればすぐに解析を開始します。
多くの場合、ボトルネックは CPU ではなくネットワーク接続であるため、これははるかに効率的です。したがって、すべてのネットワーク情報を待たずに答えを見つけることができれば、かなり最適化されたことになります。
用語をグーグルで検索するXML push parser
か、XML pull parser
記事PHP で XML を解析する - メモリ効率の高いストリーム処理を作成する では、PHP5 にバンドルされている XMLReader ライブラリを使用して PHP でそれを行う方法に関するコードを示すチュートリアルを見つけることができます。
これは、基本的に私がしたことをより良い言葉で述べているこのページからの引用です。
PHP 5 では、Extensible Markup Language (XML) を読み取るための新しいクラスである XMLReader が導入されました。SimpleXML やドキュメント オブジェクト モデル (DOM) とは異なり、XMLReader はストリーミング モードで動作します。つまり、ドキュメントを最初から最後まで読み取ります。最後にコンテンツが表示される前に、最初にコンテンツで作業を開始できます。これにより、非常に高速で効率的になり、メモリを非常に節約できます。処理する必要があるドキュメントが大きくなればなるほど、これはより重要になります。
ストリーミング モードでの解析は、手続き型の解析とは少し異なります。すべてのデータがまだそこにあるわけではないことに注意してください。通常行う必要があるのは、ある種のステート マシンを実装するイベント ハンドラを提供することです。タグ A が表示された場合はこれを行い、タグ B が表示された場合はそれを行います。
プッシュ解析とプル解析の違いについては、こちらの記事をご覧ください。簡単に言うと、どちらもストリームベースのパーサーです。XML フィードからネットワーク経由でデータが到着するたびに解析する必要があるため、おそらくプッシュ パーサーが必要になるでしょう。
PHP でのプッシュ解析は、xml_parse()
(libxml 互換レイヤーを使用した libexpat) でも実行できます。コード例xml_parse
PHP マニュアル ページを参照できます。