JavaScript dizeleri değişmez. Bir &; string builder " " JavaScript ihtiyacım var mı?
Javascript kullanmak ya da değişken dizeleri mu? Bir ihtiyacınız var mı "dizesi builder"?
CEVAP
Değişmez. Olamaz var myString = "abbdef"; myString[3] = 'c'
gibi bir şey ile bir dize içinde bir karakter değiştirmek. trim
, slice
gibi dize işleme yöntemleri yeni bir dize döndürür.
Ancak, her zaman Kül( Dizi kullanarak.onun cevabı söz ne duydum dizeleri bitiştirmek ve bir StringBuilder içine en hızlı şekilde çıkarmanın farklı yöntemlerini test etmek istedim o kadar hızlı birleştirme için birleştirme). Bazı testler ise bunun doğru olup olmadığını öğrenmek için yazdım (değil mi?).
Bu yöntem bir çağrı ekleyerek daha yavaş yapabilir diye düşündüm ama en hızlı yol olur, ben de öyle zannediyordum
function StringBuilder() {
this._array = [];
this._index = 0;
}
StringBuilder.prototype.append = function (str) {
this._array[this._index] = str;
this._index ;
}
StringBuilder.prototype.toString = function () {
return this._array.join('');
}
Burada performans testleri. Üçü de boş bir dizeye kocaman bir dize "Hello diggity dog"
yüz bin kere bitiştirmek oluşan oluşturun.
Testler üç tür yarattık
Array.push
Array.join
kullanarak- Dizi indeksleme
Array.push
, sonra kullanmaktan kaçının kullanarak 10** - Düz dize birleştirme
Sonra StringBuilderConcat
, StringBuilderArrayPush
* http://jsperf.com/string-concat-without-sringbuilder/5 *13 bunları Lütfen oraya git ve güzel bir örnek alabilelim diye testler özetleme ile aynı üç test yaptım. Düzelttim unutmayın küçük bir hata, test verileri yok. bu performans yeterli veri yok tablo güncellenir. Eski veri tablosu için http://jsperf.com/string-concat-without-sringbuilder/5 git.
Burada ise bu bağlantıyı izlemek istiyor musun diye 21, 2013, Şubat, bazı numaraları. Her test sayısı/saniye operasyonları geliyordaha yüksek daha iyi)
| Browser | Index | Push | Concat | SBIndex | SBPush | SBConcat |
---------------------------------------------------------------------------
| Chrome 24.0.1312 | 83 | 87 | 702 | 69 | 87 | 165 |
| Chrome 25.0.1364 | 43 | 47 | 620 | 42 | 42 | 68 |
| Firefox 10.0.10 | 164 | 164 | 533 | 164 | 16 | 421 |
| Firefox 19.0 | 70 | 70 | 259 | 70 | 70 | 186 |
| Exploder 7.0 | 51 | 33 | 58 | 31 | 37 | 45 |
| Exploder 8.0 | 48 | 30 | 58 | 30 | 36 | 36 |
| Exploder 9.0 | 87 | 64 | 95 | 61 | 61 | 61 |
| Opera 12.14 | 125 | 154 | 66 | 106 | 137 | 63 |
Bulgular
Günümüzde tüm tarayıcılar iyi dize birleştirme kolu.
Array.join
sadece Opera yardımcı olurGenel olarak, Chrome, en hızlı, 27.0 sn/1025 ops overclock. 10 kat daha hızlı Dizi kullanarak daha.() katılın
Firefox çapında 550 ops/sn (ama 20.0 geriledi görünüyor) ikinci sırada yer alıyor.
Array.join
4-5 kat daha yavaştır.YANİ düz dize birleştirme ile hızlı,
Array.join
Array.push
kullanarak çok yavaş olması. IE 9Array.join
bu kadar yavaş değil, ve tüm SB soyutlamalar hemen hemen aynı şekilde gerçekleştirmek (yöntem yükü nedeniyle muhtemelen) yaparOpera
Array.join
aslında, 2-3 değil kat hızlı dize birleştirme olarak yardım eden tek kişi.Her tarayıcının performans sorunları soyut bir StringBuilder oluşturma yarardan çok zarar verir. Yöntem çağrıları yükü kabul edilebilir ama bu eğilim tarayıcılar dize birleştirme daha akıllıca ilgileniyor gibi görünüyor. Sadece hedef kitlenize Opera ise mantıklı olur, Dizi kullanabilirsiniz.orada katılmak ve Dize birleştirme her yerde (bu tüm tarayıcılar etkileniyor anlamına gelir) kullanın
Umarım birisi bu yararlı bulur
Farklı Test Çalışması
@RoyTinker benim test hatalı olduğunu düşündüm, aynı dize birleştirerek büyük bir dize oluşturmak değil bu yeni bir durum yarattı beri, her yineleme için farklı bir karakter kullanır. Dize birleştirme hala daha hızlı ya da daha hızlı görünüyordu. Hadi o testler.
Herkes başka yolları da bu, giriş Roy için teşekkürler test için düşünmeye devam öneririm.
JavaScript, basit bir beşgen kullanmak...
JavaScript string Trim?...
Oluşturma JavaScript dizeleri çok satı...
JavaScript string özellik değeri nesne...
Dizeleri değişmez .NET, o zaman neden ...