forum Sea of Sin / Startseite sitemap

Sea of Sin / Blog

Zentrum der Langeweile

JavaScript Tipp-Kick #3

2008/06/19 von de_henne
Kurze Ansprache:
In JavaScript verbindet man des öffteren Strings miteinander. Sei es um einen String mit einer Variablen zusammen zu schieben oder es soll aus 2 Strings einer werden.
Nun, in JavaScript gibt es verschiedenen Wege dies zu tun, dabei spielt die Performance eine extreme Rolle. Nicht jeder Weg ist optimal, vorallem nicht in gewissen Browsern *zu IE rüber schiel*
JavaScript Tipp-Kick #3 - String Verknüpfung
Stay a while, and listen

Grundszenario:
Wir möchten mehrere Strings mit einander zu einem String verknüpfen

In allen Steps musste ich die Schleifen auf 10000 für den IE und Konqueror reduzieren. Bei allen anderen Browsern gingen 100.000 Durchläufe um bessere Ergebnisse zu bekommen.

Step 1 von 4

  1. var str = '';
  2. for(var i = 0; i < loops; i++)
  3. {
  4. str += '_test';
  5. };


FF 3
79 Millisekunden

FF2
453 Millisekunden

IE7
329 Millisekunden

Opera
63 Millisekunden

Konqueror
735 Millisekunden

Safari
78 Millisekunden


Step 2 von 4

  1. var str = '';
  2. for(var i = 0; i < loops; i++)
  3. {
  4. str = str+ '_test';
  5. };


FF 3
79 Millisekunden

FF2
438 Millisekunden

IE7
312 Millisekunden

Opera
313 Millisekunden

Konqueror
812 Millisekunden

Safari
93 Millisekunden


Step 3 von 4

concat ist eine JavaScript interne Funktion welche Zeichenketten mit einander verbindet

  1. var str = '';
  2. for(var i = 0; i < loops; i++)
  3. {
  4. str = str.concat('_test');
  5. };


FF 3
140 Millisekunden

FF2
516 Millisekunden

IE7
391 Millisekunden

Opera
203 Millisekunden

Konqueror
795 Millisekunden

Safari
141 Millisekunden


Step 4 von 4

Nun die etwas kompliziertere Methode.
Als erstes legen wir die Strings immer an das Ende des Arrays und wandeln dieses dann mit join() in einen String um.

  1. var buffer = new Array();
  2.  
  3. for(var i = 0; i < loops; i++)
  4. {
  5. buffer[buffer.length] = '_test';
  6. };
  7.  
  8. var str = buffer.join("");


FF 3
95 Millisekunden

FF2
500 Millisekunden

IE7
31 Millisekunden

Opera
109 Millisekunden

Konqueror
51 Millisekunden

Safari
78 Millisekunden


Das ganze hab ich im Anhang einmal tabelarisch dargestellt um dies ein wenig übersichtlicher zu machen.
Was sagt uns das nun, ich würde den Step 4 mit dem Array bevorzugen. Allein beim IE7 und Konqueror hat man über 100% Steigerung. Safari bleibt und die Einbusen bei beiden Firefox und Opera sind bei Step4 minimal.

js_test.png

Grün
sind die besten Zeiten, rot die schlechtesten. Bezogen auf den einzelnen Browser

Ein Online Beispiel gibt es natürlich auch hier wieder
Beispiel

Viel Spass beim Testen. Über Feedback und Test Zeiten würde ich mich freuen.

Gruss
hen

  • Keine Kommentare