Baru-baru ini, semasa mempelajari "Pengaturcaraan Lanjutan Javascript", terdapat penerangan tentang ciri-ciri rentetan Teks asal kira-kira seperti berikut: Rentetan dalam ECMAScript tidak boleh diubah, iaitu, apabila rentetan dicipta, nilainya tidak boleh diubah. Untuk menukar rentetan yang disimpan dalam pembolehubah, musnahkan rentetan asal dahulu dan kemudian isikan pembolehubah itu dengan rentetan lain yang mengandungi nilai baharu, contohnya:
Proses melaksanakan operasi ini adalah seperti berikut: mula-mula buat rentetan baharu yang boleh memuatkan 10 aksara, kemudian isi rentetan ini dengan "Java" dan "Skrip", dan langkah terakhir ialah memusnahkan rentetan asal "Java" dan "Skrip", kerana kedua-dua rentetan ini tidak lagi berguna. Walau bagaimanapun, dalam pelayar versi yang lebih rendah (seperti IE6), kelajuan penggabungan rentetan adalah proses yang sangat memakan prestasi.
Ini mengingatkan saya kepada Java Mekanisme rentetan dalam Java adalah serupa dengan js (iaitu, ia tidak boleh diubah setelah ia dibuat, dan nilai asal hanya boleh dimusnahkan jika anda ingin mengubahnya). mempunyai StringBuffer untuk menyelesaikan masalah ketidakupayaan rentetan Masalahnya ialah tiada kaedah yang serupa dalam js. Tetapi kita boleh mensimulasikan mekanisme penimbal ini. Prinsipnya ialah menggunakan tatasusunan untuk penyambungan Kod sumber adalah seperti berikut:
/*Ujian*/
var buffer = new StringBuffer();
buffer.append("Hello ").append("javascript");
hasil var = buffer.toString();
makluman(hasil);
https://gist.github.com/hehongwei44/fe71f10e4d2d9295aeab
Kami telah mensimulasikan mekanisme, tetapi sejauh manakah prestasi kaedah ini daripada penyambungan rentetan Kami boleh mengujinya Kod ujian adalah seperti berikut:
d3 = Tarikh baharu();
untuk(var i = 0; i < 10000; i ){
oBuffer.append("teks ");
}
var sResult = oBuffer.toString();
d4 = Tarikh baharu();
document.write("Kos ujian 2: " (d4.getTime() - d3.getTime())/1000 "saat");
1. Berdasarkan perbandingan 1000 kali, kedua-dua pelaksanaan adalah sangat pantas (pada asasnya beberapa milisaat) dan penggunaan masa adalah serupa.
2. Dengan 10,000 kali sebagai asas, keputusan pelaksanaan adalah serupa dengan di atas, tetapi yang pertama mempunyai lebih banyak caj panggilan di bawah IE6.
3. Mengambil 100,000 kali sebagai asas, penyambungan rentetan jelas memerlukan lebih banyak masa di bawah IE6 pelayar lain tidak jauh berbeza, dan ada yang lebih pendek daripada StringBuffer.
1. Apabila bilangan perkataan yang disambungkan kurang daripada 1,000 kali, dengan berani menggunakan kata yang pertama Secara amnya, kita jarang menghadapi situasi di mana bilangan perkataan yang disambungkan adalah beribu-ribu.
2. Pelayar lain tidak mempunyai masalah prestasi dengan penyambungan, terutamanya IE6 Jika bilangan penyambungan adalah puluhan ribu atau ratusan ribu, adalah disyorkan untuk menggunakan simulasi StringBuffer untuk IE6 sahaja.