Por Raul Jimenez
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.

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

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

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

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

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

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
Comentarios recientes