2011-07-18 10 views
1

私はフロアプランナーFlex Miniアプリケーションを開発しています。私は、PHPからの応答を生成する際に、JSONまたはXMLがパフォーマンスの面で優れた選択肢になるかどうか疑問に思っていました。私は現在、Javascriptでレスポンスを再利用できるので、現在はJSONに傾いています。私はJSONがXMLよりも構文解析に時間がかかりますが、それは本当ですか? FlexでXML対JSONを使ってデータを扱う際の柔軟性はどうですか?PHPバックエンドを使用したFlexアプリケーションのXMLまたはJSONの応答?

答えて

2

JSONはネイティブ構造ではありません(奇妙なことに、あなたは{}オブジェクトを簡単にシリアライズできると思うでしょうが、実際はそうではありません)。これは、JSON文字列が解析され、String操作(たとえ、AS3CoreLibを使用している場合でも)によってオブジェクトに変換されている間に、XMLが仮想マシンによってシーンの裏で行われることを意味します...個人的に、私はまた、 JSONEncoderで(ある時点では、配列は単に数値でインデックスされたオブジェクトでした)。

データがAS3オブジェクトに変換されると、オブジェクトの場合よりもXMLのデータを検索して解析するのがさらに高速になります。 XPath式は、データトラバーサルを楽しいものにします(他のものと比較して笑顔になるほど簡単です)。

一方、JSはJSONを解析する方がはるかに優れています。ほんの少し、より良い。しかし、JavaScriptへの移行は「多分...いつか」なので、「JSONの将来の使用は今のところ成果を上げる価値があるのでしょうか」と考えるかもしれません。

しかし、ここには質問がありますが、単に2つの出力がないのはなぜですか。 JSとASはどちらもPOSTに実質的に任意の数の変数を与えることができるので、実際にサーバーが受信しないデータをどのように送信するかについて心配する必要があります。ここでは、この処理するための潜在的な方法です:$ _GET [ 'タイプ']を取得するときに次に

// as you are about to output: 
$type = './outputs/' . $_GET[ 'type' ] . '.php'; 
if(file_exists($type) && strpos($type, '.', 1) === FALSE) 
{ 
    include($type); 
    echo output_data($data); 
} 
else 
{ 
    // add a 404 if you like 
    die(); 
} 

は、== 'jsが'、js.phpは次のようになります。

function output_data($data){ return json_encode($data); } 

$ _GETを取得['type'] == 'xml'、xml。phpはoutput_dataがXMLを表す文字列を返すようなものを保持します(多くの例:here

もちろん、フレームワークを使用している場合は、代わりにビューでこれを行うことができます「あなたは2つの異なるビューを持ち、MVCを使用する必要があります」)。

+0

私は現在あなたの戦略に傾いています。しかし、どちらの場合でも、データを取得するロジックは同じで、応答タイプのみが異なるため、XMLとJSONの両方の解析で同じ「ビュー」を共有できます。しかし、私が扱うデータはフロアプランに描画されたオブジェクトだけです。だから、各オブジェクトは、幅、高さ、id、その他の単純な1次元属性のような属性しか持たないので、e4xの柔軟性は、もっと複雑なデータセットのために本当に有益ではないでしょう。私は間違っている) – peter

+0

@Peter JSONが本当に問題になる唯一の唯一の時間は、非常に大量のデータを持つ唯一の方法です。 – cwallenpoole

+0

何百万というレコードのような大規模なデータセット?データセットのレコード数は、1〜2千件に過ぎません。 – peter

0

いいえ、JSONは、構造が完全に同じでもXMLよりも常に小さいです。また、テキストを解析するコストは、ほとんどターゲットテキストのサイズになります。

JSONはXMLよりも高速です.JavaScript側でJSONを再利用する予定がある場合は、JSONを選択してください。 XML対

ベンチマークJSON: http://www.navioo.com/ajax/ajax_json_xml_Benchmarking.php

0

あなたはJSONで行く間違いなく、それにJavascriptを使用するつもりなら。どちらも非常に良い構造を持っています。

FlexはJSONをどれだけうまく解析できるかによって異なりますので、その点を検討します。どのくらいのデータを返す予定ですか?エラー/成功メッセージ?ユーザープロファイル?これにはどのような種類のデータが含まれますか?

タグに属性が必要ですか?または単に「構造」。それが属性やそのようなものを必要としていて、 "配列のような"構造に深入りしたくない場合は、XMLを参照してください。

key => value、多次元の場合でもJSONを使用する場合は、

すべては、どのような種類のデータを前後に渡すかによって異なります。それはあなたのためにあなたの決定を下すでしょう:)

0

ダウンロード時間:

JSON高速です。

Javascriptを解析

JSON

ActionScriptの解析

XMLが高速である高速です。

ActionScriptの内の高度な使用

XMLは、すべてのE4X機能を持つ優れています。 JSONはとして素敵なベクトルの知識は、あなたがアレイに限定されているか

else if (value is Vector.<*>) { 
    // converts the vector to an array and 
    return arrayToString(vectorToArray(value)); 
} else if (value is Object && value != null) { 



private function vectorToArray(__vector:Object):Array { 
    var __return : Array; 
    var __vList  : Vector.<*>; 

    __return = new Array; 

    if (!__vector || !(__vector is Vector.<*>)) 
    { 
     return __return; 
    } 

    for each (var __obj:* in (__vector as Vector.<*>)) 
    { 
     __return.push(__obj); 
    } 

    return __return; 
} 

ような何かをascorelibにJSONエンコーダーをオーバーライドする必要があります。しかし、私は戻ってベクターにそれらの値を取得怖い意味ないと限定されていないです。私は完全なユーティリティクラスをそれに捧げなければなりませんでした。

あなたのオブジェクトがどのように進んでいくかによって、どちらが先に進むのでしょうか。高度な方は、XMLを使ってActionScriptの方が楽になるようにしてください。 シンプルなものgo JSON

3

JSONと一緒に行きます。 Flash PlayerにネイティブなJSONサポートを追加しました。そのため、XMLと同じように解析側で高速になり、冗長性も小さくなります。

= Ryan [email protected]

関連する問題