diff --git a/__performance_tests__/add-data.js b/__performance_tests__/add-data.js index 024bc769..42023bee 100644 --- a/__performance_tests__/add-data.js +++ b/__performance_tests__/add-data.js @@ -10,6 +10,7 @@ import cloneDeep from "lodash.clonedeep" import {fromJS} from "immutable" import Seamless from "seamless-immutable" import deepFreeze from "deep-freeze" +import update from "immutability-helper" enableAllPlugins() @@ -78,6 +79,22 @@ measure("seamless-immutable + asMutable", () => { seamlessBaseState.set("data", dataSet).asMutable({deep: true}) }) +measure("immutability-helper - without autofreeze * " + MAX, () => { + for (let i = 0; i < MAX; i++) + update(baseState, { + data: {$set: dataSet} + }) +}) + +measure("immutability-helper - with autofreeze * " + MAX, () => { + for (let i = 0; i < MAX; i++) + deepFreeze( + update(baseState, { + data: {$set: dataSet} + }) + ) +}) + measure("immer (proxy) - without autofreeze * " + MAX, () => { setUseProxies(true) setAutoFreeze(false) diff --git a/__performance_tests__/incremental.js b/__performance_tests__/incremental.js index a1b42eca..418ff321 100644 --- a/__performance_tests__/incremental.js +++ b/__performance_tests__/incremental.js @@ -7,6 +7,7 @@ import produce, { } from "../dist/immer.cjs.production.min.js" import cloneDeep from "lodash.clonedeep" import * as Immutable from "immutable" +import update from "immutability-helper" enableAllPlugins() @@ -72,6 +73,25 @@ measure( } ) +measure( + "immutability-helper", + () => cloneDeep(baseState), + state => { + const idsToPush = [] + const objectsToMerge = {} + + for (let i = 0; i < MAX; i++) { + idsToPush.push(i) + objectsToMerge[i] = createTestObject() + } + + update(state, { + ids: {$push: idsToPush}, + map: {$merge: objectsToMerge} + }) + } +) + measure( "immer (proxy)", () => { diff --git a/__performance_tests__/todo.js b/__performance_tests__/todo.js index 505e5e96..ac86012c 100644 --- a/__performance_tests__/todo.js +++ b/__performance_tests__/todo.js @@ -10,6 +10,7 @@ import cloneDeep from "lodash.clonedeep" import {List, Record} from "immutable" import Seamless from "seamless-immutable" import deepFreeze from "deep-freeze" +import update from "immutability-helper" enableAllPlugins() @@ -169,6 +170,22 @@ measure("seamless-immutable + asMutable", () => { .asMutable({deep: true}) }) +measure("immutability-helper (no freeze)", () => { + const updates = {} + for (let i = 0; i < MAX * MODIFY_FACTOR; i++) { + updates[i] = {done: {$set: true}} + } + const nextState = update(baseState, updates) +}) + +measure("immutability-helper (with freeze)", () => { + const updates = {} + for (let i = 0; i < MAX * MODIFY_FACTOR; i++) { + updates[i] = {done: {$set: true}} + } + const nextState = freeze(update(baseState, updates)) +}) + measure( "immer (proxy) - without autofreeze", () => { diff --git a/package.json b/package.json index 4775980f..5e22451d 100644 --- a/package.json +++ b/package.json @@ -85,6 +85,7 @@ "deep-freeze": "^0.0.1", "flow-bin": "^0.123.0", "husky": "^1.2.0", + "immutability-helper": "^3.1.1", "immutable": "^3.8.2", "import-size": "^1.0.2", "jest": "^25.1.0", diff --git a/yarn.lock b/yarn.lock index ef9d82db..95a9bb03 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5611,6 +5611,11 @@ ignore@^5.1.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== +immutability-helper@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-3.1.1.tgz#2b86b2286ed3b1241c9e23b7b21e0444f52f77b7" + integrity sha512-Q0QaXjPjwIju/28TsugCHNEASwoCcJSyJV3uO1sOIQGI0jKgm9f41Lvz0DZj3n46cNCyAZTsEYoY4C2bVRUzyQ== + immutable@^3.8.2: version "3.8.2" resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3"