, sayı dizisi için nesnelerin bir dizi dönüştürür aşağıdaki pasajı, göz önünde bulundurun: Bu gibi birlikte zincirleme zamanYerel harita, filtre, vb. Yöntemler mümkünse tek bir aracı dizi üzerinde çalışacak şekilde optimize edilmiş mi? Negatif değerler 2 tarafından filtre edilmiş ve daha sonra iki ile
var objects = (new Array(400)).fill({
value: Math.random() * 10 - 5
});
var positiveObjectValuesDoubled = objects.map(
item => item.value
).filter(
value => value > 0
).map(
value => value * 2
);
, kaç gerçek Dizi nesnelerdir toplam olarak oluşturuldu mu? 1 mi, 3 mü? (başlangıç objects
dizisi hariç). Özellikle
, ben zincirinin ikinci map
çağrısıyla sonra filter
tarafından oluşturulan aracı Dizi nesneler hakkında konuşurken ve ediyorum: Bu dizi nesneleri dikkate açıkça başına değil başvurulan, JavaScript optimize etmek kadar akıllı çalışma zamanları vardır Bu durumda mümkün olduğunda, aynı hafıza alanını kullanmak için?
Bu, evet ya da hayır bilgisiyle net olarak yanıtlanamazsa, bunu çeşitli tarayıcılarda nasıl belirleyebilirim? (Bildiğim kadarıyla, the array constructor can no longer be overridden kadarıyla, bu bir seçenek değil yani)
Diziler büyük olasılıkla oluşturulacak; Bunu esasen akış işlemine dönüştürmek muhtemelen bir Javascript motorunun yapacağı daha karmaşıktır. Dizilerin içindeki * değerler * büyük olasılıkla içeride/başvuruda bulunacaktır, bu nedenle, içerdiği değerlerden değil, yalnızca dizi yapısının kendisinin üst kısmına sahip olursunuz. Ayrıca, ilk 'map' tarafından yaratılan dizi, 'filter' ile yapıldığı zaman toplanan çöp olabilir, bu yüzden kaç tane dizinin bir kerede bellekte olacağını söylemek zor. – deceze
Bu sorunun yanında, fakat FWIW, bunu üç işlem zincirinin yerine bir “küçült” operasyonu olarak uyguluyorum; Bu, tek başına dizi yineleme sayısı daha verimli olduğu garanti edilir. – deceze
@deceze * "Bunu, üç işlem zincirinin yerine bir azaltma işlemi olarak kullanırdım" * - her ne olursa olsun, bu teorik bir sorudur. Yüksek performans kodunda hangi ek yaklaşımların mümkün olabileceği gibi, profilleme hemen belirgin bir cevap vermez *. ES5 dizi işlevlerinin okunabilirliği, özellikle ES6 ok işlevleriyle olağanüstüdür, dolayısıyla bu adamlara bakma. –