Mobiele data uitwisseling, het optimaliseren waard!

Door E-sites, E-sites
30 december 2011 - 1028 x bekeken -

De markt voor mobiele applicaties groeit sterk. Voor de klanten van E-sites worden ook steeds vaker mobiele applicaties ontwikkeld. In het algemeen zorgen deze applicaties voor steeds meer dataverkeer over het mobiele netwerk. Alleen al in het internetgebruik is enorme stijging in dataverkeer zichtbaar, sinds vorig jaar is dit met ongeveer 140% gestegen. Uit metingen van Ericsson blijkt zelfs dat het mobiele dataverkeer in 2010 is verdrievoudigd.

Wanneer we een app ontwikkelen moet deze vaak dynamisch van data worden voorzien. Deze data komt dan van een online source, zoals de E-sites sitemanager. Deze data uitwisseling moet natuurlijk zo snel mogelijk gebeuren en zonder problemen. Binnen E-sites is dit al vaker opgezet, maar een stukje optimalisatie voor mobiel ontbrak er nog aan. Voor mobiel zijn er namelijk andere problemen waar rekening mee gehouden moet worden. De uitwisseling moet geoptimaliseerd worden om het dataverkeer te beperken en de snelheid en performance van de mobiele applicatie en het device zo hoog mogelijk te houden.
Om deze optimalisatie te realiseren heb ik onderzoek gedaan naar de verschillende methodes van data uitwisseling, de mogelijke bestandsformaten en het parsen van de data. De theorie is van toepassing op alle mobiele devices, maar als iOS developer heb ik me qua testen enkel geconcentreerd op de iDevices.

Webservices
Er zijn verschillende soorten webservices om data uit te wisselen. Ik heb er een aantal behandeld, waaronder SOAP, XML-RPC en REST.
SOAP en XML-RPC zijn ontworpen om functies aan te roepen en hebben ten opzichte van REST, welke gebaseerd is op het principe van resources, een ingewikkelde structuur. SOAP heeft daarnaast ook nog een WSDL document nodig, waarin de werking van de webservice staat omschreven. Dit maakt SOAP erg hoogdrempelig om in te zetten voor een eenvoudige webservice. XML-RPC heeft dit niet, maar is nog steeds 'bloated' in vergelijking met REST. Het coderen van een object gebruikt bijna vijf keer meer geheugen in XML-RPC (~ 525 bytes) dan in gewoon XML formaat (~ 117 bytes). Dit verschil is van groot belang bij het uitwisselen van data over een mobiel / draadloos netwerk, waarbij je een beperkte bandbreedte hebt.

XML-RPC:

<struct><member><name>ROOM_ID</name><value><int>1</int></value></member><member><name>CODE</name><value><string>W-101</string></value></member><member><name>NAME</name><value><string>Wiskunde lokaal</string></value></member><member><name>CAPACITY</name><value><int>30</int></value></member></struct>

XML:

<room><ROOM_ID>1</ROOM_ID><CODE>WL-101</CODE><NAME>Wiskunde lokaal</NAME><CAPACITY>30</CAPACITY></room>

REST is gebaseerd op het bekende HTTP protocol en maakt gebruik van diens features. Hierdoor is het erg eenvoudig en snel te leren en te implementeren. Er is voor REST geen WSDL specificatie nodig en het kan elk gewenst geldig internet media type teruggeven.

Bestandsformaten
XML is een veelgebruikt bestandsformaat bij data uitwisseling, zoals in een SOAP webservice, Maar ook JSON wordt vaak gebruikt, wat net als XML een taal onafhankelijk formaat is om gestructureerde gegevens als platte tekst weer te geven. Voor de iDevices heeft Apple een eigen formaat, namelijk Property Lists (PLISTS). Het nadeel hiervan is dat het enkel in iOS goed wordt ondersteund, waardoor het niet breed inzetbaar is.
Als we het object wat hiervoor is genoemd als JSON zouden noteren, is het nog kleiner, slechts ~ 78 bytes.

JSON:

{ ”room”: {”room_id”:1,”code”:”WL-101”,”name”:”Wiskunde lokaal”,”capacity”:30} }

Dit verschil is bij het uitwisselen van data over een mobiel draadloos netwerk zeer van belang. Elke besparing in bytes zorgt voor een snellere werking van mobiele applicaties waar bandbreedte en rekengeheugen beperkt zijn.

