Categorie | Flex Development

Flex: Voor het verhogen van de prestaties XML DataGrid +

27 juli 2007 door Julien Lestel

Gevraagd van alle Flex coders: Wat is de snelste manier om te lezen grote XML-bestanden en bekijk ze in een DataGrid? De vier methodes en hun prestaties op een machine ... Bron: http://philflash.inway . com / dgperf / index.html

Methode 1 (klassiek) knopen, met XMLConnector Diagram en Databinding Methode 2 attributen, met XMLConnector Schematische en DataBinding Methode 3 attributen, parse XML en Dataprovider Methode 4 Attributen, parse XML en objecten
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

De gedetailleerde probleem

In veel gebruikers klagen over de prestaties flex te lezen bestanden XML.Voici indeling van 4 manieren:

Methode 1

Om de gegevens gebruiken we knooppunten. Een client is als volgt vertegenwoordigd: <client><nom>Deschamps</nom><prenom>Amandine</prenom><ville>Caluire-Et-Cuire</ville><age>43</age><ca>2173.7</ca></client> Voor Flash, gebruiken we een XMLConnector te lezen van het bestand (met behulp van een diagram), een model voor de DataSet en een DataGrid weer te geven gegevens. Het maakt gebruik van gegevens link (DataBinding) te binden aan de 3 éléments.C 'methode is de "klassieke" vind je in veel tutorials.

Waarom deze methode is traag?

Het XML-bestand heeft een grootte van 315 KB. Bij gebruik van een schema XMLConnector, Flash gebruikt om toegang te krijgen tot een XPath données.Le bestand is groot, de XPath is traag: Dit is de langste. Het gaat om 12,5 seconden.

Methode 2

Het idee van deze methode is het gebruik van attributen (in plaats van knooppunten) en zie het effect op de klant performances.Un is als volgt vertegenwoordigd: <client nom="Deschamps" prenom="Amandine" ville="Caluire-Et-Cuire" age="43" ca="2173.7"/> Voor Flash, gebruiken we dezelfde methode als bij Methode 1: een XMLConnector te lezen het bestand (bij het importeren van de schema's), zoals een DataSet model en een DataGrid om gegevens. Het maakt gebruik van gegevens link (DataBinding) te binden aan de 3 elementen.

Waarom deze methode is sneller dan methode 1?

De XPath is "snel" om toegang te krijgen tot een attribuut (voor een knoop). Merk ook op dat de XML is meer "kleine" (164 kb in plaats van 315 kb). Duurt ongeveer 12 seconden ...

Methode 3

Om de gegevens gebruiken we attributs.L idee van deze methode is geen gebruik te maken van de lay-out van XMLConnector (die gebruik maakt van een XPath), maar de parser handmatig XML.Pour dit lezen we de "snelle" XML : hij maakt gebruik van een while-lus met nextSibling. Voor het coderen van de nummers, die we gebruiken Aantal (niet parseInt en parseFloat die langzamer). Er zijn niet meer databinding tussen XMLConnector en Dataset. Het maakt gebruik van de Dataprovider van de DataSet te binden aan het resultaat van het inlezen van XML.

Waarom deze methode is sneller dan Methode 2?

Het voert handmatig parseren van XML. Het niet langer gebruik maakt van de XPath (en niet met behulp van het schema van XMLConnector). Zoals tegen, moet encoder attributen. In de meeste XML-gegevens, zijn er nummers en strings. De codering is erg snel. De test duurt 3 seconden.

Methode 4

Met methode 3, weten we heel snel lezen van de XML. Het idee van deze methode is de vraag of zij kan de koppeling van gegevens (met behulp van de methode in Dataprovider 3). Als je kijkt naar de documentatie van de DataSet, zijn er twee methoden om gegevens naar een DataSet: de methode Dataprovider en wijze posten. Wat is het verschil tussen items en Dataprovider? documentatie Flash MX 2004, Flash 8 LiveDocs of niet te veel details. We moeten dus kijken naar de bronnen van de DataSet: In Flash 8: Macromedia \ Flash 8 \ nl \ First Run \ Classes \ mx \ Data \ componenten \ DataSet. Asen feite is de methode Dataprovider voert type conversies indien er sprake is van een schema ( in de methode internalAddItem). De items methode maakt een directe verbinding (zonder conversie / check-type). Zoals we al gedaan hebben van de omschakeling, gebruikt de methode items. (Bij methode 3, de soort conversie niet nodig was). De code is als volgt:

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;}

Hier is een methode voor het verplaatsen van 12,5 seconden tot minder dan 0,5 seconden te lezen van een bestand 2 000 opnamen!

Als u nu komt voor het eerst op Flex-info.fr kunt u zich abonneren op de RSS feed. Dank u voor uw bezoek!

1 étoile2 étoiles3 étoiles4 étoiles5 étoiles (Geen Classificaties nog)
Loading ... Laden ...

1 reacties op dit bericht

  1. momowell Says:

    Hoi
    Ik zie dat het een goede methode, maar zou u in plaats in een flex-project. Moi je n'y pas komen!

Schrijf een reactie

Abonnementen

  • Add to My AOL
  • Add to Google
  • Toevoegen aan Zune
  • Add to Netvibes
  • Add to Technorati
  • Add to My Yahoo
  • Toevoegen aan Zune

Onderzoek

Hoe vind je de nieuwe Flex-info.fr?

Bekijk Resultaten

Loading ... Laden ...

Mugsho