Während der Skriptentwicklung wird häufig eine große Saite kombiniert und in eine große Zeichenfolge für die Ausgabe gemäß einer bestimmten Regel zusammengefasst. Zum Beispiel beim Schreiben von Skriptsteuerungen die Ausgabe von HTML -Tags, die das Erscheinungsbild der gesamten Steuerung steuern. Wenn Sie beispielsweise die HTML-Tags dynamisch analysieren, nachdem Sie den serverseitigen Rückwert in AJAX erhalten haben, werde ich hier nicht die spezifische Anwendung von Spleißzeichenfolgen diskutieren. Ich möchte nur die Effizienz des Spleißens hier besprechen.
Wenn wir Code schreiben, verwenden wir den Operator " +=", s += String; Dies ist die bekannteste Art zu schreiben. Ich frage mich, ob Sie es bemerkt haben. Wenn die kombinierte Stringkapazität zig K oder sogar Hunderte von k beträgt, ist das Skript sehr langsam auszuführen und die CPU -Nutzungsrate ist beispielsweise sehr hoch:
Die Codekopie lautet wie folgt:
var str = "01234567891123456789212345678931234567894123456789";
STR+= "51234567896123456789712345678981234567899123456789/n";
var result = "";
für (var i = 0; i <2000; i ++) Ergebnis+= str;
In nur einem Schritt beträgt die erzeugte Ergebniszeichenfolge 200K, die 1,1 Sekunden dauert (dies hängt mit der Computerkonfiguration zusammen) und der CPU -Peak 100%. (Ich habe mehr Schleifen gemacht, um den Effekt intuitiver zu sehen). Es kann sich vorstellen, dass nur ein Betriebsschritt mehr als eine Sekunde geführt und mit der Zeit, die für andere Codes aufgewendet wurde, die Ausführungszeit des gesamten Skriptblocks unerträglich ist. Gibt es also eine Optimierungslösung? Gibt es einen anderen Weg? Natürlich gibt es eine Antwort, sonst wäre ich Unsinn, diesen Artikel zu schreiben.
Ein schnellerer Weg ist die Verwendung eines Arrays. Bei der Streuung von Schleifen ist es nicht, sie in eine bestimmte Zeichenfolge zu spleißen, sondern die Zeichenfolge in ein Array zu legen und schließlich das Array zu verwenden. Codebeispiel:
Die Codekopie lautet wie folgt:
var str = "01234567891123456789212345678931234567894123456789";
STR+= "51234567896123456789712345678981234567899123456789/n";
var result = "", a = new Array ();
für (var i = 0; i <2000; i ++) a [i] = str;
result = a.join (""); a = null;
Sie können die Zeit testen und testen, die zum Kombinieren einer Schnur derselben Größe benötigt wird. Das Ergebnis, das ich hier getestet habe, ist: <15 Millisekunden. Bitte beachten Sie, dass das Gerät Millisekunden ist. Das heißt, die Kombination einer solchen 200K -Saite beträgt der zeitliche Verbrauch der beiden Modi etwa zwei Größenordnungen. Was bedeutet das? Dies bedeutet, dass der letztere seine Arbeit beendet und vom Mittagessen zurückgekehrt ist, während der erstere immer noch als Coolie arbeitet. Ich werde eine Testseite schreiben. Sie können den folgenden Code kopieren und als HTM -Datei speichern und auf der Webseite öffnen, um den Effizienzunterschied zwischen beiden zu testen. Wie auch immer, ich teste die erstere, der eine halbe Minute dauert, um die Fertigstellung zu ermöglichen, und letzteres, das 0,07 Sekunden (10.000 Schleifen) dauert.
Die Codekopie lautet wie folgt:
<body>
Anzahl der String -Spleißzeiten <Eingabe -ID = "Totle" value = "1000" size = "5" maxLength = "5">
<input type = "button" value = "String -Spleißmethode" onclick = "method1 ()">
<input type = "button" value = "Array -Zuweisung Join -Methode" Onclick = "method2 ()"> <br>
<div id = "method1"> </div>
<div id = "method2"> </div>
<textarea id = "show"> </textArea>
<Script Language = "JavaScript">
<!-
// Die Länge dieser Schnur ist 100 Bytes Autor: Mizz
var str = "01234567891123456789212345678931234567894123456789";
STR+= "51234567896123456789712345678981234567899123456789/n";
// Methode 1
Funktionsmethode1 ()
{
var result = "";
var totle = parseInt (document.getElementById ("Totle"). Wert);
var n = neues Datum (). GetTime ();
für (var i = 0; i <totle; i ++)
{
Ergebnis += str;
}
document.getElementById ("show"). value = result;
var
"Split Time" + (neues Datum (). GetTime ()-n) + "Millisekunden!";
document.getElementById ("method1"). innerhtml = s;
}
// Methode 2
Funktionsmethode2 ()
{
var result = "";
var totle = parseInt (document.getElementById ("Totle"). Wert);
var n = neues Datum (). GetTime ();
var a = new Array ();
für (var i = 0; i <totle; i ++)
{
a [i] = str;
}
result = a.join (""); a = null;
document.getElementById ("show"). value = result;
var
"Split Time" + (neues Datum (). GetTime ()-n) + "Millisekunden!";
document.getElementById ("method2"). innerHtml = s;
}
//->
</Script>
Schließlich werde ich noch ein paar Worte sagen. Wird alle String -Spleiß -Array -Anschlüsse in der Zukunft verwendet? Dies hängt von Ihren tatsächlichen Bedürfnissen ab. Es ist nicht erforderlich, die Array-Methode für gewöhnliche Kombinationen mehrerer oder K-Ebene zu verwenden, da ebenfalls Öffnungsarray-Variablen verbraucht werden. Wenn es mehr als ein paar K -String -Kombinationen gibt, bedeutet dies, dass das Array effizient ist.
Dh 6.0:
String Spleißmethode: Die Spleißstrahl ist 1010.000 Bytes lang und das Spleißen dauert 22.089 Millisekunden!
Array -Zuweisungs -Joinment -Methode: Die Spleißstrahl ist 1010.000 Bytes lang und dauert 218 Millisekunden zum Spleiß!
Firefox 1.0:
String Spleißmethode: Die Spleißstrahl ist 1010.000 Bytes lang und das Spleißen dauert 1044 Millisekunden!
Array -Zuweisungs -Joinment -Methode: Die Spleißstrahl ist 1010.000 Bytes lang und das Spleißen dauert 1044 Millisekunden!
Mozilla 1.7:
Schnurspleißmethode: Die Spleißstrahl ist 1010.000 Bytes lang und das Spleißen dauert 1045 Millisekunden!
Array -Zuweisungs -Joinment -Methode: Die Spleißstrahl ist 1010.000 Bytes lang und das Spleißen dauert 1044 Millisekunden!
Netscape 7.0:
String Spleißmethode: Die Spleißstrahl ist 1010.000 Bytes lang und das Spleißen dauert 10.273 Millisekunden!
Array -Zuweisungs -Joinment -Methode: Die Spleißstrahl ist 1010.000 Bytes lang und dauert 1138 Millisekunden zum Spleiß!
Opera 7.54:
String Spleißmethode: Die Spleißstrahl ist 1010.000 Bytes lang und das Spleißen dauert 6968 Millisekunden!
Array -Zuordnung Joinment -Methode: Die Spleißstrahl ist 1010.000 Bytes lang und das Spleißen dauert 6922 Millisekunden!
Die Testergebnisse von 10.000 Zyklen zeigen, dass die Effizienz in IE und Netscape erheblich verbessert werden kann, während in der Firefox -Mozilla -Oper fast die gleiche Zeit dauern. Diese Daten können ausreichen, um festzustellen, dass die Array -Join -Methode besser ist als das herkömmliche String -Spleißen.