Skip to content

Commit 2ef9a42

Browse files
authored
Merge pull request #1028 from immerjs/immer-10
Immer 10
2 parents 48a91b3 + 41ebbbc commit 2ef9a42

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+4632
-8780
lines changed

.babelrc

-3
This file was deleted.

.github/workflows/test.yml

+2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ jobs:
2525
run: yarn test
2626
- name: coverage test
2727
run: yarn jest --coverage
28+
- name: perf test
29+
run: yarn test:perf
2830
- uses: coverallsapp/[email protected]
2931
with:
3032
github-token: ${{ secrets.GITHUB_TOKEN }}

__performance_tests__/add-data.js __performance_tests__/add-data.mjs

+8-32
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,17 @@
11
"use strict"
22

3-
import {measure} from "./measure"
4-
import produce, {
5-
setAutoFreeze,
6-
setUseProxies,
7-
enableAllPlugins
8-
} from "../dist/immer.cjs.production.min.js"
3+
import {measure} from "./measure.mjs"
4+
import {produce, setAutoFreeze} from "../dist/immer.mjs"
95
import cloneDeep from "lodash.clonedeep"
10-
import {fromJS} from "immutable"
6+
import immutable from "immutable"
7+
const {fromJS} = immutable
118
import Seamless from "seamless-immutable"
129
import deepFreeze from "deep-freeze"
1310

14-
enableAllPlugins()
15-
1611
console.log("\n# add-data - loading large set of data\n")
1712

18-
const dataSet = require("./data.json")
13+
import dataSet from "./data.json" assert { type: "json" }
14+
1915
const baseState = {
2016
data: null
2117
}
@@ -78,35 +74,15 @@ measure("seamless-immutable + asMutable", () => {
7874
seamlessBaseState.set("data", dataSet).asMutable({deep: true})
7975
})
8076