Parsers
Niet alleen in de webservice en het gebruikte bestandsformaat valt winst te behalen qua snelheid en performance. Ook het parsen van de data is van belang. Er zijn verschillende parsers beschikbaar voor XML, JSON en PLISTS.
Ray Wenderlich, een iPhone developer, heeft een aantal XML parsers getest op snelheid en geheugengebruik, waarvan je hieronder de testresultaten ziet.


Zoals je kunt zien is TBXML het snelst en minst geheugenintensief. Voor grote bestanden is deze dus erg interessant, alleen blijkt dat TBXML geen XPath support heeft. Wanneer je dit wilt, is TouchXML een goeie optie.
Ook voor JSON en PLISTS zijn er verschillende parsers welke door cocoanetics.com zijn getest en geanalyseerd. Een uitgebreid verslag vind je hier.

Conclusie is dat JSONKit de snelste parser is en JSON ook in deze test het kleinst van formaat is.


Ik heb zelf ook een aantal tests opgezet om de 'beste' parsers uit de voorgaande onderzoeken te vergelijken, aangezien er geen vergelijking is tussen de JSON en XML parsers. Hiervoor heb ik een iPhone app ontwikkeld, genaamd 'Benchmark'  (niet beschikbaar in de App Store).

 

 

 

 

 

 

 

 

 

 

 

In deze app heb ik de bestandsgrootte, download snelheid, parse snelheid (lezen en schrijven) en het maximale geheugengebruik gemeten van de volgende parsers: JSONKit, JSON Framework, TouchXML en TBXML. Er is gebruik gemaakt van een JSON en XML bestand met 200 producten van Conrad. Om overhead te minimaliseren is per meting de parse functie vijf keer gerund. Er zijn 10 metingen gedaan, waarvan het gemiddelde is genomen. De tests zijn uitgevoerd op een iPhone 4.
Het parsen van de bestanden blijkt niet afhankelijk van de bestandsgrootte, zo zie je in onderstaand figuur dat JSONKit, TouchXML en TBXML dicht bij elkaar in de buurt liggen. TBXML is het snelst qua lezen.


De reden dat TouchXML en TBXML geen ‘Parse (write)’ waarde hebben, is omdat er in deze libraries geen standaard mogelijkheid zit om XML bestanden te genereren.


In bovenstaand figuur zie je dat er tijdens het parsen aardig wat geheugen wordt gebruikt. Er is wel een duidelijke scheiding zichtbaar in het maximale geheugengebuik tussen XML en JSON. Het lezen en schrijven van JSON bestanden neemt beduidend minder geheugen in gebruik dan bij XML bestanden, bijna acht keer minder. Dit geheugengebruik kan performance issues veroorzaken in de mobiele applicatie. Dit kan resulteren in het tijdelijk trager worden van de applicatie wat erg storend is voor de eindgebruiker. Bij het gebruik van JSON ligt het risico dat dit gebeurt heel laag, omdat het maximale geheugengebruik vrij laag ligt. 

In het lezen van de bestanden is TBXML het snelst. JSONKit komt op de tweede plaats. Het parsen van XML neemt echter wel veel meer geheugen in beslag, waardoor het risico van performance issues vele malen hoger ligt. En dit wil je ten behoeve van de eindgebruiker zo veel mogelijk vermijden. JSON bestanden zijn daarnaast kleiner van formaat en daarmee sneller gedownload en dus interessanter voor data uitwisseling over een mobiel draadloos netwerk. JSON libraries hebben standaard ook de mogelijkheid om JSON data te genereren wat ook een voordeel kan zijn, aangezien er vaak ook data verstuurd moet worden en niet alleen opgehaald.

Het doel  is om onze apps zo snel mogelijk en zonder performance problemen te laten werken ten behoeve van de beste gebruikerservaring. Volgens dit onderzoek is, op het gebied van data uitwisseling, de combinatie van een REST webservice, het bestandsformaat JSON en de parser JSONKit het beste om hier aan te voldoen.

Front-end review 22tracks

Door E-sites

Wij diginatives volgen 22tracks al van voor hun pitch op The Next Web 2010, en zijn sindsdien enorm fan! Het is niet voor niks dat 22tracks de meest… - Lees meer

Lees verder