2016-05-13 7 views
2

Ich habe versucht, eine Art von Informationen darüber zu finden, wie sich immutable.js verhält, wenn man einen Vergleich mit tiefen/verschachtelten Objekten durchführt, insbesondere mit der Groß-o-Notation. Jeder zufällig wissen, was es ist?unveränderliche.js Leistung mit Vergleich/gleich gegen verschachtelte Karten/Objekte?

objA = Immutable.Map({ 
    a: 'test', 
    b: Immutable.Map({ ... }) 
}); 

objB = Immutable.Map({ 
    a: 'test', 
    b: Immutable.Map({ ... }) 
}); 

objA.equals(objB); // not clear what the perf is on this 
+0

Ich würde beginnen [hier] (https://github.com/facebook/immutable-js/blob/master/src/utils/deepEqual.js) –

Antwort

2

sehen, ob das hilft:

const Immutable = require('immutable') 

function test (limit, mutate) { 
    const rawA = {} 
    var i 
    for (i = 0; i < limit; i++) { 
    rawA[String(i)] = i 
    } 
    const rawB = {} 
    for (i = 0; i < limit; i++) { 
    rawB[String(i)] = i 
    } 
    if (mutate) { 
    rawB['poison'] = false 
    } 
    if (Object.keys(rawA).length && Object.keys(rawB).length) { 
    if (false) { 
     console.log('dummy') 
    } 
    } 
    const a = Immutable.Map(rawA) 
    const b = Immutable.Map(rawB) 
    const timer = process.hrtime() 
    if (a.equals(b)) { 
    if (false) { 
     console.log('dummy') 
    } 
    } 
    return process.hrtime(timer) 
} 

const sizes = [1, 10, 100, 1000, 10 * 1000, 100 * 1000, 200 * 1000, 400 * 1000, 500 * 1000] 
sizes.forEach((limit) => { 
    var t1 = 0 
    var t2 = 0 
    const tries = [1, 2, 3, 4, 5] 
    tries.forEach((i) => { 
    t1 += test(limit, true)[1] 
    t2 += test(limit, false)[1] 
    }) 
console.log(limit, 
      t1, 
      Math.round(t1/(tries.length * limit)), 
      t2, 
      Math.round(t2/(tries.length * limit))) 
}) 

Grob gesagt ich würde sagen, dass die Leistung von .equals O (1), wenn die Karten nicht gleich sind, und nicht schlechter als O (n) wenn sie gleich sind.

1 313329 62666 579815 115963 
10 9617 192 293337 5867 
100 10873 22 1900225 3800 
1000 17505 4 4998441 1000 
10000 32060 1 12044412 241 
100000 81504 0 211355401 423 
200000 99704 0 543211687 543 
400000 133836 0 2231794320 1116 
500000 77741 0 2877654681 1151 
Verwandte Themen