miércoles, 30 de enero de 2008

AS3, JSON vs XML

Tenía mis dudas con respecto a si JSON sería más ágil que XML en AS3 dado el brusco cambio que hicieron los de Adobe con la nueva implementación de ECMAScript para XML (E4X).
Pues decidí verificarlo y esto fue lo que sucedió...

1. Descargué el "as3corelib" de Adobe (http://code.google.com/p/as3corelib/). Es un proyecto de los laboratorios de Adobe que finalmente lo lanzaron al público y lo colocaron en los servidores de Google. Permite la codificación / decodificación de JSON y otras cositas cheveres como MD5, SHA1, etc.

2. Cree un archivo de Flash con 2 DataGrid, el primero lo llamé "dataj_dg" y el otro "datax_dg".

3. Le cree una clase al documento:


Básicamente lo que hace es cargar un JSON y un XML (con los mismos datos) y convertirlos en un DataProvider para pasárselos al los Datagrid. Al final traza el tiempo que demoró procesando cada archivo (la carga no cuenta).

4. Cree los archivos de datos (el JSON lo saqué del ejemplo del as3corelib y el XML de la conversión de este).

mashedpotato.json


mashedpotato.xml


5. Lo ejecuté y... taraaaaan!!


Tiempo JSON: 21
Tiempo XML: 4

6. No contento con los resultados, calculé el tiempo tanto del JSON como del XML después de creado y parseado los datos, y el el resultado fue:

Tiempo JSON: 4
Tiempo XML: 2

7. Valla!!! que diferencia. Tonces traté de hacer modificaciones como cargar primero el XML y después el JSON, pasar el JSON decodificado directamente o convertido a Objeto pero finalmente el resultado fue el mismo.

El test se hizo en un portatil Celeron 2.59 GHz con 512 de RAM.

Conclusión:
Es muy difícil competir con un objeto nativo como lo es el XML dentro de AS3.
El tiempo de parseo de JSON es relativamente alto. Su lectura después de eso es buena.
No es que JSON sea una mala opción solo que las mejoras que hicieron en AS3 son muy buenas :)

Quedo en espera de comentarios, dudas o correcciones.

1 comentario:

Iago dijo...

gracias, estaba buscando que opcion tomar para implementar un monitor de recursos en flash y veo que será mejor en XML.
Buen trabajo.
webdynamix