`
nlslzf
  • 浏览: 1045472 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

FLASH对XML的另一种解释方法(优化速度)

    博客分类:
  • flex
阅读更多
http://www.flashempire.com/school/tutorview.php?id=281
简介:
    在网上许多XML的解释数据都涉及到在FLASH不断地从一个XML文档中读取节点树来释放数据。这种做法有两个不足的地方:速度和可读性。本文介绍了一种不是新的,但是,更可用的方法……
原文Better XML Parsing

    翻译如下:

    在网上许多XML的解释数据都涉及到在FLASH不断地从一个XML文档中读取节点树来释放数据。这种做法有两个不足的地方:速度和可读性。下面我将教大家一种不是新的,但是,更可用的方法。

    首先,所谓分析XML就是从一个XML文档中释放数据,并创建一个内部的数据代表。我们通常的做法是加载一个XML文件,并创建一个数组对象来装载里面的数据以便为我们在FLASH中使用。

    我们解释XML文档并把数据装载到数组对象中的原因是多方面的。我们可以节省我们的内存空间,因为XML对象在FLASH是有一点巨大,而且当我们需要用到已加载的XML文件的数据时,我们可以提高数据的访问速度。另外,用playlist_array[1]来表示数组总比在XML文档中找数据来得方便一点。

    下面我们开始吧,我们先看一个在XML文件,这个文件是做一个FLASH的MP3播放器时得用到的。

    下面是我们的文件,名为playlist.xml:

<?xml version="1.0"?>
<playlist>
  <track>
      <artist><![CDATA[Some Band #1]]></artist>
      <name><![CDATA[Some band's song]]></name>
      <location><![CDATA[some_band_1.mp3]]></location>
  </track>
  <track>
      <artist><![CDATA[Some Band #2]]></artist>
      <name><![CDATA[Some band #2's song]]></name>
      <location><![CDATA[some_band_2.mp3]]></location>
  </track>
</playlist>
    在上面的XML文件中,我们声名了一个带有两个轨道(track)的播放列表(playlist),每个轨道(track)里有一个歌手名(artist name),歌名(song name),还有mp3文件的地址(location),这些我们都可以动态地载入。下面是我们经常用到的XML的解析方法:

playlist_arr = new Array();
playlist_xml = new XML();
playlist_xml.ignoreWhite = true;
playlist_xml.onLoad = function(success) {
  if (success) {
     var startTime = getTimer();
     var tracks_xml = playlist_xml.firstChild;
     for (var i = 0;i < tracks_xml.childNodes.length; i++) {
        var
        trackData = new Object();
        for (var j = 0; j<tracks_xml.childNodes[i].childNodes.length;j++) {
           trackData[tracks_xml.childNodes[i].childNodes
         [j].nodeName] = tracks_xml.childNodes[i].childNodes[j].firstChild.nodeValue;
        }
    playlist_arr.push(trackData);
   }
   trace("Total parse time: " + (getTimer()-startTime));
  } else {
  trace("Error loading playlist.");
 }
 // clean up after ourselves
 delete playlist_xml;
}
playlist_xml.load("playlist.xml");
    上面的代码解释了我们的XML文件并创建了一个对组对象。如果在这之前你从来没有处理过XML数据理解这段代码是有点困难的。当解释完成了以后,如果我们要访问第一个轨道的mp3文件的地址我们会用“playlist_arr[0].location”,这里就会得到他的正确的地址。而对我们来说,我们可以把这个做得更好……

    上面那段代码,在我的机子上,用了5毫秒去解除。这里并不怎么样,但不要忘了我们只是解释了两个轨道而已。

    下面是一个更好的释放相同数据的方法,而不用依靠循环地读取子节点:

playlist_arr = new Array();
playlist_xml = new XML();
playlist_xml.ignoreWhite = true;
playlist_xml.onLoad = function(success) {
  if (success) {
      var startTime = getTimer();
      var track_xml = playlist_xml.firstChild.firstChild;
      while (track_xml != null) {
         //add the track data to our playlist!
         playlist_arr.push(getTrackData(track_xml));
         track_xml = track_xml.nextSibling;
}
      trace("Total parse time: " + (getTimer()-startTime));
   } else {
         trace("Error loading playlist.");
   }
   delete playlist_xml;
}
function getTrackData(track_xml) {
  var trackData = new Object();
  var data_xml = new XML();
  data_xml = track_xml.firstChild;
  while (data_xml != null) {
    trackData[data_xml.nodeName] = data_xml.firstChild.nodeValue;
    data_xml = data_xml.nextSibling;
  }
  return trackData;
}
playlist_xml.load("playlist.xml");
    上面这个方法,我们可以得到相同的结果,但是却快了一点,可读性高了一点。在我的机子上只用了2毫秒来解释这两条轨道信息并装载到playlist数组。

    5毫秒和2毫秒可能差别不大……如果我使到这个播放列表有20条轨道时,第一种处理方法用了113毫秒,而第二种方法则只用了20毫秒。是不是有觉得有点不一样?

    在这个例子中我给代码加了注释。我们最主要就是理解XML对象的onload事件。注意到我在第二种方法通过建立一个getTrackData函数使代码更可读了吗?这里面获得一个节点对象作为参数并返回一个代表着轨道信息的对象。

    不用在节点中频繁地读取每一个元素,我在这里只用了两个XML在FLASH中的属性,firstChild和nextSlibling。即首节点和下一个节点或元素。在循环开始之前,我去掉了所有的东西,只把首点节点作为一个XML值(在例子中为track_xml)。然后,我们的循环是简单:当有节点的时后,我们释放信息。在循环的结尾,我们已得到了数据,并使XML值跳到下一个节点。当下一个节点的值回值为空时,表示没有信息去处理,我们退出循环。

    现在你已看到了一个截然不同的XML对象的解释方法。不用依靠读取子节点,我们利用nextSibling的优点来提高XML解释的速度和可读性。你们许多人也许已用过这种方法,但我想在这里写一下,因为这种方法并不是每个人都知道的。
分享到:
评论

相关推荐

    利用XML动态生成Flash

    Flash,另一方面,是Adobe开发的一种多媒体平台,用于创建动画、交互式内容以及富互联网应用程序。在过去的几年里,Flash以其强大的图形处理能力和互动性,在Web上广泛应用,尤其是在创建动态网页和在线游戏方面。 ...

    Flash+xml仿实现3D轮换图片效果,超赞

    3D轮播是一种视觉效果,它通过模拟立体空间中的图片旋转,让用户感觉图片在多个维度上移动,从而增强浏览的趣味性和沉浸感。这种效果通常通过编程技术和图形渲染来实现。 接下来,我们将详细探讨如何利用Flash和XML...

    flash+Xml+js相册 大集合

    JavaScript是另一种关键技术,它负责在客户端处理用户交互。结合Flash和XML,JavaScript可以监听用户操作,如点击按钮或滚动条,然后触发相应的Flash函数,更新显示的图片。此外,JavaScript还可以实现一些浏览器端...

    xml+flash翻书效果

    XML与Flash结合实现的翻书效果是一种常见的网页互动设计技术,尤其在电子杂志、在线图书展示等领域广泛应用。这种技术利用了XML(可扩展标记语言)的结构化数据存储能力和Flash的动态内容展示功能,为用户提供了一种...

    带缩略图flash xml焦点图.rar

    JavaScript焦点图是另一种常见的网页动态效果,它使用纯JavaScript或库如jQuery来实现图片轮播,无需依赖Flash,适用于对Flash不支持或性能要求更高的环境。 【子文件“js42”】这个文件名可能是某种脚本或代码文件...

    C#flash序列化案例

    2. **BinaryFormatter**: 另一种序列化工具是`System.Runtime.Serialization.Formatters.Binary.BinaryFormatter`。它将对象状态保存为二进制流,通常用于本地存储或高效网络传输。但与Flash交互时,由于二进制格式...

    FLEX和Actionscript开发FLASH游戏 flash游戏开发文档

    MXML是一种声明式语言,允许开发者以XML格式定义UI组件和布局。它简化了界面设计,使得非程序员也能参与设计过程。另一方面,ActionScript则用于处理程序逻辑和与用户的交互。通过结合使用这两种语言,开发者可以...

    Flash as3 相册

    4. 背景缩放相册和平铺式相册:可能是指两种不同的布局方式,一种是背景按比例缩放以适应图片,另一种是图片以平铺形式展示。 三、制作流程 1. 设计界面:在Flash Professional中创建新项目,设计相册的基本布局,...

    flash与服务器端通信

    Flash Remoting是Flash与服务器通信的另一种常见方式,它通过NetConnection对象和NetStream对象来实现。NetConnection负责建立和管理到服务器的连接,NetStream则用于实际的数据传输。Flash Remoting支持AMF,这是一...

    Flex与Flash相互调用

    - 如果Flash内容是在另一个域中,可能需要处理跨域安全策略文件。 通过以上步骤,我们可以在Flex和Flash之间实现双向通信,充分利用两者的优势,创造出更具交互性和动态性的应用程序。在实际开发中,可以根据具体...

    flash动态图片广告

    Flash是一种基于矢量图形的多媒体平台,它允许开发人员创建动画、游戏、应用程序和广告,这些内容可以在浏览器中通过Flash Player插件播放。它的优势在于能够提供丰富的视觉体验,包括复杂的动画、声音和视频集成。...

    学_Flash 中的 ActionScript 2.0

    ActionScript 2.0是Adobe Flash Professional中使用的一种编程语言,用于创建交互式动画、游戏以及富互联网应用程序(RIA)。这个教程"学_Flash 中的 ActionScript 2.0"显然是为了帮助初学者掌握这种强大的脚本语言...

    Flash工作流(2010更新版本)

    XML是一种通用的数据交换格式,通过它可以方便地存储和传输复杂的数据结构。在工作流管理中,导入XML数据允许用户将已有的流程定义快速导入系统,减少了手动输入的时间,同时也方便了流程的备份和恢复。这一功能对于...

    超级经典flash相册

    《超级经典Flash相册》是一种将JavaScript与Flash技术结合运用,以实现动态、交互式的相册展示方式。这种相册设计充分利用了Flash的动画效果和JavaScript的灵活性,为用户提供了一种既美观又实用的图片浏览体验。...

    简洁型FLASH新闻系统源码.rar

    另一方面,对于历史项目维护或复古风格的网页设计,Flash技术仍有其独特魅力。 总的来说,"简洁型FLASH新闻系统源码"是一份揭示了Flash AS3编程技术的实践案例,通过深入研究,我们可以了解到Flash在动态内容展示...

    Flash版在线聊天系统源代码

    Flash作为一种曾经广泛应用于网页交互设计的技术,因其强大的图形处理能力和实时交互性,在在线聊天系统开发中占据了一席之地。本篇文章将深入探讨Flash版在线聊天系统的源代码,解析其核心概念、实现原理以及相关...

    open flash chart2实例

    3. **柱状图**:柱状图是另一种常用的可视化工具,用于比较不同类别的数据。在Open Flash Chart 2中,你可以选择垂直或水平柱状图,并调整柱宽、颜色、透明度。还可以添加条形图的标签、值以及背景渐变,以增强图表...

    PureMVCCairngorm对Flex开源框架的优化组合

    PureMVC 是另一种流行于Flex社区的开源框架,它特别强调分层解耦的思想。PureMVC 框架将应用程序划分为三个主要部分:Model(数据模型)、View(视图)和Controller(控制器)。这种架构使得各个组件之间的耦合度...

    flash与asp留言板

    Flash是一种用于创建交互式动画、图形和应用程序的工具,它曾广泛应用于网页设计中,特别是对于创建动态和引人入胜的用户体验。在本案例中,“Flash”被用于创建留言板的用户界面,包括输入框、按钮和可能的动画效果...

    Flash广告播放器开发

    在本文中,我们将探讨如何开发一个Flash广告播放器,这是一种用于管理和展示网站上SWF格式的Flash广告的工具。Flash广告播放器允许网站管理员更加有序地控制广告的显示,并且可以根据需要轻松更换广告内容。我们将...

Global site tag (gtag.js) - Google Analytics