SORU
9 EYLÜL 2008, Salı


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
17 Ocak 2011, PAZARTESİ


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ı olur

  • Genel 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 9 Array.join bu kadar yavaş değil, ve tüm SB soyutlamalar hemen hemen aynı şekilde gerçekleştirmek (yöntem yükü nedeniyle muhtemelen) yapar

  • Opera 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.

http://jsperf.com/string-concat-without-sringbuilder/7

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ricardo Cerqueira

    Ricardo Cerq

    28 Mayıs 2008
  • Shon Gonzales

    Shon Gonzale

    5 EKİM 2014
  • Wii Minute Radio

    Wii Minute R

    31 Mayıs 2008