【问题标题】:XML or JSON reponse for Flex applications with PHP backend?带有 PHP 后端的 Flex 应用程序的 XML 或 JSON 响应?
【发布时间】:2011-07-18 02:12:05
【问题描述】:

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

【问题讨论】:

    标签: php xml apache-flex json


    【解决方案1】:

    我会选择 JSON。我们为 Flash Player 添加了原生 JSON 支持,因此它在解析方面的速度与 XML 一样快,而且更简洁/更小。

    =Ryan ryan@adobe.com

    【讨论】:

      【解决方案2】:

      JSON 不是 Flex 的原生结构(很奇怪,是吗?您会认为 {} 对象可以很容易地序列化,但实际上并非如此),XML 是。这意味着 XML 是由虚拟机在幕后完成的,而 JSON 字符串被解析并通过字符串操作转换为对象(即使您使用的是 AS3CoreLib)......严重......就个人而言,我也看到了不一致在 JSONEncoder 中(在某一时刻,数组只是数字索引的对象)。

      一旦将数据转换为 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 ); }
      

      当得到 $_GET['type'] == 'xml' 时,xml.php 将保存一些内容,其中 output_data 返回一个表示 XML 的字符串(大量示例 here

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

      【讨论】:

      • @Peter 如果真的这么简单,那么你最好还是使用 JSON —— 只有当 JSON 真正成为 AS3 的问题时,数据集非常大。
      • 我不确定速度的阈值在哪里。如果您不确定,请进行基准测试。
      • 使用自制的 JSON 解析器(因为 AS2 还没有证明 JSON...),我可以在不到 1 秒的时间内解析约 30k 行,但使用 XML 则需要 30 秒...此外,XML 是冗长的方式,数据传输量大 4 倍,当您达到 Mo 限制时,这是不可忽略的;)
      • @AxelH AS3 也不支持 JSON ......你不应该使用自制的解析器,已经有一个库(或者曾经有一个,没有)一会儿碰了那个栈)。但即使没有,我也想知道你的测试是否冗长——XML 有更多的数据,但在 AS(XPath 和所有这些)内部遍历要快得多,而且代码占用的空间更小。
      • 这个应用程序是一个基本的管理数据,所以我只恢复一些列表插入数据提供者(组合框或数据网格)。我找到了包含 Json 解码器的 as3corelib,所以我不再使用我的了(但他工作得很好!)。我在解码 7 Mo 数据方面仍然存在巨大差异。由于我不需要/使用 XML 优势(XPATH...),因此 Json 似乎是最佳选择...
      【解决方案3】:

      不,当它们的结构完全相同时,JSON 总是比 XML 小。而且解析文本的成本几乎和目标文本的大小差不多。

      因此,JSON 比 XML 更快,如果您计划在 javascript 端重用它们,请选择 JSON。

      基准 JSON 与 XML: http://www.navioo.com/ajax/ajax_json_xml_Benchmarking.php

      【讨论】:

        【解决方案4】:

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

        这取决于 Flex 解析 JSON 的能力,所以我会研究一下。你要传回多少数据?错误/成功消息?用户资料?这将包含什么样的数据?

        是否需要标签上的属性?或者只是一个“结构”。如果它需要属性和类似的东西,并且您不想深入到“类似数组”的结构中,请使用 XML。

        如果您只想拥有 key => 值,甚至是多维的......请使用 JSON。

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

        【讨论】:

          【解决方案5】:

          下载时间:

          JSON 更快。

          Javascript 解析

          JSON 更快

          Actionscript 解析

          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;
          }
          

          但恐怕将这些值返回到 Vectors 中并不那么好。我必须创建一个专门的实用程序类。

          所以哪一个完全取决于您要移动的对象的高级程度。更高级的,使用 XML 以使其更容易在 ActionScript 方面。 简单的东西去 JSON

          【讨论】:

            猜你喜欢
            • 2023-03-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-04-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多