Javascript

Het blijft lastig om voor elk platform de beste software te schrijven. Dat is lastig, niet omdat het niet duidelijk is welke het snelste is, maar omdat er veel meer zaken zijn om rekening mee te houden. 

Bij het schrijven van software voor schrijftolken, liep ik bij het maken van een auto-correct er tegenaan dat ik het laatste woord nodig had uit de tekst. Niet zo heel moeilijk zou je zeggen, maar dat blijkt toch lastiger dan gedacht. De software moet namelijk zo licht mogelijk, maar tegelijkertijd ook zo snel mogelijk zijn. Omdat het daarnaast ook nog eens op heel veel verschillende platformen moet kunnen werken, en daarbij ook nog zonder internet moet functioneren, bleek dat het allemaal toch wat ingewikkelder bleek te worden dan wat zo op het eerste gezicht duidelijk is. 

Performance - indexOf vs lastIndexOf

Omdat ik het laatste woord nodig heb, volg ik de volgende stappen:

  1. Pak de tekst
  2. Laatste lokatie van de spatie, met uitzondering van het laatste teken
  3. Splits de tekst af vanaf het punt van de spatie tot het eind
  4. Doe een trim tegen een eventuele spatie
  5. Check of dit woord in de auto correct lijst staat
  6. Plak het nieuwe woord erin, of geef de oude tekst terug. 

Omdat dit dus bij elke keer gebeurt dat er wat wordt ingevoerd, moet dit natuurlijk efficient gebeuren. 

JSPerf

JSperf indexof vs lastindexofBij het uitzoeken, kwam ik JSperf tegen. Een leuke site, waar je heel simpel en eenvoudig performance kunt testen tussen verschillende functies, zo ook indexOf en lastIndexOf. Het verschil is maar klein, tenzij dat er geen resultaat is want dan wordt indexOf ineens 15% langzamer. Een flink verschil, maar omdat het hier over een tekst gaat is dat een scenario dat alleen voorkomt als er nog geen tekst is, maar dan is er ook nog geen tekst voor autocorrect. Dus dat is mooi, hierbij kies ik dus voor indexOf. 

 

JSPerf split slice vs substringNatuurlijk is het dan nog niet klaar, want het enige dat dan duidelijk is, is waar dat het laatste woord begint. Met split, slice of met substring moet dan nog het laatste woord eruit gehaald worden. Natuurlijk is ook hier een JSPerf voor gemaakt al, waar je hier het resultaat van ziet. Hier zijn de verschillen aanzienlijk groter, want alleen split en dan het eerste resultaat te pakken is 86% langzamer! Een aanzienlijke vertraging dus. Slice is ook wat trager, namelijk 23% ten opzichte van de snellere, namelijk substr en indexOf. De keuze valt hier duidelijk op substr samen met indexOf.