Categoría | Desarrollo Flex

Flex: Aumentar los resultados XML DataGrid +

27 de julio de 2007 por Julien Lestel

Pregunta de todos los codificadores Flex: ¿Cuál es la manera más rápida de leer grandes archivos de datos XML y verlos en un DataGrid? Los cuatro métodos utilizados y sus resultados en una máquina ... Fuente: http://philflash.inway . com / dgperf / index.html

Método 1 (clásica), nudos, y con XMLConnector Diagrama DataBinding Método 2 Atributos, XMLConnector con esquemática y DataBinding Método 3 atributos, analizar XML y dataProvider Método 4 Atributos, XML y analizar temas
Flash Player 7 12 388 ms 11 963 ms 2 930 ms 442 ms
Flash Player 8 9 365 ms 7 569 ms 1 858 ms 314 ms

El problema detallado

En muchos usuarios se quejan de rendimiento flexible para leer archivos XML.Voici clasificación de 4 métodos:

Método 1

Para representar los datos, usamos los nodos. Un cliente está representado de la siguiente manera: <client><nom>Deschamps</nom><prenom>Amandine</prenom><ville>Caluire-Et-Cuire</ville><age>43</age><ca>2173.7</ca></client> Para Flash, usamos un XMLConnector para leer el archivo (usando un diagrama), un modelo para el conjunto de datos y un DataGrid para mostrar los datos. Utiliza el enlace de datos (DataBinding) de obligar a los 3 éléments.C "método es el" clásico "a encontrar en muchos tutoriales.

¿Por qué este método es lento?

El archivo XML tiene un tamaño de 315 kb. Si se utiliza un esquema de XMLConnector, Flash usa XPath para acceder a un archivo données.Le es grande, el XPath es lento: es el más largo. Viene a 12,5 segundos.

Método 2

La idea de este método es usar los atributos (en vez de nodos) y ver el impacto en los clientes performances.Un está representada de la siguiente manera: <client nom="Deschamps" prenom="Amandine" ville="Caluire-Et-Cuire" age="43" ca="2173.7"/> Para Flash, usamos el mismo método que en el método 1: un XMLConnector para leer el archivo (por el esquema de importación), como un DataSet modelo y un DataGrid para mostrar los datos. Utiliza el enlace de datos (DataBinding) de obligar a los 3 elementos.

¿Por qué este método es más rápido que el método 1?

El XPath es "rápido" para acceder a un atributo (por un nodo). Tenga en cuenta también que el XML es más "pequeño" (164 kb en lugar de 315 kb). Dura unos 12 segundos ...

Método 3

Para representar los datos, usamos attributs.L idea de este método es no utilizar el diseño de XMLConnector (que usa un XPath), pero el analizador manualmente XML.Pour esto, lea el "rápido" XML : utiliza un bucle while con nextSibling. Para codificar los números, usamos Number (y no parseInt parseFloat que son más lentos). No hay más DataBinding entre XMLConnector y Dataset. Utiliza el dataProvider del DataSet para vincular el resultado del análisis sintáctico XML.

¿Por qué este método es más rápido que el método 2?

Se realiza manualmente analizar XML. Ya no usa el XPath (y no utilizando el esquema de XMLConnector). En cambio, debe codificador atributos. En la mayoría de los datos XML, hay cadenas y números. La codificación es muy rápido. La prueba dura 3 segundos.

Método 4

Con el método 3, sabemos leer muy rápidamente el XML. La idea de este método es si se puede mejorar el enlace de datos (utilizando el método dataProvider 3). Si se mira la documentación del DataSet, hay dos métodos para asociar los datos a un DataSet: el método dataProvider y método de los elementos. ¿Cuál es la diferencia entre los artículos y dataProvider? documentación de Flash MX 2004, Flash 8 LiveDocs o no dar demasiados detalles. Por lo tanto, debemos mirar las fuentes del DataSet: En Flash 8: Macromedia \ Flash 8 \ en \ First Run \ Classes \ mx \ Datos de programa \ componentes \ DataSet. Asen hecho, el método dataProvider realiza conversiones de tipo si existe un esquema ( en el método internalAddItem). El método de los elementos establece un vínculo directo (sin conversión / tipo de chequeo). Como ya se ha realizado la conversión, se utiliza el método de los elementos. (En el método 3, el tipo de conversión no era necesario). El código es el siguiente:

client_con.addEventListener("result", Delegate.create(this, doParseData));//function doParseData():Void {var dataXML:XML = client_con.results;var resultArray:Array = [];var mainNode = dataXML.firstChild;var aNode:XMLNode = mainNode.firstChild;while (aNode) {var obj = new Object();for (var attribute:String in aNode.attributes) {if (attribute == “age” || attribute == “ca”) {obj[attribute] = Number(aNode.attributes[attribute]);} else {obj[attribute] = aNode.attributes[attribute];}}resultArray.push(obj);aNode = aNode.nextSibling;}// — use items (and not dataProvider)client_ds.items = resultArray;}

Aquí es un método para pasar de 12,5 segundos a menos de 0,5 segundos para leer un archivo de grabaciones de 2 000!

Si viene por primera vez el Flex-info.fr, puede suscribirse a la fuente RSS. Gracias por su visita!

1 étoile2 étoiles3 étoiles4 étoiles5 étoiles (No Ratings Yet)
Loading ... Cargando ...

1 comentarios de esta entrada

  1. momowell dice:

    Hola
    Veo que es un buen método, pero que puesto en práctica en un proyecto flex. Moi je n'y llegar pas!

Escribir un comentario

Suscripciones

  • Añadir a Mi AOL
  • Añadir a Google
  • Añadir a Zune
  • Añadir a Netvibes
  • Añadir a Technorati
  • Añadir a Mi Yahoo
  • Añadir a Zune

Encuesta

¿Cómo se encuentra el nuevo Flex-info.fr?

Ver Resultados

Loading ... Cargando ...

Mugsho