İç kısımlar bir dizinin üzerinde döngü yapmaktan daha yavaş olan birçok yerde okudum ... Ancak, büyüklük (tip) bloklarında ilerlemenin, sahnelerin arkasında gerçekleşen her şeyle karşılaştırılınca pratik olarak zahmetsiz olduğunu anladım. nesnenin anahtarlar, ben Neden javascript in-in yavaş?
o anahtarı almak için bir ters karma işlevi yapmak zorunda mı ... tam nedeni o kadar yavaş ki ne olduğunu hala merak ediyorum ve bu süreç yavaş nedir?cevap
Belirli bir motor söz konusu olduğunda bunun gerçek cevabı muhtemelen motorun uygulanmasına bağlı olacaktır. (Varsa, farkın boyutu da aynı olacaktır.)
Ancak, değişmezler vardır. Örneğin, göz önünde bulundurun:
var obj = {a: "alpha", b: "beta"};
var name;
for (name in obj) {
console.log(obj[name]);
}
var arr = ["alpha", "beta"];
var index;
for (index = 0; index < arr.length; ++index) {
console.log(arr[index]);
}
obj
durumunda, motor zaten iterated ve hangi ettik değil, hem de filtreleyerek gelmiş olanları hangi özelliklerin takip etmek için bir mekanizma kullanmak zorunda sayısız özellik. Örneğin, sahnelerin ardında bir tür yineleyici nesnesi vardır (ve özelliklerin tanımlanma biçimi, bu da geçici bir dizi olabilir).
arr
durumunda; Bunu kodunuzda, çok basit ve verimli bir şekilde ele alıyorsunuz.
Her döngünün bloğunun içeriği aynıdır: Bir nesneye ait bir özellik araması. (İkinci durumda, teorik olarak, hem de bir numaralı dize dönüştürme var.)
Yani bu sadece sigara uygulama özgü cevap bekliyoruz: Ek havai.for..each
döngüler iterators and generators kullanın.
Yineleyici bir next()
yöntemi vardır bir amacıdır. Jeneratör, yield()
ifadelerini içeren bir fabrika işlevidir. Her iki yapı da bir tamsayı indeks değişkeninden daha karmaşıktır.
Tipik bir for(var i = 0; i < arr.length; i++)
döngüsünde, hemen hemen tüm yinelemelerde yürüten iki komut i++
ve i < arr
'dur. Bu, bir işlev çağrısı yapmaktan çok daha hızlıdır (next()
veya yield()
). Ayrıca, döngü başlatması (var i = 0
), yineleme nesnesini next()
yöntemiyle oluşturmaktan veya yineleyici oluşturmak için jeneratörü çağırmaktan daha hızlıdır. Bununla birlikte, uygulamalara büyük ölçüde bağlıdır ve Javascript motorlarının yaratıcıları, yaygın olarak kullanılan dil özelliklerini hızlandırmak için ellerinden geleni yaparlar.
ben fark benim kodun diğer kısımlarını optimize vaktimi harcamak isteyebilirsiniz, böylece marjinal olduğunu söyleyebilirim. Performans kazanımı karmaşıklık eklemek için çok küçük olduğunda, sözdizimi seçimi kod okunabilirliğini ve sürekliliğini performanstan daha fazla düşünmelidir. Bunu söyledikten sonra, zengin ve ünlü olduktan sonra kodunuzu sürdüren diğer geliştiriciler ve sizinkine daha anlamlı gelen sözdizimini kullanın! ;)
- 1. Javascript: neden kapatma değişkenine erişim yavaş olabilir
- 2. resolveInfo.loadLabel() neden bu kadar yavaş yavaş?
- 3. Neden bu javascript IE'de bu kadar yavaş çalışıyor?
- 4. Neden array.min çok yavaş?
- 5. JQuery'm neden yavaş çalışıyor?
- 6. QTreeView'da yavaş seçim, neden?
- 7. Android'de yavaş Javascript dokunma olayları
- 8. Python'un "struct.pack/unpack" inin C# değerine eşittir?
- 9. Neden CollectionViewSource.SortDescriptions kullanarak sıralama yavaş?
- 10. Windows makinemde neden yavaş kalıyor?
- 11. FizzBuzz programı yavaş görünüyor: Neden?
- 12. Neden amazon s3 yavaş mı?
- 13. Neden Eratosthenes Elek çok yavaş?
- 14. PDO bağlantısı neden yavaş çalışıyor?
- 15. Uygulama # çağrısı neden yavaş olsun?
- 16. DateTime.Parse neden bu kadar yavaş?
- 17. Neden getBoundingClientRect IE8'de yavaş?
- 18. Neden benim nodejs istekleri yavaş?
- 19. Google Maps API - Yavaş yükleme javascript
- 20. PHP yavaş yavaş mysqli
- 21. Bu jQuery seçici neden bu kadar yavaş?
- 22. IO'm neden Erlang'da bu kadar yavaş çalışıyor?
- 23. PyQt uygulama başlatması neden bu kadar yavaş?
- 24. Pyglet, pygame'e göre neden bu kadar yavaş?
- 25. Bu Elixir kodu neden bu kadar yavaş?
- 26. Görüntüler sunulurken MVC denetleyicim neden yavaş?
- 27. Neden python + sqlite3 aşırı derecede yavaş?
- 28. Bu durumda gccgo neden gc'den daha yavaş?
- 29. Android telefon simülatörü neden bu kadar yavaş?
- 30. Neden bu Haskell kodu çok yavaş?
Evet, tüm anahtarları almak göreceli yavaş bir süreç için ... onları almıyor karşılaştırıldığında olduğunu tahmin ediyorum; Alanı'nda ilk oysa normal 'for' ile tuşlara arama zorundadır için ...') loop, anahtarı döngü değişkeninden sağlıyorsunuz. –
Burada, "in ... in" için işlevinin "Object.keys()" ile aynı olduğunu gösteren bir JSPerf testi var (en azından Chrome'da): http://jsperf.com/for-in- vs-tuşları-vs-için.Böylece, anahtarların ve/veya bununla ilgili her şeyin daha yavaş olması ve anahtarların dışarıdan sağlanması. Ama aynı zamanda, tıpkı T.J. diyor. –