Selama pengembangan skrip, string besar sering digabungkan dan disambung menjadi string besar untuk output sesuai dengan aturan tertentu. Misalnya, saat menulis kontrol skrip, output tag HTML yang mengontrol penampilan seluruh kontrol. Misalnya, ketika menganalisis secara dinamis tag HTML setelah mendapatkan nilai kembali sisi server di AJAX, saya tidak akan membahas aplikasi spesifik string splicing di sini. Saya hanya ingin membahas efisiensi penyambungan di sini.
Ketika kami menulis kode, kami menggunakan " +=" operator, s += string; Ini adalah cara paling akrab untuk menulis. Saya ingin tahu apakah Anda telah memperhatikannya. Ketika kapasitas string gabungan adalah puluhan K atau bahkan ratusan K, skripnya sangat lambat untuk dieksekusi dan laju penggunaan CPU sangat tinggi, misalnya:
Salinan kode adalah sebagai berikut:
var str = "01234567891123456789212345678931234567894123456789";
str+= "51234567896123456789712345678981234567899123456789/n";
var result = "";
untuk (var i = 0; i <2000; i ++) hasil+= str;
Hanya dalam satu langkah, string hasil yang dihasilkan adalah 200k, yang membutuhkan 1,1 detik (ini terkait dengan konfigurasi komputer), dan puncak CPU adalah 100%. (Saya melakukan lebih banyak loop untuk melihat efeknya secara lebih intuitif). Dapat dibayangkan bahwa hanya satu langkah operasi membutuhkan waktu lebih dari satu detik, dan ditambah dengan waktu yang dihabiskan untuk kode lain, waktu eksekusi seluruh blok skrip akan tak tertahankan. Jadi apakah ada solusi optimasi? Apakah ada cara lain? Tentu saja ada jawaban, kalau tidak saya akan omong kosong untuk menulis artikel ini.
Cara yang lebih cepat adalah dengan menggunakan array. Saat hamburan loop, itu bukan untuk menyambungkannya menjadi string tertentu, tetapi untuk memasukkan string ke dalam array, dan akhirnya menggunakan array.noin ("") untuk mendapatkan string hasil. Contoh kode:
Salinan kode adalah sebagai berikut:
var str = "01234567891123456789212345678931234567894123456789";
str+= "51234567896123456789712345678981234567899123456789/n";
var result = "", a = array baru ();
untuk (var i = 0; i <2000; i ++) a [i] = str;
hasil = a.join (""); a = null;
Anda dapat menguji dan menguji waktu yang diperlukan untuk menggabungkan string dengan ukuran yang sama. Hasil yang saya uji di sini adalah: <15 milidetik. Harap dicatat bahwa unitnya adalah milidetik. Dengan kata lain, menggabungkan string 200k seperti itu, konsumsi waktu dari dua mode adalah sekitar dua urutan besarnya. maksudnya itu apa? Ini berarti bahwa yang terakhir telah menyelesaikan pekerjaannya dan kembali dari makan siang, sementara yang pertama masih bekerja sebagai kuli. Saya akan menulis halaman tes. Anda dapat menyalin kode berikut dan menyimpannya sebagai file HTM dan membukanya di halaman web untuk menguji perbedaan efisiensi antara keduanya. Ngomong -ngomong, saya menguji yang pertama yang membutuhkan waktu setengah menit untuk diselesaikan, dan yang terakhir yang membutuhkan 0,07 detik (10.000 loop).
Salinan kode adalah sebagai berikut:
<body>
Jumlah waktu penyambungan string <input id = "totle" value = "1000" size = "5" maxlength = "5">
<input type = "tombol" value = "Metode splicing string" onclick = "method1 ()">
<input type = "tombol" value = "array penugasan metode gabungan" onclick = "method2 ()"> <br>
<Div id = "Method1"> </div>
<Div id = "Method2"> </div>
<textarea id = "show"> </textarea>
<Bahasa skrip = "javascript">
<!-
// Panjang string ini disambung adalah 100 byte penulis: Meizz
var str = "01234567891123456789212345678931234567894123456789";
str+= "51234567896123456789712345678981234567899123456789/n";
// Metode 1
Metode fungsi1 ()
{
var result = "";
var totle = parseInt (document.geteLementById ("totle"). value);
var n = tanggal baru (). getTime ();
untuk (var i = 0; i <totle; i ++)
{
Hasil += str;
}
document.geteLementById ("show"). value = hasil;
Var S = "Metode Splicing String: String besar yang disambung panjang"+ Hasil.length+ "byte,"+
"Waktu split" + (tanggal baru (). Gettime ()-n) + "milidetik!";
document.geteLementById ("Method1"). innerHtml = s;
}
// Metode 2
Metode fungsi2 ()
{
var result = "";
var totle = parseInt (document.geteLementById ("totle"). value);
var n = tanggal baru (). getTime ();
var a = array baru ();
untuk (var i = 0; i <totle; i ++)
{
a [i] = str;
}
hasil = a.join (""); a = null;
document.geteLementById ("show"). value = hasil;
Var S = "Metode Bergabung Penugasan Array: String besar yang disambungkan panjang" + Hasil.length + "byte," +
"Waktu split" + (tanggal baru (). Gettime ()-n) + "milidetik!";
document.getElementById ("Method2"). innerHtml = s;
}
//->
</script>
Akhirnya, saya akan mengucapkan beberapa kata lagi. Akankah semua splicing string menggunakan array bergabung di masa depan? Ini tergantung pada kebutuhan Anda yang sebenarnya. Tidak perlu menggunakan metode array untuk kombinasi biasa dari beberapa byte tingkat K, karena variabel array pembukaan juga dikonsumsi. Jika ada lebih dari beberapa kombinasi string K, itu berarti array efisien.
Yaitu 6.0:
Metode splicing string: String besar yang disambung adalah 1010.000 byte, dan splicing membutuhkan 22.089 milidetik!
Metode Bergabung Penugasan Array: String besar yang disambung panjangnya 1010.000 byte, dan butuh 218 milidetik untuk menyambungkan!
Firefox 1.0:
Metode splicing string: String besar yang disambung adalah 1010.000 byte, dan splicing membutuhkan 1044 milidetik!
Metode Bergabung Penugasan Array: String besar yang disambung adalah 1010.000 byte, dan splicing memakan waktu 1044 milidetik!
Mozilla 1.7:
Metode splicing string: String besar yang disambung adalah 1010.000 byte, dan splicing membutuhkan 1045 milidetik!
Metode Bergabung Penugasan Array: String besar yang disambung adalah 1010.000 byte, dan splicing memakan waktu 1044 milidetik!
Netscape 7.0:
Metode splicing string: String besar yang disambungkan adalah 1010.000 byte, dan splicing membutuhkan 10.273 milidetik!
Metode Bergabung Penugasan Array: String besar yang disambungkan adalah 1010.000 byte, dan dibutuhkan 1138 milidetik untuk menyambungkan!
Opera 7.54:
Metode splicing string: String besar yang disambungkan adalah 1010.000 byte, dan splicing membutuhkan 6968 milidetik!
Metode Bergabung Penugasan Array: String besar yang disambung adalah 1010.000 byte, dan splicing membutuhkan 6922 milidetik!
Hasil tes 10.000 siklus menunjukkan bahwa efisiensi dapat sangat ditingkatkan di IE dan Netscape, sementara di Firefox Mozilla Opera, kedua metode tersebut membutuhkan waktu yang hampir bersamaan. Data ini bisa cukup untuk menentukan bahwa metode gabungan array lebih baik daripada splicing string tradisional.