0

xml データ フィードを使用して simplexml を使用して情報を取得し、そのデータを使用してページを生成します。

このために、次を使用してxmlフィードを取得します

$xml = simplexml_load_file

サーバーがxmlデータを解析するには、サーバーがそれを処理する前にすべてをダウンロードする必要があると私は考えていますか?

明らかに、これは 2kb ファイルではそのような問題ではありませんが、一部のファイルは 100kb に近づいているため、php がページの生成を開始する前に、最初にダウンロードする必要があるすべてのページの読み込みに対して.

一部のページでは xml 配列の 1 つの属性のみを探していたため、ドキュメント全体を解析するのは不自然に思えます。通常はフィードのキャッシュを調べますが、これらのフィードは頻繁に変更されるライブ makets に関連しているため、私としては理想的ではありません。常に最新のデータを保持します。

xml フィードのより効率的な呼び出しを行うためのより良い方法はありますか?

4

1 に答える 1

3

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_parsePHP マニュアル ページを参照できます。

于 2013-02-03T15:06:09.290 に答える