11
Basit soru: daha sığ bir nesne üzerinde sığ bir nesne kullanmanın bir yararı var mı? Bir kod yazdığımda, derin bir nesneyi kullanma eğilimindeyim, böylece anlaşılması ve sınıflandırılması kolaydır. Ama bu gelenek benim kodumu yavaşlatıyor mu diye merak ediyorum.JavaScript'te derin bir nesne yavaş mıdır? Eğer öyleyse ne kadar
Bir test yaptım, ancak doğru yapıp yapmadığımı bilmiyorum.
sonucu
//building necessary objects
var a = {};
var b;
b = a;
for (var i = 0; i < 100; i++) {
b["a"] = {};
b = b["a"];
}
var c = {};
//objects used
//a.a.a. ..(101 "a"s).. .a === {}
//c === {}
//1st test: shallow
var d;
var start = performance.now();
for (var i = 0; i < 1000000000; i++) {
d = c;
d = null;
}
var end = performance.now();
console.log('Shallow: ' + (end - start));
//2nd test: deeper
var e;
var start = performance.now();
for (var i = 0; i < 1000000000; i++) {
e = a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a;
e = null;
}
var end = performance.now();
console.log('Deeper: ' + (end - start));
shallow 3229 3304 3246 3253 3277
deep 3375 3343 3247 3193 3248
testi kat daha hızlı sığ olandan yavaş değil, hatta bazen. Sonuçlara rağmen, aynı hızda oldukları sonucuna varmak için yeterince güvenmiyorum. İkisi arasında bir fark var mı?
Şaka yapıyor musunuz? 3 saniyeden fazla bir sürede 1 milyar operasyon ve belki yaklaşık 100 ops hakkında bir şeyler mi harcıyorsunuz? Tehlikeli bir kötü durum için bile mi? Bu erken optimizasyon yazı büyük! Uygulamalardaki ve sistemlerdeki varyanslar, ikisi arasındaki performanstaki küçük değişimlere ağır basacaktır. – RobG
Böyle bir tür hız testleri asla gerçekten yararlı değildir. Gerçek kodda asla kullanılmayacak olan bazı yapay kod snippet'ini test edersiniz, bir js motorunun optimiserinin bu örnekte gerçek kod üzerinde tamamen farklı davranması ihtimali yüksektir. –
İç içe girmeler genellikle daha yavaş olacak, ancak bir özellik erişimi hızlı bir 'O (1)' işlemi olduğu için fark gerçekten çok küçüktür. Bilgisayarınızdaki diğer faktörler ve süreçlerin bu küçük zaman farklılıklarına katkıda bulunabileceğini unutmayın. –