2017-12-05 150 views
7

Düğümün belirli sürümlerinde, a += b, a = a + b'dan önemli ölçüde daha yavaştır, ancak tarayıcıda ve sonraki sürümlerde benzerdir. Onları çok farklı bir şekilde çalıştırmasına neden olan nedir?Düğümde neden + = (ek atama, artı eşittir) bu kadar yavaş?

  • node v6.10.0 (V8 5.1.281.93),% 75 daha düşük, ya da
  • node v8.0.0 (V8 5.8.283.41) hızlı% 86 daha yavaş 4x veya ters 7x daha hızlı
  • node v8.2.1 (V8 5.8.283.41),% 86 daha düşük olduğu, veya ters, ters
  • node v8.3.0 (V8 6.0.286.52) 7x hızlıdır ,
  • node v8.9.2 (V8 6.1.534.48)
  • benzer,
  • node v8.7.0 (v8 6.1.534.42)
  • benzer benzer
  • chrome 62.0.3202.94 (V8 6.1.534.42), benzer
  • safari 11.0.1, benzer

Düzenleme:

const iter = 10 * 1000 * 1000 

function one() { 
    let i = 0 
    let sum = 0 
    while (i < iter) { 
    sum += i 
    i++ 
    } 
} 

function two() { 
    let i = 0 
    let sum = 0 
    while (i < iter) { 
    sum = sum + i 
    i++ 
    } 
} 

let time 
const tries = 10 

time = Date.now() 
for (let i = 0; i < tries; i++) { 
    one() 
} 
console.log('one: ' + String(Date.now() - time)) 

time = Date.now() 
for (let i = 0; i < tries; i++) { 
    two() 
} 
console.log('two: ' + String(Date.now() - time)) 
+2

"İki" ve "bir" testlerinin sırasını değiştirmeyi denediniz mi? _Homemade_ testleri her zaman güvenilir değildir. –

+0

Bu ne değişti? @ibrahimmahrir – Luca

+1

Siparişi değiştirmeyi denedim, "sadece çünkü", ama aynı sonucu aldım – Billiam

cevap

4

Bu bir sorun değildir: o 6.

Snippet'ine 5 ila düğümün v8 motoru güncellemesi ile ilgili oluyor bulundu Düğüm içinde, ancak V8 motoruyla (hangi düğüm kullanıldığında). Optimizasyonunu kaldıran dil yapıları olan github sayfasında (github.com/vhf/v8-bailout-reasons) "kurtarma nedenlerinin" bir listesi vardır. "Desteklenmeyen izin bileşiği ataması", yani izin verilen değişkenlerle bileşik atama, bunlardan biridir. Kodu Chromium'un dev araçlarında eşlerseniz, "Optimize edilmemiş: Desteklenmeyen birleşik ödev atamasını" görebilmeniz gerekir: https://i.imgur.com/OWDMqQU.png

+0

V8 optimizasyonu hakkında iyi haberler (veya daha iyi bir gelecek için yeni bir umut): “Yıllardır öğrendiğiniz tüm bu optimizasyon katilleri? Unut Onlara ihtiyacınız olmayacak. Ne istersen kullan. Bir şey hala yavaş mı? Bir hata yapın! Biz düzelteceğiz. ”(Bmeurer #jskongress Kaynak: https://twitter.com/slsoftworks/status/930041069529690112 https://www.youtube.com/watch?time_continue = 283 V = cvybnv79Sek –