使用PHP后端的Flex应用程序的XML或JSON响应?

使用PHP后端的Flex应用程序的XML或JSON响应?,php,xml,apache-flex,json,Php,Xml,Apache Flex,Json,我正在开发一个floorplanner Flex迷你应用程序。我只是想知道在从PHP生成响应时,JSON或XML在性能方面是否是更好的选择。我目前倾向于使用JSON,因为响应也可以用于Javascript。我在其他地方读到过JSON比XML需要更长的解析时间,这是真的吗?与Flex中的JSON相比,使用XML处理数据的灵活性如何?不,当JSON的结构完全相同时,它们总是比XML小。解析文本的成本几乎取决于目标文本的大小 所以,JSON比XML快,如果您打算在javascript端重用JSON,请

我正在开发一个floorplanner Flex迷你应用程序。我只是想知道在从PHP生成响应时,JSON或XML在性能方面是否是更好的选择。我目前倾向于使用JSON,因为响应也可以用于Javascript。我在其他地方读到过JSON比XML需要更长的解析时间,这是真的吗?与Flex中的JSON相比,使用XML处理数据的灵活性如何?

不,当JSON的结构完全相同时,它们总是比XML小。解析文本的成本几乎取决于目标文本的大小

所以,JSON比XML快,如果您打算在javascript端重用JSON,请选择JSON

基准JSON与XML:
不,当JSON的结构完全相同时,JSON总是比XML小。解析文本的成本几乎取决于目标文本的大小

所以,JSON比XML快,如果您打算在javascript端重用JSON,请选择JSON

基准JSON与XML:

如果你想使用Javascript,一定要使用JSON。两者都有很好的结构

这取决于Flex解析JSON的能力,所以我将对此进行研究。您要传回多少数据?错误/成功消息?用户档案?这将包含什么样的数据

它需要标签上的属性吗?或者只是一个结构。如果它需要属性之类的东西,并且您不想深入到类似数组的结构中,那么可以使用XML

如果你只是想得到key=>value,即使是多维的。。。使用JSON


这一切都取决于您将要来回传递的数据类型。这将为您做出决定:

如果您打算使用Javascript,一定要使用JSON。两者都有很好的结构

这取决于Flex解析JSON的能力,所以我将对此进行研究。您要传回多少数据?错误/成功消息?用户档案?这将包含什么样的数据

它需要标签上的属性吗?或者只是一个结构。如果它需要属性之类的东西,并且您不想深入到类似数组的结构中,那么可以使用XML

如果你只是想得到key=>value,即使是多维的。。。使用JSON


这一切都取决于您将要来回传递的数据类型。这会让你做出决定:

JSON不是一个本机的Flex结构,奇怪吧?您可能会认为{}对象可以很容易地序列化,但实际上XML不是。这意味着XML是由虚拟机在幕后完成的,而JSON字符串则通过字符串操作被解析并转化为对象,即使您使用的是AS3CoreLib。。。总的就我个人而言,我还看到JSONECODER中的不一致之处,一个点数组只是数字索引对象

一旦数据被转换成AS3对象,用XML搜索和解析数据的速度就比用对象更快。XPath表达式使数据遍历成为一种乐趣,与其他事物相比,它几乎非常容易让您微笑

另一方面,JS更擅长解析JSON。好多了,好多了。但是,由于转向JavaScript是一种可能。。。总有一天。。。那么你可能想考虑一下,JSON的未来使用是否值得现在的性能? 但这里有一个问题,为什么不简单地有两个输出?由于JS和AS都可以为post提供几乎任意数量的变量,因此您只需要关心服务器如何发送数据而不是接收数据。这里有一种可能的处理方法:

 // 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();
 }
然后,当获取$_GET['type']='js'时,js.php将是:

 function output_data( $data ){ return json_encode( $data ); }
当获取$\u GET['type']='xml'时,xml.php会保存一些东西,这些东西的输出数据会返回一个字符串,该字符串表示大量的xml示例


当然,如果你使用的是一个框架,那么你可以用一个视图来做类似的事情,而不是我的建议归结为你应该有两个不同的视图并使用MVC。

JSON不是一个本机结构,对吧?您可能会认为{}对象可以很容易地序列化,但实际上XML不是。这意味着XML是由虚拟机在幕后完成的,而JSON字符串则通过字符串操作被解析并转化为对象,即使您使用的是AS3CoreLib。。。总的就我个人而言,我还看到JSONECODER中的不一致之处,一个点数组只是数字索引对象

一旦数据被转换成AS3对象,用XML搜索和解析数据的速度就比用对象更快。XPath表达式使数据遍历成为一种乐趣,与其他事物相比,它几乎非常容易让您微笑

