@@ -44,7 +44,8 @@ function createInitialState(arraySize = BENCHMARK_CONFIG.arraySize) {
4444name :`name-${ i } ` ,
4545isActive :i % 2 === 0
4646} ) ) ,
47- largeObject :createLargeObject ( BENCHMARK_CONFIG . largeObjectSize ) ,
47+ largeObject1 :createLargeObject ( BENCHMARK_CONFIG . largeObjectSize1 ) ,
48+ largeObject2 :createLargeObject ( BENCHMARK_CONFIG . largeObjectSize2 ) ,
4849api :{
4950queries :{ } ,
5051provided :{
@@ -62,7 +63,8 @@ const BENCHMARK_CONFIG = {
6263iterations :1 ,
6364arraySize :100 ,
6465nestedArraySize :10 ,
65- largeObjectSize :1000 ,
66+ largeObjectSize1 :1000 ,
67+ largeObjectSize2 :3000 ,
6668multiUpdateCount :5 ,
6769reuseStateIterations :10
6870}
@@ -104,8 +106,12 @@ const update = index => ({
104106type :"test/updateItem" ,
105107payload :{ id :index , value :index , nestedData :index }
106108} )
107- const updateLargeObject = index => ( {
108- type :"test/updateLargeObject" ,
109+ const updateLargeObject1 = index => ( {
110+ type :"test/updateLargeObject1" ,
111+ payload :{ value :index }
112+ } )
113+ const updateLargeObject2 = index => ( {
114+ type :"test/updateLargeObject2" ,
109115payload :{ value :index }
110116} )
111117const concat = index => ( {
@@ -174,10 +180,12 @@ const actions = {
174180remove,
175181filter,
176182update,
177- updateLargeObject,
178183concat,
179184mapNested,
180185// dash-named fields to improve readability in benchmark results
186+
187+ "update-largeObject1" :updateLargeObject1 ,
188+ "update-largeObject2" :updateLargeObject2 ,
181189"update-high" :updateHigh ,
182190"update-multiple" :updateMultiple ,
183191"remove-high" :removeHigh ,
@@ -332,11 +340,22 @@ const vanillaReducer = (state = createInitialState(), action) => {
332340)
333341}
334342}
335- case "test/updateLargeObject" :{
343+ case "test/updateLargeObject1" :{
344+ return {
345+ ...state ,
346+ largeObject1 :{
347+ ...state . largeObject1 ,
348+ [ `propertyAdded${ action . payload . value } ` ] :{
349+ id :action . payload . value
350+ }
351+ }
352+ }
353+ }
354+ case "test/updateLargeObject2" :{
336355return {
337356...state ,
338- largeObject :{
339- ...state . largeObject ,
357+ largeObject2 :{
358+ ...state . largeObject2 ,
340359[ `propertyAdded${ action . payload . value } ` ] :{
341360id :action . payload . value
342361}
@@ -462,8 +481,14 @@ const createImmerReducer = produce => {
462481item . nested . data = action . payload . nestedData
463482break
464483}
465- case "test/updateLargeObject" :{
466- draft . largeObject [ `propertyAdded${ action . payload . value } ` ] = {
484+ case "test/updateLargeObject1" :{
485+ draft . largeObject1 [ `propertyAdded${ action . payload . value } ` ] = {
486+ id :action . payload . value
487+ }
488+ break
489+ }
490+ case "test/updateLargeObject2" :{
491+ draft . largeObject2 [ `propertyAdded${ action . payload . value } ` ] = {
467492id :action . payload . value
468493}
469494break
@@ -597,7 +622,8 @@ function createBenchmarks() {
597622"update-high" ,
598623"remove" ,
599624"remove-high" ,
600- "updateLargeObject"
625+ "update-largeObject1" ,
626+ "update-largeObject2"
601627]
602628for ( const action of reuseActions ) {
603629summary ( function ( ) {
@@ -1191,13 +1217,6 @@ function printOverallVersionRankings(versionScores) {
11911217return
11921218}
11931219
1194- console . log (
1195- "\nMethodology: Lower geometric mean = better overall performance"
1196- )
1197- console . log (
1198- "(Geometric mean is standard for benchmarking as it handles multiplicative performance differences)"
1199- )
1200-
12011220console . log ( "\n┌──────┬─────────────────────┬─────────────────┬───────────┐" )
12021221console . log ( "│ Rank │ Version │ Geometric Mean │ Scenarios │" )
12031222console . log ( "├──────┼─────────────────────┼─────────────────┼───────────┤" )
@@ -1216,22 +1235,6 @@ function printOverallVersionRankings(versionScores) {
12161235}
12171236
12181237console . log ( "└──────┴─────────────────────┴─────────────────┴───────────┘" )
1219-
1220- // Highlight top performers
1221- if ( versionScores . length >= 3 ) {
1222- console . log ( "\nTop Overall Performers:" )
1223- for ( let i = 0 ; i < Math . min ( 10 , versionScores . length ) ; i ++ ) {
1224- const score = versionScores [ i ]
1225- const [ versionName , freezeIndicator ] = score . version . split ( "|" )
1226- const shortName = shortenVersionName ( versionName )
1227- console . log (
1228- `${ i +
1229- 1 } .${ shortName } (${ freezeIndicator } ) -${ score . geometricMean . toFixed (
1230- 2
1231- ) } x average`
1232- )
1233- }
1234- }
12351238}
12361239
12371240function printBenchmarkSummaryTable ( benchmarks ) {