Skip to content

Commit

Permalink
Merge pull request #1028 from immerjs/immer-10
Browse files Browse the repository at this point in the history
Immer 10
  • Loading branch information
mweststrate committed Apr 17, 2023
2 parents 48a91b3 + 41ebbbc commit 2ef9a42
Show file tree
Hide file tree
Showing 87 changed files with 4,632 additions and 8,780 deletions.
3 changes: 0 additions & 3 deletions .babelrc

This file was deleted.

2 changes: 2 additions & 0 deletions .github/workflows/test.yml
Expand Up @@ -25,6 +25,8 @@ jobs:
run: yarn test
- name: coverage test
run: yarn jest --coverage
- name: perf test
run: yarn test:perf
- uses: coverallsapp/github-action@v1.1.2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -1,21 +1,17 @@
"use strict"

import {measure} from "./measure"
import produce, {
setAutoFreeze,
setUseProxies,
enableAllPlugins
} from "../dist/immer.cjs.production.min.js"
import {measure} from "./measure.mjs"
import {produce, setAutoFreeze} from "../dist/immer.mjs"
import cloneDeep from "lodash.clonedeep"
import {fromJS} from "immutable"
import immutable from "immutable"
const {fromJS} = immutable
import Seamless from "seamless-immutable"
import deepFreeze from "deep-freeze"

enableAllPlugins()

console.log("\n# add-data - loading large set of data\n")

const dataSet = require("./data.json")
import dataSet from "./data.json" assert { type: "json" }

const baseState = {
data: null
}
Expand Down Expand Up @@ -78,35 +74,15 @@ measure("seamless-immutable + asMutable", () => {
seamlessBaseState.set("data", dataSet).asMutable({deep: true})
})

measure("immer (proxy) - without autofreeze * " + MAX, () => {
setUseProxies(true)
setAutoFreeze(false)
for (let i = 0; i < MAX; i++)
produce(baseState, draft => {
draft.data = dataSet
})
})

measure("immer (proxy) - with autofreeze * " + MAX, () => {
setUseProxies(true)
setAutoFreeze(true)
for (let i = 0; i < MAX; i++)
produce(frozenBazeState, draft => {
draft.data = dataSet
})
})