另一方面,JS更擅长解析JSON。好多了,好多了。但是,罪 ce迁移到JavaScript可能是一个。。。总有一天。。。那么你可能想考虑一下,JSON的未来使用是否值得现在的性能? 但这里有一个问题,为什么不简单地有两个输出?由于JS和AS都可以为post提供几乎任意数量的变量,因此您只需要关心服务器如何发送数据而不是接收数据。这里有一种可能的处理方法:

 // 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();
 }
然后,当获取$_GET['type']='js'时,js.php将是:

 function output_data( $data ){ return json_encode( $data ); }
当获取$\u GET['type']='xml'时,xml.php会保存一些东西,这些东西的输出数据会返回一个字符串,该字符串表示大量的xml示例

当然,如果您使用的是框架,那么您可以使用视图来执行类似的操作。我的建议归结为,您应该有两个不同的视图并使用MVC。

下载时间:

JSON更快

Javascript解析

JSON更快

动作脚本解析

XML更快

Actionscript中的高级使用

XML更适合所有E4X功能。 JSON是有限的,不知道向量,这意味着您只能使用数组,或者需要使用以下内容覆盖ascorelib中的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;
}
但我担心将这些值重新转换成向量并没有那么好。我不得不专门上一堂实用课

所以,哪一个取决于你要移动的对象有多先进。。更高级的是,使用XML使ActionScript端变得更简单。 简单的东西去JSON下载时间:

JSON更快

Javascript解析

JSON更快

动作脚本解析

XML更快

Actionscript中的高级使用

XML更适合所有E4X功能。 JSON是有限的,不知道向量,这意味着您只能使用数组,或者需要使用以下内容覆盖ascorelib中的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;
}
但我担心将这些值重新转换成向量并没有那么好。我不得不专门上一堂实用课

所以,哪一个取决于你要移动的对象有多先进。。更高级的是,使用XML使ActionScript端变得更简单。
简单的东西用JSON

我用JSON。我们已经向FlashPlayer添加了本机JSON支持,因此它在解析方面与XML一样快,而且更不冗长/更小


=瑞安ryan@adobe.com我会选择JSON。我们已经向FlashPlayer添加了本机JSON支持,因此它在解析方面与XML一样快,而且更不冗长/更小


=瑞安ryan@adobe.com

@Peter如果真的那么简单,那么你最好还是全面使用JSON——JSON在AS3中真正成为问题的唯一时间是超大数据集。我不确定速度的门槛在哪里。如果您不确定,请使用基准测试。使用自制的JSON解析器,因为AS2尚未证明JSON…,我可以用JSON在不到1秒的时间内解析约30k行,但使用XML需要30秒。。。而且,XML是一种冗长的方式,在数据传输中要大4倍,当您达到Mo限制时,这是不容忽视的@AxelH AS3也不支持JSON。。。。您不应该使用自制的解析器,已经有了一个用于该解析器的库,或者曾经有过一个库,很久没有接触过该堆栈了。但即使没有,我也会对你的测试的详细程度感到好奇——XML有更多的数据,但它在AS XPath和其他方面的遍历速度要快得多,代码占用的空间也更小。这个应用程序是一个基本的管理数据,所以我只恢复一些列表以插入到dataprovider combobox或datagrid中。我找到了包含Json解码器的as3corelib,因此我不再使用我的解码器,但他工作得很好!。在解码7个月的数据时,我仍然有巨大的差异。因为我不需要/使用XML advantage XPATH。。。Json似乎是最好的选择…@Peter如果它真的那么简单,那么你可能最好全面使用Json-Json真正成为AS3问题的唯一时间是在超大数据集上。我不确定速度的阈值在哪里。如果您不确定,请使用基准测试。使用自制的JSON解析器,因为AS2尚未证明JSON…,我可以用JSON在不到1秒的时间内解析约30k行,但使用XML需要30秒。。。而且,XML是一种冗长的方式,在数据传输中要大4倍,当您达到Mo限制时,这是不容忽视的@AxelH AS3也不支持JSON。。。。您不应该使用自制的解析器,已经有了一个用于该解析器的库,或者曾经有过一个库,很久没有接触过该堆栈了。但即使没有,我也会对你的测试的详细程度感到好奇——XML有更多的数据,但它在AS XPath和其他方面的遍历速度要快得多,代码占用的空间也更小。这个应用程序是一个基本的管理数据,所以我只恢复一些列表以插入到dataprovider combobox或datagrid中。我找到了包含Json解码器的as3corelib,因此我不再使用我的解码器,但他工作了 E在解码7个月的数据时,我仍然有巨大的差异。因为我不需要/使用XML advantage XPATH。。。Json似乎是最好的选择。。。