Semasa proses pembangunan skrip, rentetan besar sering digabungkan dan disambung untuk output mengikut peraturan tertentu. Contohnya, semasa menulis kawalan skrip, keluaran teg HTML yang mengawal penampilan keseluruhan kawalan, atau apabila menganalisis dan mencipta teg HTML secara dinamik selepas memperoleh nilai pulangan bahagian pelayan dalam AJAX, tetapi saya tidak akan membincangkan aplikasi khusus bagi rentetan penyambungan di sini Saya hanya mahu Mari bincangkan kecekapan penyambungan di sini.
Apabila kami menulis kod, kami sentiasa menggunakan operator "=" apabila kami menulis kod, s = String ini adalah kaedah penulisan yang paling biasa saya tidak tahu jika anda perasan bahawa kapasiti rentetan gabungan itu Apabila terdapat berpuluh-puluh K atau bahkan ratusan K, pelaksanaan skrip sangat perlahan dan penggunaan CPU adalah sangat tinggi, contohnya:
Dengan operasi satu langkah ini, rentetan yang terhasil ialah 200K, ia mengambil masa 1.1 saat (ini berkaitan dengan konfigurasi komputer), dan nilai puncak CPU ialah 100%. (Untuk melihat kesannya dengan lebih intuitif, saya membuat beberapa gelung lagi). Boleh dibayangkan bahawa hanya satu langkah operasi menggunakan lebih daripada satu saat masa saya Ditambah dengan penggunaan masa kod lain, masa pelaksanaan keseluruhan blok skrip menjadi tidak dapat ditanggung. Adakah terdapat sebarang penyelesaian pengoptimuman? Adakah terdapat cara lain? Jawapannya sudah tentu ya, jika tidak, mengarutlah saya menulis artikel ini.
Cara yang lebih pantas ialah menggunakan tatasusunan Apabila menyambung dalam gelung, ia tidak digabungkan menjadi rentetan Sebaliknya, rentetan dimasukkan ke dalam tatasusunan, dan akhirnya array.join("") digunakan untuk mendapatkan rentetan, contoh kod:
Anda boleh menguji masa yang diperlukan untuk memasang rentetan dengan saiz yang sama. Hasil yang saya uji di sini ialah: <15 milisaat . Untuk rentetan 200K, penggunaan masa kedua-dua mod adalah hampir dua urutan magnitud. apa maksudnya? Ini bermakna yang kedua telah selesai bekerja dan pulang dari makan tengah hari, manakala yang pertama masih melakukan kerja keras. Saya menulis halaman ujian Anda boleh menyalin kod berikut dan menyimpannya sebagai fail HTM dan membukanya di halaman web untuk menguji perbezaan kecekapan antara kedua-duanya . Atau ia boleh dilakukan dalam 0.07 saat (gelung 10,000 kali).
Lassen Sie mich abschließend noch ein paar Worte sagen: Wird Array Join in Zukunft zum String-Spleißen verwendet? Dies hängt von Ihren tatsächlichen Anforderungen ab. Für gewöhnliche Kombinationen von wenigen oder K-Level-Bytes ist die Verwendung der Array-Methode nicht erforderlich, da das Öffnen von Array-Variablen ebenfalls teuer ist. Wenn mehr als ein paar K-String-Kombinationen vorhanden sind, ist die Effizienz des Arrays hoch.
IE 6.0:
String-Spleißmethode: Die gespleißte große Zeichenfolge ist 1.010.000 Bytes lang und das Spleißen dauert 22.089 Millisekunden!
Array-Zuweisungs-Join-Methode: Die gespleißte große Zeichenfolge ist 1.010.000 Bytes lang und das Spleißen dauert 218 Millisekunden!
Firefox 1.0:
String-Spleißmethode: Die gespleißte große Zeichenfolge ist 1.010.000 Bytes lang und das Spleißen dauert 1.044 Millisekunden!
Array-Zuweisungs-Join-Methode: Die gespleißte große Zeichenfolge ist 1.010.000 Bytes lang und das Spleißen dauert 1.044 Millisekunden!
Mozilla 1.7:
String-Spleißmethode: Die gespleißte große Zeichenfolge ist 1.010.000 Bytes lang und das Spleißen dauert 1.045 Millisekunden!
Array-Zuweisungs-Join-Methode: Die gespleißte große Zeichenfolge ist 1.010.000 Bytes lang und das Spleißen dauert 1.044 Millisekunden!
Netscape 7.0:
String-Spleißmethode: Die gespleißte große Zeichenfolge ist 1.010.000 Bytes lang und das Spleißen dauert 10.273 Millisekunden!
Array-Zuweisungs-Join-Methode: Die gespleißte große Zeichenfolge ist 1.010.000 Bytes lang und das Spleißen dauert 1.138 Millisekunden!
Oper 7.54:
String-Spleißmethode: Die gespleißte große Zeichenfolge ist 1010000 Bytes lang und das Spleißen dauert 6968 Millisekunden!
Array-Zuweisungs-Join-Methode: Die gespleißte große Zeichenfolge ist 1010000 Bytes lang und das Spleißen dauert 6922 Millisekunden!
Die Testergebnisse der 10.000-maligen Schleife zeigen, dass die Effizienz in IE und Netscape erheblich verbessert werden kann, während die beiden Methoden in Firefox Mozilla Opera im Wesentlichen die gleiche Zeit benötigen. Diese Daten reichen aus, um festzustellen, dass die Array-Join-Methode besser ist als herkömmliches Saitenspleißen.