measure("immer (es5) - without autofreeze * " + MAX, () => {
setUseProxies(false)
measure("immer - without autofreeze * " + MAX, () => {
setAutoFreeze(false)
for (let i = 0; i < MAX; i++)
produce(baseState, draft => {
draft.data = dataSet
})
})

measure("immer (es5) - with autofreeze * " + MAX, () => {
setUseProxies(false)
measure("immer - with autofreeze * " + MAX, () => {
setAutoFreeze(true)
for (let i = 0; i < MAX; i++)
produce(frozenBazeState, draft => {
Expand Down
@@ -1,14 +1,8 @@
"use strict"
import {measure} from "./measure"
import produce, {
setAutoFreeze,
setUseProxies,
enableAllPlugins
} from "../dist/immer.cjs.production.min.js"
import {measure} from "./measure.mjs"
import {produce, setAutoFreeze} from "../dist/immer.mjs"
import cloneDeep from "lodash.clonedeep"
import * as Immutable from "immutable"

enableAllPlugins()
import Immutable from "immutable"

console.log("\n# incremental - lot of small incremental changes\n")

Expand Down Expand Up @@ -73,26 +67,8 @@ measure(
)

measure(
"immer (proxy)",
() => {
setUseProxies(true)
setAutoFreeze(false)
return baseState
},
state => {
for (let i = 0; i < MAX; i++) {
state = produce(state, draft => {
draft.ids.push(i)
draft.map[i] = createTestObject()
})
}
}
)

measure(
"immer (es5)",
"immer",
() => {
setUseProxies(false)
setAutoFreeze(false)
return baseState
},
Expand All @@ -107,26 +83,8 @@ measure(
)

measure(
"immer (proxy) - single produce",
() => {
setUseProxies(true)
setAutoFreeze(false)
return baseState
},
state => {
produce(state, draft => {
for (let i = 0; i < MAX; i++) {
draft.ids.push(i)
draft.map[i] = createTestObject()
}
})
}
)

measure(
"immer (es5) - single produce",
"immer - single produce",
() => {
setUseProxies(false)
setAutoFreeze(false)
return baseState
},
Expand Down
35 changes: 35 additions & 0 deletions __performance_tests__/large-obj.mjs
@@ -0,0 +1,35 @@
import {measure} from "./measure.mjs"
import {
produce,
setUseStrictShallowCopy
} from "../dist/immer.mjs"

console.log("\n# large-obj - mutate large object\n")

const MAX = 50

const baseState = Object.fromEntries(
Array(10000)
.fill(0)
.map((_, i) => [i, i])
)

measure("immer - with setUseStrictShallowCopy", () => {
setUseStrictShallowCopy(true)

for (let i = 0; i < MAX; i++) {
produce(baseState, draft => {
draft[5000]++
})
}
})

measure("immer - without setUseStrictShallowCopy", () => {
setUseStrictShallowCopy(false)

for (let i = 0; i < MAX; i++) {
produce(baseState, draft => {
draft[5000]++
})
}
})
File renamed without changes.
98 changes: 14 additions & 84 deletions __performance_tests__/todo.js → __performance_tests__/todo.mjs
@@ -1,17 +1,17 @@
"use strict"

import {measure} from "./measure"
import produce, {
setAutoFreeze,
setUseProxies,
enableAllPlugins
} from "../dist/immer.cjs.production.min.js"
import {measure} from "./measure.mjs"
import {
enablePatches,
produce,
setAutoFreeze
} from "../dist/immer.mjs"
import cloneDeep from "lodash.clonedeep"
import {List, Record} from "immutable"
import immutable from "immutable"
import Seamless from "seamless-immutable"
import deepFreeze from "deep-freeze"

enableAllPlugins()
const {List, Record} = immutable

function freeze(x) {
Object.freeze(x)
Expand Down Expand Up @@ -170,9 +170,8 @@ measure("seamless-immutable + asMutable", () => {
})

measure(
"immer (proxy) - without autofreeze",
"immer - without autofreeze",
() => {
setUseProxies(true)
setAutoFreeze(false)
},
() => {
Expand All @@ -185,9 +184,8 @@ measure(
)

measure(
"immer (proxy) - with autofreeze",
"immer - with autofreeze",
() => {
setUseProxies(true)
setAutoFreeze(true)
},
() => {
Expand All @@ -200,9 +198,9 @@ measure(
)

measure(
"immer (proxy) - without autofreeze - with patch listener",
"immer - without autofreeze - with patch listener",
() => {
setUseProxies(true)
enablePatches()
setAutoFreeze(false)
},
() => {
Expand All @@ -219,77 +217,9 @@ measure(
)

measure(
"immer (proxy) - with autofreeze - with patch listener",
"immer - with autofreeze - with patch listener",
() => {
setUseProxies(true)
setAutoFreeze(true)
},
() => {
produce(
baseState,
draft => {
for (let i = 0; i < MAX * MODIFY_FACTOR; i++) {
draft[i].done = true
}
},
function() {}
)
}
)

measure(
"immer (es5) - without autofreeze",
() => {
setUseProxies(false)
setAutoFreeze(false)
},
() => {
produce(baseState, draft => {
for (let i = 0; i < MAX * MODIFY_FACTOR; i++) {
draft[i].done = true
}
})
}
)

measure(
"immer (es5) - with autofreeze",
() => {
setUseProxies(false)
setAutoFreeze(true)
},
() => {
produce(frozenBazeState, draft => {
for (let i = 0; i < MAX * MODIFY_FACTOR; i++) {
draft[i].done = true
}
})
}
)

measure(
"immer (es5) - without autofreeze - with patch listener",
() => {
setUseProxies(false)
setAutoFreeze(false)
},
() => {
produce(
baseState,
draft => {
for (let i = 0; i < MAX * MODIFY_FACTOR; i++) {
draft[i].done = true
}
},
function() {}
)
}
)

measure(
"immer (es5) - with autofreeze - with patch listener",
() => {
setUseProxies(false)
enablePatches()
setAutoFreeze(true)
},
() => {
Expand Down

0 comments on commit 2ef9a42

Please sign in to comment.