2006/02/22 | 体验AS3.0(十四)
类别(Flash) | 评论(0) | 阅读(227) | 发表于 07:02
好的,现在到了XML了。在labs site你可能看过有关E4X的东东——如何在AS中处理XML。Gordon Smith 曾说:"与现在FLASH对XML的支持作比较,E4X允许我们写更少的代码,更快地运行,因为大部分的处理可以以C++的速度完成。"太好了,让我们做一个速度测试吧。
package {

  import flash.display.Sprite;
  
  import flash.util.trace;
  import flash.util.getTimer;
  
  import flash.xml.XMLNode;
  import flash.xml.XMLDocument;


  public class Test extends Sprite {
    
    public function Test() {
      var employees:XML =
     <employees>
     <employee ssn="123-123-1234">
     <name first="John" last="Doe"/>
     <address>
     <street>11 Main St.</street>
     <city>San Francisco</city>
     <state>CA</state>
     <zip>98765</zip>
     </address>
     </employee>
     <employee ssn="789-789-7890">
     <name first="Mary" last="Roe"/>
     <address>
     <street>99 Broad St.</street>
     <city>Newton</city>
     <state>MA</state>
     <zip>01234</zip>
     </address>
     </employee>
     </employees>;
    
       var employees2:XMLDocument = new XMLDocument('<employees><employee
ssn="123-123-1234"><name first="John"
last="Doe"/><address><street>11 Main
St.</street><city>San
Francisco</city><state>CA</state><
zip>98765</zip></address></employee><employee
ssn="789-789-7890"><name first="Mary"
last="Roe"/><address><street>99 Broad St.</street><city>Newton</city><
state>MA</state><zip>01234</zip>
</address></employee></employees>');


     var t:int = getTimer();
     for( var i:int=0; i<10000;i++){
       var x:XMLList = employees.employee.(@ssn == "789-789-7890");
     }
     trace( getTimer() - t);
    
     var t:int = getTimer();
     for( var i:int=0; i<10000;i++){
       var n:XMLNode = employees2.firstChild.firstChild;
       
       var nFound:Array = new Array();
       while( n != null){
         if( n.attributes.ssn == "789-789-7890"){
           nFound.push( n);
         }
         n = n.nextSibling;
       }
       
     }
     trace( getTimer() - t);
    }
    
  }
  
}
我得到的结果为:
268
23
噢?如果不是我弄错的话,E4X中的XMLDocument看起来好象要比过去的XML object慢十倍左右。也许因为我用的是ALPHA版播放器的缘故吧,我倒想看看最后的正式版本结果会怎样。
不过,新的处理XML的方法确实比DOM好了许多,将XML数据加入代码中也变得容易了许多。但让我迷惑不解的是,为什么代码中的字符串仍被限制在同一行呢?如果能分行的话不是更好吗?
0

评论Comments

日志分类
首页[186]
Flash[84]
FMS[41]
AIR[2]
ASP[11]
作品区[12]
其他[36]