2009-06-14 6 views
14

私はTwitter APIとインターフェースするクラスを構築しています.PHPの組み込みXMLパーサーまたはJSONパーサーが高速であるかどうか疑問に思っていますか? Twitterはどちらのフォーマットでも同じデータを送ってくるので、PHPのパフォーマンスが私の選択を決定します。私はphp_apcを使用しているので、解析時間を無視してバイトコードを実行していると仮定することができます。PHP:JSONまたはXMLパーサーが高速ですか?

ありがとうございます!

more:データから連想配列を取得しようとしています。私はツリーウォーキング、ノード反復、またはあまりにも複雑なものをやっていません。フォーマットは常に同じです。 JSONはネストされた文字列シーケンスの説明のみであるので、DOMインタフェースを提供する必要がなく、解析およびその他の微妙なものを属性

私は任意のベンチマークをしなかった

+7

実際のデータセットでベンチマークしてみませんか?パーサーのパフォーマンスは、あなたがそれを摂取するものにかなり依存する可能性があります。 –

+1

PHP xml-apisのどちらを使用する予定ですか?私は、XMLReaderやSAXの方が速いのに対し、SimpleXMLとDOMはJSONと同等かそれ以上の速度であると推測します。 –

答えて

10

(私は!願っています)が、...私の推測では、JSONパーサーは、XMLパーサーよりも速い方です。

+1

私は同意します。JSONの構造ははるかに単純で動的ではありません。 – Blixt

+4

JSON形式の解析は、明確に定義されたXMLよりもはるかに複雑です。 JSONで構造化されたデータより構造化されたXMLを解析するのがはるかに簡単ですが、標準ライブラリ関数を使用しているために、解析文字列が非常に複雑です。 –

+0

純粋な解析だけを考えた場合、JSONは高速になるはずです。しかし、それは解析されたデータの使用にも依存します。 –

1

答えは、どのように使用するかによって異なります。私はあなたがPHPスクリプトの中でリクエストを作成して処理するならば、XMLがはるかに高速になると信じています。しかし、あなたがAJAX呼び出しを作成し、後で結果を処理することを考えたら、JSON結果をJavaScriptで自動的に表現することで、JSONの使用を検討する必要があるので、オブジェクトとしてのクロスドメイン要求をサポートします。 。

0

JSONはまた、あなたがかつてjson_decodeを実行し、その後、アレイの他の機能のために役に立たないとしてデータにアクセスサイズ

にたくさん小さくなる傾向にあります。

ベンチマークIDをJSONで行く実行しなければ、ベンチマーク、それを私に確信させた上で、アダムからのコメント

17

高速です。 https://twitter.com/status/mentions.[format]を使用して、私はsimplexml_load_string()がjson_decode()よりも少し速いことがわかりました。しかし、その違いは実質的に誤差のマージンです。次のコードで

Test #1 time (json): 4.53225803375 seconds 
Test #2 time (json): 4.06823205948 seconds 
Test #3 time (json): 4.03222990036 seconds 
Test #4 time (json): 3.80421590805 seconds 
Test #5 time (json): 3.88022208214 seconds 

Test #1 time (xml): 3.75221395493 seconds 
Test #2 time (xml): 4.1562371254 seconds 
Test #3 time (xml): 3.60420489311 seconds 
Test #4 time (xml): 3.85622000694 seconds 
Test #5 time (xml): 3.89622211456 seconds 

(Iすでにファイルにデータをcurl'edきた、データ。[XML、JSON])。

<?php 

$test = 'json'; //xml or json 
$data = implode(file("data.".$test),"\r\n"); 

for ($t=1; $t<=5; $t++) { 
    $start[$t] = microtime(1); 
    for ($i=0; $i<3000; $i++) { 
     if ($test == 'xml') $xml = simplexml_load_string($data); 
     else $json = json_decode($data); 
    } 
    $end[$t] = microtime(1); 
    echo "<p>Test #{$t} time ({$test}): " . ($end[$t] - $start[$t]). " seconds</p>"; 
} 
+14

しかし、このテストでは、ロード後にXMLオブジェクトからデータを読み込みません。 json_decodeは単純な配列を返しますが、SimpleXMLは動的な魔法を含むデータを読み取る特別なメソッドを持つオブジェクトを提供します。これはパフォーマンスに影響する可能性があります。 –

4

json returnがオブジェクトである場合、simplexml_load_string()がjson_decode()より高速です。

しかし、json_decode($ string、true)を使用してjsonを配列として返すことは、実際にはオブジェクトを使用するよりもはるかに高速です(配列をオブジェクトと比較するときPHPのほとんどの場合と同じです)。

これらの状況では、json_decode()がsimplexml_load_string()より2倍以上速いことがわかりました。

1

全体的な帯域幅の節約がスクリプトのパフォーマンスにどのように影響するか考えましたか?リクエストが繰り返される場合は、JSONを使用するとかなりの時間が経済的な選択肢になります。

関連する問題