Bueno, Hari y a!e....�Hace mucho que no parseais cosas grandes con Flash no?
:)

Vamos, desde que el objeto XML esta como c�digo nativo (FP 6) le puedes dar
de comer un mega y ni pesta�ea. Yo creo que el problema no es Flash, ni
mucho menos, sino el tiempo que tarda en transmitirse por la red el XML.

Haciendo unas pruebas con un XML de 285Kb yo tengo los siguientes tiempos en
el Flash player 7r19. El codigo lo teneis al final de este mensaje.

Carga: 11.123 secs
Parse: 0.028 secs
Extraccion: 0.003 secs

Tarda 11 segundos en descargar (ADSL 1Mb), 28ms solo en parsear la
estructura y 3ms en ejecutar un XPath para extraer la informaci�n.

Probando con uno m�s grande, ya en local, (copy-paste de nodos 5 veces de
hamlet.xml) los tiempos siguen siendo minimos. Con un tama�o de 1.3Mb de
XML, una burrada, en el parseo tarda 250ms. Y en la extracci�n 20ms. Todo
este pedazo de XML en memoria son 4.5Mb, tampoco demasiado.

As� que en este caso la barrera no est� en el parseo, ni en la memoria, sino
en la transmisi�n por red del fichero. Asi que no os metais con el pobre
Flash, que hace el trabajo de p**a madre ;P

La soluci�n a un XML grande entonces pasa por reducir el tama�o del fichero.
Esto lo puedes hacer de 2 maneras:

1- Quitando el espacio en blanco, cambios de linea y tabulaciones...
2- Comprimiendolo.
(http://www.strille.net/tutorials/FlashXMLCompressor/index.php)

Aunque me temo que el segundo metodo subiria mucho los tiempos de proceso en
la descompresi�n.

Aqu� va el codigo de test:

<code>
import com.xfactorstudio.xml.xpath.XPath;

var diff:Number;
var registros = new Array();
var hamlet:XML = new XML();
hamlet.ignoreWhite = true;
hamlet.onData = function(raw){
        registros.push(getTimer());
        this.parseXML(raw);
        registros.push(getTimer());
        this.onLoad(true);
        registros.push(getTimer());
        mostrarTiempos();
}
        
hamlet.onLoad = function(){
        var nodos:Array = XPath.selectNodes(this,"/PLAY/PERSONAE/PERSONA");
        trace("Encontrados "+nodos.length+" personajes");
}
function mostrarTiempos(){
        trace("Tiempos en segundos");
        trace("Carga: "+(registros[0]-diff)/1000);
        trace("Parse: "+(registros[1]-registros[0])/1000);
        trace("Extraccion: "+(registros[2]-registros[1])/1000);
}

diff = getTimer();                                       
hamlet.load("http://www.ibiblio.org/xml/examples/shakespeare/hamlet.xml";);
</code>

Un saludo,

Joseba Alonso
www.5dms.com
www.sidedev.net 

----------------------------------
Lista ASNativos:[email protected]
http://www.5dms.com/listas
----------------------------------

Responder a