81-
measure("immer (proxy) - without autofreeze * " + MAX, () => {
82-
setUseProxies(true)
83-
setAutoFreeze(false)
84-
for (let i = 0; i < MAX; i++)
85-
produce(baseState, draft => {
86-
draft.data = dataSet
87-
})
88-
})
89-
90-
measure("immer (proxy) - with autofreeze * " + MAX, () => {
91-
setUseProxies(true)
92-
setAutoFreeze(true)
93-
for (let i = 0; i < MAX; i++)
94-
produce(frozenBazeState, draft => {
95-
draft.data = dataSet
96-
})
97-
})
98-
99-
measure("immer (es5) - without autofreeze * " + MAX, () => {
100-
setUseProxies(false)
77+
measure("immer - without autofreeze * " + MAX, () => {
10178
setAutoFreeze(false)
10279
for (let i = 0; i < MAX; i++)
10380
produce(baseState, draft => {
10481
draft.data = dataSet
10582
})
10683
})
10784

108-
measure("immer (es5) - with autofreeze * " + MAX, () => {
109-
setUseProxies(false)
85+
measure("immer - with autofreeze * " + MAX, () => {
11086
setAutoFreeze(true)
11187
for (let i = 0; i < MAX; i++)
11288
produce(frozenBazeState, draft => {

__performance_tests__/incremental.js __performance_tests__/incremental.mjs

+5-47
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
11
"use strict"
2-
import {measure} from "./measure"
3-
import produce, {
4-
setAutoFreeze,
5-
setUseProxies,
6-
enableAllPlugins
7-
} from "../dist/immer.cjs.production.min.js"
2+
import {measure} from "./measure.mjs"
3+
import {produce, setAutoFreeze} from "../dist/immer.mjs"
84
import cloneDeep from "lodash.clonedeep"
9-
import * as Immutable from "immutable"
10-
11-
enableAllPlugins()
5+
import Immutable from "immutable"
126

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

@@ -73,26 +67,8 @@ measure(
7367
)
7468

7569
measure(
76-
"immer (proxy)",
77-
() => {
78-
setUseProxies(true)
79-
setAutoFreeze(false)
80-
return baseState
81-
},
82-
state => {
83-
for (let i = 0; i < MAX; i++) {
84-
state = produce(state, draft => {
85-
draft.ids.push(i)
86-
draft.map[i] = createTestObject()
87-
})
88-
}
89-
}
90-
)
91-
92-
measure(
93-
"immer (es5)",
70+
"immer",
9471
() => {
95-
setUseProxies(false)
9672
setAutoFreeze(false)
9773
return baseState
9874
},
@@ -107,26 +83,8 @@ measure(
10783
)
10884

10985
measure(
110-
"immer (proxy) - single produce",
111-
() => {
112-
setUseProxies(true)
113-
setAutoFreeze(false)
114-
return baseState
115-
},
116-
state => {
117-
produce(state, draft => {
118-
for (let i = 0; i < MAX; i++) {
119-
draft.ids.push(i)
120-
draft.map[i] = createTestObject()
121-
}
122-
})
123-
}
124-
)
125-
126-
measure(
127-
"immer (es5) - single produce",
86+
"immer - single produce",
12887
() => {
129-
setUseProxies(false)
13088
setAutoFreeze(false)
13189
return baseState
13290
},

__performance_tests__/large-obj.mjs

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import {measure} from "./measure.mjs"
2+
import {
3+
produce,
4+
setUseStrictShallowCopy
5+
} from "../dist/immer.mjs"
6+
7+
console.log("\n# large-obj - mutate large object\n")
8+
9+
const MAX = 50
10+
11+
const baseState = Object.fromEntries(
12+
Array(10000)
13+
.fill(0)
14+
.map((_, i) => [i, i])
15+
)
16+
17+
measure("immer - with setUseStrictShallowCopy", () => {
18+
setUseStrictShallowCopy(true)
19+
20+
for (let i = 0; i < MAX; i++) {
21+
produce(baseState, draft => {
22+
draft[5000]++
23+
})
24+
}
25+
})
26+
27+
measure("immer - without setUseStrictShallowCopy", () => {
28+
setUseStrictShallowCopy(false)
29+
30+
for (let i = 0; i < MAX; i++) {
31+
produce(baseState, draft => {
32+
draft[5000]++
33+
})
34+
}
35+
})
File renamed without changes.

__performance_tests__/todo.js __performance_tests__/todo.mjs

+14-84
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
"use strict"
22

3-
import {measure} from "./measure"
4-
import produce, {
5-
setAutoFreeze,
6-
setUseProxies,
7-
enableAllPlugins
8-
} from "../dist/immer.cjs.production.min.js"
3+
import {measure} from "./measure.mjs"
4+
import {
5+
enablePatches,
6+
produce,
7+
setAutoFreeze
8+
} from "../dist/immer.mjs"
99
import cloneDeep from "lodash.clonedeep"
10-
import {List, Record} from "immutable"
10+
import immutable from "immutable"
1111
import Seamless from "seamless-immutable"
1212
import deepFreeze from "deep-freeze"
1313

14-
enableAllPlugins()
14+
const {List, Record} = immutable
1515

1616
function freeze(x) {
1717
Object.freeze(x)
@@ -170,9 +170,8 @@ measure("seamless-immutable + asMutable", () => {
170170
})
171171

172172
measure(
173-
"immer (proxy) - without autofreeze",
173+
"immer - without autofreeze",
174174
() => {
175-
setUseProxies(true)
176175
setAutoFreeze(false)
177176
},
178177
() => {
@@ -185,9 +184,8 @@ measure(
185184
)
186185

187186
measure(
188-
"immer (proxy) - with autofreeze",
187+
"immer - with autofreeze",
189188
() => {
190-
setUseProxies(true)
191189
setAutoFreeze(true)
192190
},
193191
() => {
@@ -200,9 +198,9 @@ measure(
200198
)
201199

202200
measure(
203-
"immer (proxy) - without autofreeze - with patch listener",
201+
"immer - without autofreeze - with patch listener",
204202
() => {
205-
setUseProxies(true)
203+
enablePatches()
206204
setAutoFreeze(false)
207205
},
208206
() => {
@@ -219,77 +217,9 @@ measure(
219217
)
220218

221219
measure(
222-
"immer (proxy) - with autofreeze - with patch listener",
220+
"immer - with autofreeze - with patch listener",
223221
() => {
224-
setUseProxies(true)
225-
setAutoFreeze(true)
226-
},
227-
() => {
228-
produce(
229-
baseState,
230-
draft => {
231-
for (let i = 0; i < MAX * MODIFY_FACTOR; i++) {
232-
draft[i].done = true
233-
}
234-
},
235-
function() {}
236-
)
237-
}
238-
)
239-
240-
measure(
241-
"immer (es5) - without autofreeze",
242-
() => {
243-
setUseProxies(false)
244-
setAutoFreeze(false)
245-
},
246-
() => {
247-
produce(baseState, draft => {
248-
for (let i = 0; i < MAX * MODIFY_FACTOR; i++) {
249-
draft[i].done = true
250-
}
251-
})
252-
}
253-
)
254-
255-
measure(
256-
"immer (es5) - with autofreeze",
257-
() => {
258-
setUseProxies(false)
259-
setAutoFreeze(true)
260-
},
261-
() => {
262-
produce(frozenBazeState, draft => {
263-
for (let i = 0; i < MAX * MODIFY_FACTOR; i++) {
264-
draft[i].done = true
265-
}
266-
})
267-
}
268-
)
269-
270-
measure(
271-
"immer (es5) - without autofreeze - with patch listener",
272-
() => {
273-
setUseProxies(false)
274-
setAutoFreeze(false)
275-
},
276-
() => {
277-
produce(
278-
baseState,
279-
draft => {
280-
for (let i = 0; i < MAX * MODIFY_FACTOR; i++) {
281-
draft[i].done = true
282-
}
283-
},
284-
function() {}
285-
)
286-
}
287-
)
288-
289-
measure(
290-
"immer (es5) - with autofreeze - with patch listener",
291-
() => {
292-
setUseProxies(false)
222+
enablePatches()
293223
setAutoFreeze(true)
294224
},
295225
() => {

0 commit comments

Comments
 (0)