实测:xml与json速度约差4倍

xml与json在javascript中解析并使用,速度大约相差4倍。(在IE中测试的结果)。

其中主要不在于eval,与xml parse的时间差别,主要在于属性访问上的差别:

xml中使用这样的方式 markers[i].getAttribute("info")

与json中使用这样的方式 var info = markers[i].info;

相比, xml要慢不少。

以下为测试的详情:

 

ExpandedBlockStart.gif 代码
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
>
< html  xmlns ="http://www.w3.org/1999/xhtml"  xmlns:v ="urn:schemas-microsoft-com:vml" >
  
< head >
    
< meta  http-equiv ="content-type"  content ="text/html; charset=utf-8" />
    
< title > Google Maps JavaScript API Example: Simple Map </ title >
    
< script  src ="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAzr2EBOXUKnm_jVnk0OJI7xSosDVG8KKPE1-m51RBrvYughuyMxQ-i1QfUnH94QxWIa6N4U6MouMmBA"
            type
="text/javascript" ></ script >
    
    
< script  type ="text/javascript" >

// 全局变量
var  map  =   null ;

function  initialize() {
    
if  ( ! GBrowserIsCompatible())  return ;

    map 
=   new  GMap2(document.getElementById( " map_canvas " ));
    map.addMapType( G_PHYSICAL_MAP );
    map.addMapType(G_SATELLITE_3D_MAP);

    map.setCenter(
new  GLatLng( 39.9 116.00 ),  6 );

    map.addControl( 
new  GMapTypeControl() );
    map.addControl( 
new  GLargeMapControl() );

    map.enableContinuousZoom();

    GEvent.addListener(map, 
" mousemove " function (p){
        
if ( ! p) return
        window.status 
=   " 经纬度  "   +  (Math.round(p.lng() * 100000 ) /   100000 ) +   " "  
            
+  (Math.round(p.lat() * 100000 ) /   100000 );
    });

    
var  t0  =   new  Date();
    
for ( var  i = 0 ; i < 100 ; i ++  ){
        
var  home_point  =   new  GLatLng( 37.056136 + i / 1e4,114.457626+i / 1e4 );  
        map.addOverlay(
new  GMarker(home_point)); 
    }
    
var  t1  =   new  Date();
    alert(t1
- t0);  // 1000用时6.3秒

    testSpeed();
}

function  testSpeed()
{

// -----------------------------------
     var  ary  = [];
    
for ( var  i = 0 ; i < 10000 ; i ++  ){
        ary.push(
' <marker msid="13615532361" lng="104.0447" lat="30.684" status="0" info="川A7G222. &lt;br&gt; 力帆体育场店&lt;br&gt; 2010-10-27 12:54:39 " /> ' );
    }
    
var  doc  =   " <current> "   +  ary.join( "" +   " </current> " ;
    
var  t0  =   new  Date();
    
        
var  xmlDoc  =  GXml.parse(doc);
        
if !  xmlDoc  ||   !  xmlDoc.documentElement)  return ;
        
var  markers  =  xmlDoc.documentElement.getElementsByTagName( " marker " );

        
for  ( var  i  =   0 ; i  <  markers.length; i ++ ) {
          
var  lat  =  parseFloat(markers[i].getAttribute( " lat " ));
          
var  lng  =  parseFloat(markers[i].getAttribute( " lng " ));
           
var  msid  =  markers[i].getAttribute( " msid " );
          
var  status  =  markers[i].getAttribute( " status " );
          
var  info  =  markers[i].getAttribute( " info " );
        }

    
var  t1  =   new  Date();
    alert(t1
- t0);  // 0.57秒

// -----------------------------------
     var  ary  = [];
    
for ( var  i = 0 ; i < 10000 ; i ++  ){
        ary.push(
' ["13615532361",104.0447,30.684,0,"川A7G222. &lt;br&gt; 力帆体育场店&lt;br&gt; 2010-10-27 12:54:39"] ' );
    }
    
var  doc  =   " [ "   +  ary.join( " , " +   " ] " ;
    
var  t0  =   new  Date();
    
        
var  markers  =  eval(doc);

        
for  ( var  i  =   0 ; i  <  markers.length; i ++ ) {
          
var  lat  =  parseFloat(markers[i][ 1 ]);
          
var  lng  =  parseFloat(markers[i][ 2 ]);
          
var  msid  =  markers[i][ 0 ];
          
var  status  =  markers[i][ 3 ];
          
var  info  =  markers[i][ 4 ];
        }

    
var  t1  =   new  Date();
    alert(t1
- t0);  // 0.15秒

// -----------------------------------
     var  ary  = [];
    
for ( var  i = 0 ; i < 10000 ; i ++  ){
        ary.push(
' {msid:"13615532361",lng:104.0447,lat:30.684,status:0,info:"川A7G222. &lt;br&gt; 力帆体育场店&lt;br&gt; 2010-10-27 12:54:39"} ' );
    }
    
var  doc  =   " [ "   +  ary.join( " , " +   " ] " ;
    
var  t0  =   new  Date();

        
var  markers  =  eval(doc);

        
for  ( var  i  =   0 ; i  <  markers.length; i ++ ) {
          
//  obtain the attribues of each marker
           var  lat  =  parseFloat(markers[i].lat);
          
var  lng  =  parseFloat(markers[i].lng);
          
var  msid  =  markers[i].msid;
          
var  status  =  markers[i].status;
          
var  info  =  markers[i].info;
        }

    
var  t1  =   new  Date();
    alert(t1
- t0);  // 0.15秒

}

    
</ script >
  
</ head >
  
< body  onload ="initialize()"  onunload ="GUnload()" >
    
    
< div  id ="map_canvas"  style ="width: 800px; height: 600px" ></ div >


  
</ body >
</ html >

 

 

转载于:https://www.cnblogs.com/dstang2000/archive/2010/11/02/1867406.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值