«

»

ene
25

JSON vs XML en Flash Lite: Fight!

A raíz del post que colgó Nick Gerig sobre los problemas de memoria que surgen a la hora de trabajar con el XML me he decidido a hablar sobre JSON (JavaScript Object Notation), un formato de intercambio de datos no muy conocido en la comunidad Flash, aunque sí en AJAX.

Los problemas de XML parten en base de la programación interna del Player que ya de por sí nos dificulta bastante la tarea a la hora de eliminar de la memoria el archivo, e igualmente, parece ser que el Garbage Collector tampoco está por la tarea de quitarnos esas KBs de encima.

Sin embargo, nosotros podemos cargar un XML como String y esto nos ahorrará los problemas de memoria, ya que se tratará al objeto como una cadena de texto y no como un objeto XML. Obviamente, el problema de esto es que nosotros tendremos que parsearlo haciendo búsquedas y cortes de carácteres que pueden ser tediosos y complejos.

Por otro lado, podemos usar JSON, que de por sí es un estándar y una estructura bastante clara. Además, en la web de JSON, ofrecen un parseador de JSON de código abierto para AS1, AS2 y AS3, así que ya tenemos la parte más difícil hecha.

Con esto podemos comparar las diferencias de memoria, yo he hecho una serie de pruebas utilizando la misma estructura convertida de XML a JSON.

El primer archivo de test JSON al convertirlo en objeto consumía 140KBs de memoria.
Prueba de memoria con JSON

El primer archivo de test XML al convertirlo en objeto consumía 202KBs de memoria.
Prueba de memoria con XML

El segundo archivo de test JSON al convertirlo en objeto consumía 141KBs de memoria.
Prueba de memoria con JSON

El segundo archivo de test XML al convertirlo en objeto consumía 172KBs de memoria.
Prueba de memoria con XML

El tercer archivo de test JSON al convertirlo en objeto consumía 244KBs de memoria.
Prueba de memoria con JSON

El tercer archivo de test XML al convertirlo en objeto consumía 419KBs de memoria.
Prueba de memoria con XML

Con esta comparativa nos podemos dar cuenta de que cuanto más grande es el archivo, más diferencia de peso hay. También podemos notar que los atributos no favorecen al peso ya que estos se guardan como my_xml.firstChild.attributes.nombre, creando dos objetos (attribute y nombre) para un campo.

Además, JSON siempre ocupa menos, con diferentes tipos de archivos y todo eso en formato String, que es mucho más fácil de eliminar de la memoria que un XML.

Por otro lado, cabe destacar que JSON requiere de un parseo en cliente, aunque es bastante rápido y sólo en el último archivo ha tardado un tiempo considerable de 100ms, lo cual tampoco es tanto para un archivo de ese tamaño.

Resumiendo, JSON es un tipo de datos muy válido para trabajar en Flash Lite y reducir considerablemente la memoria, y de paso nos ahorramos esos problemas tan molestos del XML que comentó acertadamente Nick.

Podéis descargar mis pruebas de JSON vs XML y hacer vuestros testeos, sería genial saber vuestros resultados ;)

Un saludo!!

PD: Sin duda que el parseador de JSON tiene todos los números para entrar dentro de la próxima release de Feather Framework :D

5 comentarios

  1. Marcos escribió:

    Pues tengo que probarlo en terminales de capacidad “reducida”, porque es curioso que con el parseo que hay que meterle al string, la cpu no se quede tonta.

    Sin duda, confirmando que hasta los terminales más “pobres” asumen bien el parseo de un JSON, creo que el XML se puede ir al garete, a menos que nos lo impongan, como fue mi particular infierno con los webservices… XD

    No obstante, si no es una estructura de datos muy compleja la que hay que volcar, sigue siendo mejor parejas variable / valor. Lo que siempre estoy mosca es con SWX, porque hay peña que dice que funciona otra que no… y la verdad con FL3 no chuta, al menos a nosotros! Y aral no ha indicado nada al respecto en el blog.

  2. Marcos Gonzalez Sancho escribió:

    Retomo este tema, estoy en proceso de creación de una entrada en el CookBook de Adobe al respecto, y evidentemente te incluiré en los créditos del mismo, además de linkar al correspondiente recurso en el blog.

    ¿Te parece manel?

  3. Raul Jimenez escribió:

    Me parece muy bien Manel!

    No sabía que estabas metido haciendo estas cosas, qué callado te lo tenías!

  4. Marcos Gonzalez Sancho escribió:

    Ya ves a veces me pongo a navegar, estuve revisando los cookbooks de adobe y vi que no había nada de esto, me acordé de tu super post y me dije, no estaría mal decir al mundo que JSON es amigo de Flash Lite :)

  5. Marcos Gonzalez Sancho escribió:

    Confirmado (tarde pero aquí está) en teléfonos de rendimiento bajo, y no tan bajo, JSON no es soportando por la CPU y saca un error de ActionScript stuck, al menos esa implementación de extracción para AS2. Un ejemplo te terminal en el que peta cuando el JSON tiene un tamaño y complejidad considerable: Nokia E65, que tampoco es que sea una patata, ese mismo JSON en terminales como Nokia N95 o N96 no peta, pero congela flash a la hora de parsear notablemente…

    Por tanto, salvo en condiciones específicas donde se pueda, parejas variable valor es el mejor formato de envío de información a flash lite.

Deja un comentario

Tu email nunca se publicará.


*

Puedes utilizar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">