Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
immer produce vs immer freeze vs immutable copy vs deep freeze vs baseline copy / freeze
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36
Browser:
Chrome 131
Operating system:
Linux
Device Platform:
Desktop
Date tested:
one year ago
Test name
Executions per second
immer produce
2878076.2 Ops/sec
immer freeze
8117907.0 Ops/sec
immutable copy
23009.9 Ops/sec
deep freeze
162788.2 Ops/sec
baseline copy / freeze
3746040.5 Ops/sec
HTML Preparation code:
<script src="https://cdnjs.cloudflare.com/ajax/libs/immer/8.0.1/immer.umd.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.min.js"></script>
Script Preparation code:
// var { compose, over, set, lensPath, append } = R var INITIAL_DATA = { items: {}, count: 0, keys: [] } for (var index = 0; index < 100; index++) { INITIAL_DATA[index] = { id: index, name: `ITEM-${index}`, value: Math.random() } INITIAL_DATA.count++ INITIAL_DATA.keys.push(index) } var mutable = INITIAL_DATA var NEW_ITEM_ID = INITIAL_DATA.count +1 function deepFreeze (o) { Object.freeze(o); Object.getOwnPropertyNames(o).forEach(function (prop) { if (o.hasOwnProperty(prop) && o[prop] !== null && (typeof o[prop] === "object" || typeof o[prop] === "function") && !Object.isFrozen(o[prop])) { deepFreeze(o[prop]); } }); return o; };
Tests:
immer produce
data = immer.produce(INITIAL_DATA, draft => {})
immer freeze
data = immer.freeze(INITIAL_DATA, draft => {})
immutable copy
data = Immutable.fromJS(INITIAL_DATA)
deep freeze
data = deepFreeze(INITIAL_DATA)
baseline copy / freeze
data = Object.freeze({ items: Object.freeze({ ...INITIAL_DATA.items }), count: INITIAL_DATA.count, keys: Object.freeze([ ...INITIAL_DATA.keys ]) })