Inviata di tutti i codificatori Flex: Qual è il modo più veloce per leggere i file di dati XML di grandi dimensioni e visualizzarli in un DataGrid? I quattro metodi utilizzati e le loro prestazioni su una macchina ... Fonte: http://philflash.inway . com / dgperf / index.html
| Metodo 1 (classica) nodi, con XMLConnector Schema e Databinding | Metodo 2 attributi, con XMLConnector schematica e DataBinding | Metodo 3 attributi, il parsing XML e Dataprovider | Metodo 4 attributi, il parsing XML e oggetti | |
| 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 |
Le modalità di problema
In molti utenti lamentano prestazioni flessibili per leggere i file XML.Voici classificazione di 4 metodi:
Metodo 1
Per rappresentare i dati, si usa nodi. Un client è rappresentata come segue: <client><nom>Deschamps</nom><prenom>Amandine</prenom><ville>Caluire-Et-Cuire</ville><age>43</age><ca>2173.7</ca></client> Per Flash, usiamo un XMLConnector di leggere il file (utilizzando uno schema), un modello per il DataSet e un controllo DataGrid per la visualizzazione dei dati. Esso utilizza i dati di collegamento (DataBinding) di impegnare la 3 éléments.C 'è il metodo "classico" si trova in molti tutorial.
Perché questo metodo è lento?
Il file XML ha una dimensione di 315 kb. Quando si utilizza uno schema XMLConnector, Flash utilizza un XPath per accedere données.Le file è grande, la XPath è lento: Questa è la più lunga. Si tratta di 12,5 secondi.
Metodo 2
L'idea di questo metodo è quello di usare gli attributi (invece di nodi) e vedere l'impatto sul cliente performances.Un è rappresentata come segue: <client nom="Deschamps" prenom="Amandine" ville="Caluire-Et-Cuire" age="43" ca="2173.7"/> Per il flash, si usa lo stesso metodo, come nel Metodo 1: un XMLConnector di leggere il file (per l'importazione dello schema), come un DataSet modello e un controllo DataGrid per la visualizzazione dei dati. Esso utilizza i dati di collegamento (DataBinding) di impegnare la 3 elementi.
Perché questo metodo è più veloce che il metodo 1?
Il XPath è "veloce" per accedere a un attributo (per un nodo). Si noti inoltre che l'XML è più "piccolo" (164 kb, invece di 315 kb). Dura circa 12 secondi ...
Metodo 3
Per rappresentare i dati, abbiamo attributs.L idea di utilizzare questo metodo non è quello di utilizzare il layout di XMLConnector (che utilizza un XPath), ma il parser manualmente XML.Pour questo, abbiamo letto la "rapida" XML : si utilizza un ciclo while con nextSibling. Per codificare i numeri, si usa Numero (non parseInt e parseFloat che sono più lento). Non ci sono più databinding tra XMLConnector e Dataset. Si utilizza il Dataprovider di DataSet di impegnare il risultato di parsing XML.
Perché questo metodo è più veloce del Metodo 2?
Si esegue manualmente il parsing XML. Essa non utilizza più il XPath (e non usando la Schema di XMLConnector). Come contro, deve encoder attributi. Nella maggior parte dei dati XML, ci sono le stringhe e numeri. La codifica è molto veloce. La prova dura 3 secondi.
Metodo 4
Con il metodo 3, sappiamo molto rapidamente leggere il codice XML. L'idea di questo metodo è se possano migliorare il collegamento dei dati (secondo il metodo in Dataprovider 3). Se guardate la documentazione del DataSet, ci sono due metodi per associare dati a un DataSet: il metodo Dataprovider metodo e gli oggetti. Qual è la differenza tra oggetti e Dataprovider? documentazione di Flash MX 2004, Flash 8 LiveDocs o non dare troppi dettagli. Dobbiamo quindi esaminare le fonti di DataSet: In Flash 8: Macromedia \ Flash 8 \ it \ First Run \ Classes \ mx \ dati \ componenti \ DataSet. Asen, infatti, il metodo Dataprovider esegue le conversioni di tipo, se vi è uno schema ( nel metodo internalAddItem). Le voci metodo rende un collegamento diretto (senza conversione / check tipo). Come abbiamo già fatto la conversione, si utilizza il metodo di oggetti. (In Metodo 3, il tipo di conversione non è stato necessario). Il codice è il seguente:
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;} Ecco un metodo per passare da 12,5 secondi a meno di 0,5 secondi per leggere un file di 2 000 registrazioni!
Se venite per la prima volta il Flex-info.fr, puoi iscriverti al feed RSS. Grazie per la vostra visita!




















14 giugno 2008 a 13 h 04 min
Salve
Vedo che è un buon metodo, ma si sarebbe messo in atto in un flex progetto. Moi je n'y arrivare pas!