SORU
7 Aralık 2011, ÇARŞAMBA


Nesnelerin performans JavaScript içinde Dizileri/nedir? (Google V8 için özellikle)

Performans JavaScript Diziler ve Nesneler ile ilişkili (özellikle Google) V8 belge çok ilginç olurdu. Bu konu hakkında kapsamlı bir makale, internette her yerde bulabilirsiniz.

Bazı Nesneler temel veri yapısı olarak sınıflarını kullanan anlıyorum. Eğer özellikleri bir sürü varsa, bazen karma tablo olarak kabul edilir?

Ben de Diziler bazen C Diziler (rasgele dizin, yavaş silme ve yeniden boyutlandırma hızlı yani) gibi tedavi olduğunu anlayın. Ve diğer zamanlarda, Nesneleri (hızlı dizin oluşturma, hızlı ekleme/kaldırma, daha fazla bellek daha fazla gibi muamele görüyorlar. Ve bazen bağlı listeler olarak saklanır (başında/sonunda rasgele dizin, hızlı kaldırma/ekleme yavaş yani) belki

Dizi/tam performans JavaScript alımları ve manipülasyonlar Nesne nedir?(Google V8 için özellikle)

Daha spesifik olarak, performans etkisi ne:

  • Bir Nesne için bir özellik ekledi
  • Bir nesneden bir özellik kaldırılıyor
  • Dizin oluşturma bir Nesne, bir özellik
  • Bir Diziye bir öğe eklemek
  • Bir diziden bir öğeyi kaldırmak
  • Dizin oluşturma Dizideki bir öğe
  • Arama Dizisi.() pop
  • Arama Dizisi.() itin
  • Arama Dizisi.() vardiya
  • Arama Dizisi.() Al'ı
  • Arama Dizisi.() dilim

Daha fazla bilgi için herhangi bir yazı ya da link olarak mutluluk duyacağız. :)

DÜZENLEME:Gerçekten JavaScript diziler ve nesneler kaputun altında nasıl çalıştığını merak ediyorum. Ayrıca, nebağlamV8 motoru ""-anahtarı "için başka bir veri yapısı?" biliyor mu

Örneğin, bir dizi oluşturmak varsayalım

var arr = [];
arr[10000000] = 20;
arr.push(21);

Gerçekten burada neler oluyor?

Ya... buna ne dersin...???

var arr = [];
//Add lots of items
for(var i = 0; i < 1000000; i  )
    arr[i] = Math.random();
//Now I use it like a queue...
for(var i = 0; i < arr.length; i  )
{
    var item = arr[i].shift();
    //Do something with item...
}

Klasik diziler için, performansı çok kötü olurdu; eğer bir LinkedList kullanıldıysa ise,... o kadar da kötü değil.

CEVAP
21 Aralık 2011, ÇARŞAMBA


GÜNCELLEME: Note that JSPref is currently down

(test çalışmasının bir kopyasını kurtardım ve JSPref bir halefi bulundu / tamir edildikten cevap güncellenir)


... Belki de cevap için bir overkill Hmm... ama a test suite, precisely to explore these issues (and more) oluşturdum.

Ve bu anlamda, 50 test bu durumda test cihazı (uzun zaman alır) performans sorunları görebilirsiniz.

Adı Öner de, DOM yapısı yerli bağlantılı liste kullanarak doğa kullanımını araştırıyor.

(Currently down, rebuilt in progress) More details on my blog regarding this.

Özet olarak takip edilir

  • V8 Dizi Hızlı, ÇOK HIZLI
  • Dizi itme / herhangi bir nesne eşdeğer daha hızlı git. ~yaklaşık 20x pop.
  • Array.shift() hızlı ~yaklaşık 6x dizi pop yavaştır şaşırtıcı, ama ~100 katına nesne öznitelik silme işlemini daha hızlı yaklaşık.
  • Eğlenceli, Array.push( data ); neredeyse 20 kat daha hızlı Array[nextIndex] = data Daha.
  • Array.unshift(data) beklendiği gibi yavaş ve ~yaklaşık 5x yeni bir özellik ekleyerek daha yavaştır.
  • array[index] = null silmeden daha hızlı değer Nulling ~tarafından bir dizi delete array[index] () tanımsız yaklaşık 4 kat daha hızlı.
  • Şaşırtıcı bir nesne, bir değer Nulling obj[attr] = null ~yaklaşık 2x sadece özniteliği delete obj[attr] silme daha yavaş
  • Şaşırtıcı olmayan bir şekilde, dizi Array.splice(index,0,data) yavaş, çok yavaş, orta.
  • Şaşırtıcı olan, Array.splice(index,1,data) en iyi (uzunluk değiştirme) ve 100 kez daha hızlı sadece ek Array.splice(index,0,data) daha
  • şaşırtıcı olmayan bir şekilde, divLinkedList tüm sektörlerin üzerinde bir dizi dll.splice(index,1) kaldırma testi sistem bozulduğu () hariç gerisinde.
  • EN BÜYÜK SÜRPRİZhepsi jjrv belirttiği gibi [], V8 dizi yazar V8 O =okur biraz daha hızlı

Not:Bu Ölçümler v8 değil sadece büyük dizisi/nesneler için de geçerlidir "out". tamamen optimize Dizi/performans davaları boyutu az sonra rasgele bir boyut (24?) nesne optimize edilmiş çok izole olabilir. Daha fazla ayrıntı yaygın birçok google IO videolar arasında görülebilir.

NOT 2:Bu harika performans sonuçları tarayıcılarda, özellikle paylaşılmaz *cough* IE. Ayrıca test çok büyük, bu yüzden ben henüz tam olarak analiz etmek ve sonuçları değerlendirmek: = düzenlemek lütfen

Güncelleme Notu (Aralık 2012):Google temsilcileri youtubes kendisi (sabit bir dizi için linkedlist bir dizi anahtarlar, vb gibi) krom ve onları nasıl en iyi iç işleyişini anlatan videoları var. Daha fazlası için GDC 2012: From Console to Chrome bkz.

Güncelleştirilmiş Not (Şubat 2013):Thx @, tam bu noktada video bağlantısı sağlamak için badunk

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Artorius FullPower

    Artorius Ful

    29 Temmuz 2007
  • KRQE

    KRQE

    6 AĞUSTOS 2007
  • RickardRick

    RickardRick

    9 Mart 2007