Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Perf: Refactor PromiseManyArray and prep for RFC#745 #7505

Merged
merged 4 commits into from
May 12, 2021

Conversation

runspired
Copy link
Contributor

@runspired runspired commented May 4, 2021

This allows us to remove the sync-flush of ManyArray by utilizing a custom enumerable instead of ArrayProxy which was installing array observers. We now only sync-flush if array observers are added by an application.

Refactored in a way that adding deprecations from emberjs/rfcs#745 should be trivial, though will require test changes to resolve any deprecations it results in for our own app (I have a branch with those changes for when the time comes)

@github-actions
Copy link

github-actions bot commented May 4, 2021

Asset Size Report for f993c2b

IE11 Builds

🛑 The size of the library EmberData has increased by +4.32 KB (+715.0 B compressed) which exceeds the failure threshold of 75 bytes.

Warnings

⚠️ The uncompressed size of the package @ember-data/store has increased by +104.0 B.
⚠️ The uncompressed size of the package @ember-data/model has increased by +4.22 KB.

Changeset


EmberData +199.2 KB +4.32 KB (+40.72 KB +715.0 B compressed)
    @ember-data/store +81.51 KB +104.0 B (+16.66 KB +16.81 B compressed)
        @ember-data/store/-private +80.6 KB +104.0 B (+16.48 KB +16.81 B compressed)
    @ember-data/model +32.91 KB +4.22 KB (+6.73 KB +698.19 B compressed)
        @ember-data/model/-private +32.43 KB +4.22 KB (+6.63 KB +698.19 B compressed)

Full Asset Analysis (IE11)

Asset Size Report
=================


Library: EmberData
┌────────────┬─────────────┐
│  (index)   │   Values    │
├────────────┼─────────────┤
│   bytes    │ '199.20 KB' │
│ compressed │ '40.72 KB'  │
│  packages  │      8      │
│  modules   │     44      │
└────────────┴─────────────┘

Package: @ember-data/store
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '81.51 KB' │
│  compressed  │ '16.66 KB' │
│ % Of Library │   '40.9'   │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/store/-private                        | 80.60 KB  | 16.48 KB   | 98.9          | 40.5
	@ember-data/store/index                           | 936.00 B  | 191.33 B   | 1.1           | 0.5

Package: @ember-data/model
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '32.91 KB' │
│  compressed  │ '6.73 KB'  │
│ % Of Library │   '16.5'   │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/model/-private                        | 32.43 KB  | 6.63 KB    | 98.6          | 16.3
	@ember-data/model/index                           | 486.00 B  | 99.34 B    | 1.4           | 0.2

Package: @ember-data/record-data
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '25.14 KB' │
│  compressed  │ '5.14 KB'  │
│ % Of Library │   '12.6'   │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/record-data/-private                  | 25.14 KB  | 5.14 KB    | 100.0         | 12.6

Package: @ember-data/serializer
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '20.82 KB' │
│  compressed  │ '4.26 KB'  │
│ % Of Library │   '10.5'   │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/serializer/json                       | 7.75 KB   | 1.58 KB    | 37.2          | 3.9
	@ember-data/serializer/-private                   | 5.69 KB   | 1.16 KB    | 27.3          | 2.9
	@ember-data/serializer/json-api                   | 3.92 KB   | 821.55 B   | 18.9          | 2.0
	@ember-data/serializer/rest                       | 3.00 KB   | 627.15 B   | 14.4          | 1.5
	@ember-data/serializer/index                      | 258.00 B  | 52.73 B    | 1.2           | 0.1
	@ember-data/serializer/transform                  | 215.00 B  | 43.94 B    | 1.0           | 0.1

Package: @ember-data/adapter
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '18.47 KB' │
│  compressed  │ '3.78 KB'  │
│ % Of Library │   '9.3'    │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/adapter/rest                          | 9.31 KB   | 1.90 KB    | 50.4          | 4.7
	@ember-data/adapter/-private                      | 3.80 KB   | 796.41 B   | 20.6          | 1.9
	@ember-data/adapter/error                         | 1.95 KB   | 407.60 B   | 10.5          | 1.0
	@ember-data/adapter/index                         | 1.81 KB   | 378.17 B   | 9.8           | 0.9
	@ember-data/adapter/json-api                      | 1.60 KB   | 335.65 B   | 8.7           | 0.8

Package: ember-data
┌──────────────┬───────────┐
│   (index)    │  Values   │
├──────────────┼───────────┤
│    bytes     │ '9.24 KB' │
│  compressed  │ '1.89 KB' │
│ % Of Library │   '4.6'   │
└──────────────┴───────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	ember-data/index                                  | 2.32 KB   | 486.30 B   | 25.1          | 1.2
	ember-data/-private                               | 1.98 KB   | 414.76 B   | 21.4          | 1.0
	ember-data/adapters/errors                        | 1.19 KB   | 248.77 B   | 12.9          | 0.6
	ember-data/setup-container                        | 503.00 B  | 102.82 B   | 5.3           | 0.2
	ember-data/relationships                          | 318.00 B  | 65.00 B    | 3.4           | 0.2
	ember-data/serializers/embedded-records-mixin     | 274.00 B  | 56.01 B    | 2.9           | 0.1
	ember-data/serializers/json-api                   | 251.00 B  | 51.30 B    | 2.7           | 0.1
	ember-data/adapters/json-api                      | 245.00 B  | 50.08 B    | 2.6           | 0.1
	ember-data/serializers/json                       | 243.00 B  | 49.67 B    | 2.6           | 0.1
	ember-data/serializers/rest                       | 243.00 B  | 49.67 B    | 2.6           | 0.1
	ember-data/transform                              | 241.00 B  | 49.26 B    | 2.5           | 0.1
	ember-data/adapters/rest                          | 237.00 B  | 48.44 B    | 2.5           | 0.1
	ember-data/serializer                             | 232.00 B  | 47.42 B    | 2.5           | 0.1
	ember-data/adapter                                | 226.00 B  | 46.19 B    | 2.4           | 0.1
	ember-data/model                                  | 222.00 B  | 45.38 B    | 2.3           | 0.1
	ember-data/store                                  | 222.00 B  | 45.38 B    | 2.3           | 0.1
	ember-data/attr                                   | 218.00 B  | 44.56 B    | 2.3           | 0.1
	ember-data/version                                | 162.00 B  | 33.11 B    | 1.7           | 0.1

Package: ember-inflector
┌──────────────┬───────────┐
│   (index)    │  Values   │
├──────────────┼───────────┤
│    bytes     │ '8.15 KB' │
│  compressed  │ '1.67 KB' │
│ % Of Library │   '4.1'   │
└──────────────┴───────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	ember-inflector/lib/system/inflector              | 3.11 KB   | 650.86 B   | 38.1          | 1.6
	ember-inflector/lib/helpers/pluralize             | 1.62 KB   | 338.92 B   | 19.9          | 0.8
	ember-inflector/lib/system/inflections            | 1.59 KB   | 332.58 B   | 19.5          | 0.8
	ember-inflector/index                             | 473.00 B  | 96.68 B    | 5.7           | 0.2
	ember-inflector/lib/system                        | 471.00 B  | 96.28 B    | 5.6           | 0.2
	ember-inflector/lib/system/string                 | 332.00 B  | 67.86 B    | 4.0           | 0.2
	ember-inflector/lib/utils/make-helper             | 308.00 B  | 62.96 B    | 3.7           | 0.2
	ember-inflector/lib/helpers/singularize           | 296.00 B  | 60.50 B    | 3.5           | 0.1

Package: @ember-data/debug
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '2.96 KB'  │
│  compressed  │ '619.59 B' │
│ % Of Library │   '1.5'    │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/debug/index                           | 2.47 KB   | 517.38 B   | 83.5          | 1.2
	@ember-data/debug/setup                           | 500.00 B  | 102.20 B   | 16.5          | 0.2

Modern Builds

🛑 The size of the library EmberData has increased by +3.74 KB (+685.0 B compressed) which exceeds the failure threshold of 75 bytes.

Warnings

⚠️ The uncompressed size of the package @ember-data/store has increased by +104.0 B.
⚠️ The uncompressed size of the package @ember-data/model has increased by +3.64 KB.

Changeset


EmberData +178.45 KB +3.74 KB (+38.74 KB +685.0 B compressed)
    @ember-data/store +72.01 KB +104.0 B (+15.63 KB +18.58 B compressed)
        @ember-data/store/-private +71.09 KB +104.0 B (+15.43 KB +18.58 B compressed)
    @ember-data/model +29.28 KB +3.64 KB (+6.36 KB +666.42 B compressed)
        @ember-data/model/-private +28.81 KB +3.64 KB (+6.25 KB +666.42 B compressed)

Full Asset Analysis (Modern)

Asset Size Report
=================


Library: EmberData
┌────────────┬─────────────┐
│  (index)   │   Values    │
├────────────┼─────────────┤
│   bytes    │ '178.45 KB' │
│ compressed │ '38.74 KB'  │
│  packages  │      8      │
│  modules   │     44      │
└────────────┴─────────────┘

Package: @ember-data/store
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '72.01 KB' │
│  compressed  │ '15.63 KB' │
│ % Of Library │   '40.4'   │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/store/-private                        | 71.09 KB  | 15.43 KB   | 98.7          | 39.8
	@ember-data/store/index                           | 936.00 B  | 203.19 B   | 1.3           | 0.5

Package: @ember-data/model
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '29.28 KB' │
│  compressed  │ '6.36 KB'  │
│ % Of Library │   '16.4'   │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/model/-private                        | 28.81 KB  | 6.25 KB    | 98.4          | 16.1
	@ember-data/model/index                           | 486.00 B  | 105.50 B   | 1.6           | 0.3

Package: @ember-data/record-data
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '23.20 KB' │
│  compressed  │ '5.04 KB'  │
│ % Of Library │   '13.0'   │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/record-data/-private                  | 23.20 KB  | 5.04 KB    | 100.0         | 13.0

Package: @ember-data/serializer
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '19.34 KB' │
│  compressed  │ '4.20 KB'  │
│ % Of Library │   '10.8'   │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/serializer/json                       | 7.12 KB   | 1.55 KB    | 36.8          | 4.0
	@ember-data/serializer/-private                   | 5.37 KB   | 1.17 KB    | 27.8          | 3.0
	@ember-data/serializer/json-api                   | 3.69 KB   | 821.02 B   | 19.1          | 2.1
	@ember-data/serializer/rest                       | 2.71 KB   | 603.07 B   | 14.0          | 1.5
	@ember-data/serializer/index                      | 243.00 B  | 52.75 B    | 1.2           | 0.1
	@ember-data/serializer/transform                  | 215.00 B  | 46.67 B    | 1.1           | 0.1

Package: @ember-data/adapter
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '16.02 KB' │
│  compressed  │ '3.48 KB'  │
│ % Of Library │   '9.0'    │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/adapter/rest                          | 8.37 KB   | 1.82 KB    | 52.2          | 4.7
	@ember-data/adapter/-private                      | 3.58 KB   | 796.71 B   | 22.4          | 2.0
	@ember-data/adapter/error                         | 1.91 KB   | 425.27 B   | 11.9          | 1.1
	@ember-data/adapter/index                         | 1.14 KB   | 252.69 B   | 7.1           | 0.6
	@ember-data/adapter/json-api                      | 1.02 KB   | 226.42 B   | 6.4           | 0.6

Package: ember-data
┌──────────────┬───────────┐
│   (index)    │  Values   │
├──────────────┼───────────┤
│    bytes     │ '9.24 KB' │
│  compressed  │ '2.01 KB' │
│ % Of Library │   '5.2'   │
└──────────────┴───────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	ember-data/index                                  | 2.32 KB   | 516.45 B   | 25.1          | 1.3
	ember-data/-private                               | 1.98 KB   | 440.47 B   | 21.4          | 1.1
	ember-data/adapters/errors                        | 1.19 KB   | 264.19 B   | 12.9          | 0.7
	ember-data/setup-container                        | 503.00 B  | 109.19 B   | 5.3           | 0.3
	ember-data/relationships                          | 318.00 B  | 69.03 B    | 3.4           | 0.2
	ember-data/serializers/embedded-records-mixin     | 274.00 B  | 59.48 B    | 2.9           | 0.1
	ember-data/serializers/json-api                   | 251.00 B  | 54.48 B    | 2.7           | 0.1
	ember-data/adapters/json-api                      | 245.00 B  | 53.18 B    | 2.6           | 0.1
	ember-data/serializers/json                       | 243.00 B  | 52.75 B    | 2.6           | 0.1
	ember-data/serializers/rest                       | 243.00 B  | 52.75 B    | 2.6           | 0.1
	ember-data/transform                              | 241.00 B  | 52.31 B    | 2.5           | 0.1
	ember-data/adapters/rest                          | 237.00 B  | 51.44 B    | 2.5           | 0.1
	ember-data/serializer                             | 232.00 B  | 50.36 B    | 2.5           | 0.1
	ember-data/adapter                                | 226.00 B  | 49.06 B    | 2.4           | 0.1
	ember-data/model                                  | 222.00 B  | 48.19 B    | 2.3           | 0.1
	ember-data/store                                  | 222.00 B  | 48.19 B    | 2.3           | 0.1
	ember-data/attr                                   | 218.00 B  | 47.32 B    | 2.3           | 0.1
	ember-data/version                                | 162.00 B  | 35.16 B    | 1.7           | 0.1

Package: ember-inflector
┌──────────────┬───────────┐
│   (index)    │  Values   │
├──────────────┼───────────┤
│    bytes     │ '6.66 KB' │
│  compressed  │ '1.44 KB' │
│ % Of Library │   '3.7'   │
└──────────────┴───────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	ember-inflector/lib/system/inflector              | 2.88 KB   | 640.19 B   | 43.3          | 1.6
	ember-inflector/lib/system/inflections            | 1.59 KB   | 353.20 B   | 23.9          | 0.9
	ember-inflector/index                             | 473.00 B  | 102.68 B   | 6.9           | 0.3
	ember-inflector/lib/system                        | 471.00 B  | 102.24 B   | 6.9           | 0.3
	ember-inflector/lib/helpers/pluralize             | 373.00 B  | 80.97 B    | 5.5           | 0.2
	ember-inflector/lib/system/string                 | 318.00 B  | 69.03 B    | 4.7           | 0.2
	ember-inflector/lib/utils/make-helper             | 308.00 B  | 66.86 B    | 4.5           | 0.2
	ember-inflector/lib/helpers/singularize           | 296.00 B  | 64.25 B    | 4.3           | 0.2

Package: @ember-data/debug
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '2.70 KB'  │
│  compressed  │ '600.24 B' │
│ % Of Library │   '1.5'    │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/debug/index                           | 2.21 KB   | 491.91 B   | 82.0          | 1.2
	@ember-data/debug/setup                           | 499.00 B  | 108.32 B   | 18.0          | 0.3

Modern Builds (No Rollup)

🛑 The size of the library EmberData has increased by +3.55 KB (+619.0 B compressed) which exceeds the failure threshold of 75 bytes.

Warnings

⚠️ The uncompressed size of the package @ember-data/store has increased by +104.0 B.
⚠️ The uncompressed size of the package @ember-data/model has increased by +3.45 KB.

Changeset


EmberData +218.08 KB +3.55 KB (+42.07 KB +619.0 B compressed)
    @ember-data/store +95.53 KB +104.0 B (+18.43 KB +17.71 B compressed)
        @ember-data/store/-private/system/model/internal-model +14.33 KB +104.0 B (+2.77 KB +17.71 B compressed)
    @ember-data/model +33.85 KB +3.45 KB (+6.53 KB +601.29 B compressed)
        @ember-data/model/-private/system/promise-many-array +4.08 KB +3.45 KB (+805.16 B +601.29 B compressed)

Full Asset Analysis (Modern)

Asset Size Report
=================


Library: EmberData
┌────────────┬─────────────┐
│  (index)   │   Values    │
├────────────┼─────────────┤
│   bytes    │ '218.08 KB' │
│ compressed │ '42.07 KB'  │
│  packages  │      8      │
│  modules   │     149     │
└────────────┴─────────────┘

Package: @ember-data/store
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '95.53 KB' │
│  compressed  │ '18.43 KB' │
│ % Of Library │   '43.8'   │
└──────────────┴────────────┘
	Module                                                                             | Bytes     | Compressed | % of Package  | % Of Library
	--------------------------------------------------------------------------------------------------------------------------------------
	@ember-data/store/-private/system/core-store                                       | 17.10 KB  | 3.30 KB    | 17.9          | 7.8
	@ember-data/store/-private/system/model/internal-model                             | 14.33 KB  | 2.77 KB    | 15.0          | 6.6
	@ember-data/store/-private/system/model/states                                     | 5.42 KB   | 1.05 KB    | 5.7           | 2.5
	@ember-data/store/-private/system/fetch-manager                                    | 5.00 KB   | 987.26 B   | 5.2           | 2.3
	@ember-data/store/-private/system/store/finders                                    | 4.49 KB   | 886.37 B   | 4.7           | 2.1
	@ember-data/store/-private/system/record-array-manager                             | 4.11 KB   | 811.91 B   | 4.3           | 1.9
	@ember-data/store/-private/identifiers/cache                                       | 3.88 KB   | 765.61 B   | 4.1           | 1.8
	@ember-data/store/-private/index                                                   | 3.57 KB   | 705.04 B   | 3.7           | 1.6
	@ember-data/store/-private/system/store/record-data-store-wrapper                  | 3.36 KB   | 663.38 B   | 3.5           | 1.5
	@ember-data/store/-private/system/snapshot                                         | 3.21 KB   | 633.28 B   | 3.4           | 1.5
	@ember-data/store/-private/system/store/internal-model-factory                     | 2.91 KB   | 575.61 B   | 3.1           | 1.3
	@ember-data/store/-private/system/record-arrays/record-array                       | 2.25 KB   | 444.24 B   | 2.4           | 1.0
	@ember-data/store/-private/system/request-cache                                    | 1.89 KB   | 372.48 B   | 2.0           | 0.9
	@ember-data/store/-private/system/ds-model-store                                   | 1.85 KB   | 366.12 B   | 1.9           | 0.8
	@ember-data/store/-private/system/references/has-many                              | 1.53 KB   | 302.08 B   | 1.6           | 0.7
	@ember-data/store/-private/system/schema-definition-service                        | 1.47 KB   | 291.08 B   | 1.5           | 0.7
	@ember-data/store/-private/system/model/shim-model-class                           | 1.32 KB   | 260.22 B   | 1.4           | 0.6
	@ember-data/store/-private/system/references/belongs-to                            | 1.30 KB   | 257.32 B   | 1.4           | 0.6
	@ember-data/store/-private/system/store/serializer-response                        | 1.12 KB   | 222.02 B   | 1.2           | 0.5
	@ember-data/store/-private/identifiers/utils/uuid-v4                               | 1.05 KB   | 207.94 B   | 1.1           | 0.5
	@ember-data/store/-private/system/references/record                                | 979.00 B  | 188.84 B   | 1.0           | 0.4
	@ember-data/store/index                                                            | 936.00 B  | 180.55 B   | 1.0           | 0.4
	@ember-data/store/-private/system/references/reference                             | 917.00 B  | 176.88 B   | 0.9           | 0.4
	@ember-data/store/-private/system/record-arrays/adapter-populated-record-array     | 892.00 B  | 172.06 B   | 0.9           | 0.4
	@ember-data/store/-private/system/internal-model-map                               | 869.00 B  | 167.62 B   | 0.9           | 0.4
	@ember-data/store/-private/system/errors-utils                                     | 764.00 B  | 147.37 B   | 0.8           | 0.3
	@ember-data/store/-private/system/snapshot-record-array                            | 753.00 B  | 145.25 B   | 0.8           | 0.3
	@ember-data/store/-private/system/record-notification-manager                      | 697.00 B  | 134.45 B   | 0.7           | 0.3
	@ember-data/store/-private/system/references                                       | 598.00 B  | 115.35 B   | 0.6           | 0.3
	@ember-data/store/-private/system/promise-proxies                                  | 556.00 B  | 107.25 B   | 0.6           | 0.2
	@ember-data/store/-private/utils/construct-resource                                | 506.00 B  | 97.60 B    | 0.5           | 0.2
	@ember-data/store/-private/system/store/common                                     | 505.00 B  | 97.41 B    | 0.5           | 0.2
	@ember-data/store/-private/system/coerce-id                                        | 496.00 B  | 95.67 B    | 0.5           | 0.2
	@ember-data/store/-private/system/record-arrays                                    | 487.00 B  | 93.94 B    | 0.5           | 0.2
	@ember-data/store/-private/system/identity-map                                     | 450.00 B  | 86.80 B    | 0.5           | 0.2
	@ember-data/store/-private/ts-interfaces/identifier                                | 400.00 B  | 77.15 B    | 0.4           | 0.2
	@ember-data/store/-private/utils/symbol                                            | 393.00 B  | 75.80 B    | 0.4           | 0.2
	@ember-data/store/-private/system/record-data-for                                  | 373.00 B  | 71.95 B    | 0.4           | 0.2
	@ember-data/store/-private/identifiers/is-stable-identifier                        | 327.00 B  | 63.07 B    | 0.3           | 0.1
	@ember-data/store/-private/ts-interfaces/fetch-manager                             | 316.00 B  | 60.95 B    | 0.3           | 0.1
	@ember-data/store/-private/utils/promise-record                                    | 290.00 B  | 55.94 B    | 0.3           | 0.1
	@ember-data/store/-private/system/backburner                                       | 239.00 B  | 46.10 B    | 0.2           | 0.1
	@ember-data/store/-private/system/normalize-model-name                             | 220.00 B  | 42.43 B    | 0.2           | 0.1
	@ember-data/store/-private/utils/is-non-empty-string                               | 212.00 B  | 40.89 B    | 0.2           | 0.1
	@ember-data/store/-debug/index                                                     | 193.00 B  | 37.22 B    | 0.2           | 0.1
	@ember-data/store/-private/system/deprecated-evented                               | 190.00 B  | 36.65 B    | 0.2           | 0.1
	@ember-data/store/-private/ts-interfaces/minimum-serializer-interface              | 98.00 B   | 18.90 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/record-data-record-wrapper                | 96.00 B   | 18.51 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/minimum-adapter-interface                 | 95.00 B   | 18.32 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/record-data-store-wrapper                 | 95.00 B   | 18.32 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/schema-definition-service                 | 95.00 B   | 18.32 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/record-data-json-api                      | 90.00 B   | 17.36 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/ember-data-json-api                       | 89.00 B   | 17.16 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/record-data-schemas                       | 89.00 B   | 17.16 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/promise-proxies                           | 85.00 B   | 16.39 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/record-instance                           | 85.00 B   | 16.39 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/record-data                               | 81.00 B   | 15.62 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/ds-model                                  | 78.00 B   | 15.04 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/utils                                     | 75.00 B   | 14.46 B    | 0.1           | 0.0

Package: @ember-data/model
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '33.85 KB' │
│  compressed  │ '6.53 KB'  │
│ % Of Library │   '15.5'   │
└──────────────┴────────────┘
	Module                                                                | Bytes     | Compressed | % of Package  | % Of Library
	-------------------------------------------------------------------------------------------------------------------------
	@ember-data/model/-private/model                                      | 9.99 KB   | 1.93 KB    | 29.5          | 4.6
	@ember-data/model/-private/record-state                               | 6.40 KB   | 1.23 KB    | 18.9          | 2.9
	@ember-data/model/-private/system/promise-many-array                  | 4.08 KB   | 805.16 B   | 12.0          | 1.9
	@ember-data/model/-private/system/many-array                          | 2.78 KB   | 549.95 B   | 8.2           | 1.3
	@ember-data/model/-private/errors                                     | 2.03 KB   | 401.61 B   | 6.0           | 0.9
	@ember-data/model/-private/index                                      | 1.42 KB   | 280.86 B   | 4.2           | 0.7
	@ember-data/model/-private/system/relationships/relationship-meta     | 1.25 KB   | 247.49 B   | 3.7           | 0.6
	@ember-data/model/-private/tmp-cached-polyfill                        | 1000.00 B | 192.89 B   | 2.9           | 0.4
	@ember-data/model/-private/attr                                       | 823.00 B  | 158.75 B   | 2.4           | 0.4
	@ember-data/model/-private/notify-changes                             | 817.00 B  | 157.59 B   | 2.4           | 0.4
	@ember-data/model/-private/belongs-to                                 | 626.00 B  | 120.75 B   | 1.8           | 0.3
	@ember-data/model/-private/has-many                                   | 587.00 B  | 113.23 B   | 1.7           | 0.3
	@ember-data/model/index                                               | 486.00 B  | 93.74 B    | 1.4           | 0.2
	@ember-data/model/-private/util                                       | 442.00 B  | 85.26 B    | 1.3           | 0.2
	@ember-data/model/-private/system/diff-array                          | 438.00 B  | 84.49 B    | 1.3           | 0.2
	@ember-data/model/-private/system/promise-belongs-to                  | 412.00 B  | 79.47 B    | 1.2           | 0.2
	@ember-data/model/-private/system/model-for-mixin                     | 408.00 B  | 78.70 B    | 1.2           | 0.2

Package: @ember-data/record-data
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '29.97 KB' │
│  compressed  │ '5.78 KB'  │
│ % Of Library │   '13.7'   │
└──────────────┴────────────┘
	Module                                                                            | Bytes     | Compressed | % of Package  | % Of Library
	-------------------------------------------------------------------------------------------------------------------------------------
	@ember-data/record-data/-private/record-data                                      | 8.16 KB   | 1.57 KB    | 27.2          | 3.7
	@ember-data/record-data/-private/graph/index                                      | 4.61 KB   | 910.67 B   | 15.4          | 2.1
	@ember-data/record-data/-private/graph/operations/replace-related-records         | 3.01 KB   | 594.13 B   | 10.0          | 1.4
	@ember-data/record-data/-private/graph/-edge-definition                           | 2.81 KB   | 554.77 B   | 9.4           | 1.3
	@ember-data/record-data/-private/relationships/state/has-many                     | 1.97 KB   | 389.46 B   | 6.6           | 0.9
	@ember-data/record-data/-private/relationships/state/belongs-to                   | 1.90 KB   | 375.57 B   | 6.3           | 0.9
	@ember-data/record-data/-private/graph/operations/update-relationship             | 1.42 KB   | 279.89 B   | 4.7           | 0.6
	@ember-data/record-data/-private/graph/-utils                                     | 1.03 KB   | 204.08 B   | 3.4           | 0.5
	@ember-data/record-data/-private/graph/operations/replace-related-record          | 979.00 B  | 188.84 B   | 3.2           | 0.4
	@ember-data/record-data/-private/index                                            | 977.00 B  | 188.46 B   | 3.2           | 0.4
	@ember-data/record-data/-private/graph/operations/add-to-related-records          | 771.00 B  | 148.72 B   | 2.5           | 0.3
	@ember-data/record-data/-private/relationships/state/implicit                     | 692.00 B  | 133.48 B   | 2.3           | 0.3
	@ember-data/record-data/-private/graph/operations/remove-from-related-records     | 650.00 B  | 125.38 B   | 2.1           | 0.3
	@ember-data/record-data/-private/coerce-id                                        | 406.00 B  | 78.31 B    | 1.3           | 0.2
	@ember-data/record-data/-private/graph/-state                                     | 293.00 B  | 56.51 B    | 1.0           | 0.1
	@ember-data/record-data/-private/normalize-link                                   | 238.00 B  | 45.91 B    | 0.8           | 0.1
	@ember-data/record-data/-private/ts-interfaces/relationship-record-data           | 100.00 B  | 19.28 B    | 0.3           | 0.0
	@ember-data/record-data/-private/graph/-operations                                | 79.00 B   | 15.23 B    | 0.3           | 0.0

Package: @ember-data/serializer
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '21.74 KB' │
│  compressed  │ '4.19 KB'  │
│ % Of Library │   '10.0'   │
└──────────────┴────────────┘
	Module                                                     | Bytes     | Compressed | % of Package  | % Of Library
	--------------------------------------------------------------------------------------------------------------
	@ember-data/serializer/json                                | 7.12 KB   | 1.37 KB    | 32.7          | 3.3
	@ember-data/serializer/-private/embedded-records-mixin     | 4.30 KB   | 849.14 B   | 19.8          | 2.0
	@ember-data/serializer/json-api                            | 3.69 KB   | 729.54 B   | 17.0          | 1.7
	@ember-data/serializer/rest                                | 2.71 KB   | 535.87 B   | 12.5          | 1.2
	@ember-data/serializer/-private/index                      | 1.18 KB   | 233.40 B   | 5.4           | 0.5
	@ember-data/serializer/-private/transforms/date            | 523.00 B  | 100.88 B   | 2.3           | 0.2
	@ember-data/serializer/-private/transforms/boolean         | 490.00 B  | 94.52 B    | 2.2           | 0.2
	@ember-data/serializer/-private/transforms/number          | 446.00 B  | 86.03 B    | 2.0           | 0.2
	@ember-data/serializer/-private/transforms/string          | 351.00 B  | 67.70 B    | 1.6           | 0.2
	@ember-data/serializer/-private/utils                      | 286.00 B  | 55.16 B    | 1.3           | 0.1
	@ember-data/serializer/index                               | 243.00 B  | 46.87 B    | 1.1           | 0.1
	@ember-data/serializer/-private/transforms/transform       | 242.00 B  | 46.68 B    | 1.1           | 0.1
	@ember-data/serializer/transform                           | 215.00 B  | 41.47 B    | 1.0           | 0.1

Package: @ember-data/adapter
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '18.14 KB' │
│  compressed  │ '3.50 KB'  │
│ % Of Library │   '8.3'    │
└──────────────┴────────────┘
	Module                                                        | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------------------
	@ember-data/adapter/rest                                      | 8.37 KB   | 1.61 KB    | 46.1          | 3.8
	@ember-data/adapter/error                                     | 1.91 KB   | 377.89 B   | 10.5          | 0.9
	@ember-data/adapter/-private/build-url-mixin                  | 1.82 KB   | 360.14 B   | 10.1          | 0.8
	@ember-data/adapter/index                                     | 1.14 KB   | 224.53 B   | 6.3           | 0.5
	@ember-data/adapter/-private/index                            | 1.03 KB   | 203.70 B   | 5.7           | 0.5
	@ember-data/adapter/json-api                                  | 1.02 KB   | 201.19 B   | 5.6           | 0.5
	@ember-data/adapter/-private/utils/serialize-query-params     | 792.00 B  | 152.77 B   | 4.3           | 0.4
	@ember-data/adapter/-private/utils/determine-body-promise     | 549.00 B  | 105.90 B   | 3.0           | 0.2
	@ember-data/adapter/-private/utils/parse-response-headers     | 480.00 B  | 92.59 B    | 2.6           | 0.2
	@ember-data/adapter/-private/utils/fetch                      | 454.00 B  | 87.57 B    | 2.4           | 0.2
	@ember-data/adapter/-private/utils/serialize-into-hash        | 347.00 B  | 66.93 B    | 1.9           | 0.2
	@ember-data/adapter/-private/utils/continue-on-reject         | 219.00 B  | 42.24 B    | 1.2           | 0.1
	@ember-data/adapter/-private/fastboot-interface               | 76.00 B   | 14.66 B    | 0.4           | 0.0

Package: ember-data
┌──────────────┬───────────┐
│   (index)    │  Values   │
├──────────────┼───────────┤
│    bytes     │ '9.50 KB' │
│  compressed  │ '1.83 KB' │
│ % Of Library │   '4.4'   │
└──────────────┴───────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	ember-data/index                                  | 2.32 KB   | 458.90 B   | 24.5          | 1.1
	ember-data/-private/index                         | 1.93 KB   | 380.78 B   | 20.3          | 0.9
	ember-data/adapters/errors                        | 1.19 KB   | 234.75 B   | 12.5          | 0.5
	ember-data/setup-container                        | 503.00 B  | 97.02 B    | 5.2           | 0.2
	ember-data/-private/core                          | 321.00 B  | 61.92 B    | 3.3           | 0.1
	ember-data/relationships                          | 318.00 B  | 61.34 B    | 3.3           | 0.1
	ember-data/serializers/embedded-records-mixin     | 274.00 B  | 52.85 B    | 2.8           | 0.1
	ember-data/serializers/json-api                   | 251.00 B  | 48.41 B    | 2.6           | 0.1
	ember-data/adapters/json-api                      | 245.00 B  | 47.26 B    | 2.5           | 0.1
	ember-data/serializers/json                       | 243.00 B  | 46.87 B    | 2.5           | 0.1
	ember-data/serializers/rest                       | 243.00 B  | 46.87 B    | 2.5           | 0.1
	ember-data/transform                              | 241.00 B  | 46.48 B    | 2.5           | 0.1
	ember-data/adapters/rest                          | 237.00 B  | 45.71 B    | 2.4           | 0.1
	ember-data/serializer                             | 232.00 B  | 44.75 B    | 2.4           | 0.1
	ember-data/adapter                                | 226.00 B  | 43.59 B    | 2.3           | 0.1
	ember-data/model                                  | 222.00 B  | 42.82 B    | 2.3           | 0.1
	ember-data/store                                  | 222.00 B  | 42.82 B    | 2.3           | 0.1
	ember-data/attr                                   | 218.00 B  | 42.05 B    | 2.2           | 0.1
	ember-data/version                                | 162.00 B  | 31.24 B    | 1.7           | 0.1

Package: ember-inflector
┌──────────────┬───────────┐
│   (index)    │  Values   │
├──────────────┼───────────┤
│    bytes     │ '6.66 KB' │
│  compressed  │ '1.28 KB' │
│ % Of Library │   '3.1'   │
└──────────────┴───────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	ember-inflector/lib/system/inflector              | 2.88 KB   | 568.86 B   | 43.3          | 1.3
	ember-inflector/lib/system/inflections            | 1.59 KB   | 313.84 B   | 23.9          | 0.7
	ember-inflector/index                             | 473.00 B  | 91.24 B    | 6.9           | 0.2
	ember-inflector/lib/system                        | 471.00 B  | 90.85 B    | 6.9           | 0.2
	ember-inflector/lib/helpers/pluralize             | 373.00 B  | 71.95 B    | 5.5           | 0.2
	ember-inflector/lib/system/string                 | 318.00 B  | 61.34 B    | 4.7           | 0.1
	ember-inflector/lib/utils/make-helper             | 308.00 B  | 59.41 B    | 4.5           | 0.1
	ember-inflector/lib/helpers/singularize           | 296.00 B  | 57.09 B    | 4.3           | 0.1

Package: @ember-data/debug
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '2.70 KB'  │
│  compressed  │ '533.36 B' │
│ % Of Library │   '1.2'    │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/debug/index                           | 2.21 KB   | 437.10 B   | 82.0          | 1.0
	@ember-data/debug/setup                           | 499.00 B  | 96.25 B    | 18.0          | 0.2

@github-actions
Copy link

github-actions bot commented May 5, 2021

Performance Report for f993c2b

Scenario - materialization: ☑️ Performance is stable

☑️ duration
phase no difference [-28ms to 33ms]
☑️ Phase [navigationStart] => [start-find-all]
phase no difference [-2ms to 22ms]
☑️ Phase [start-find-all] => [start-materialization]
phase no difference [-26ms to 8ms]
☑️ Phase [start-materialization] => [end-materialization]
phase no difference [-9ms to 10ms]
☑️ Phase [end-materialization] => [Test End]
phase no difference [-7ms to 1ms]

Scenario - unload: ✅ Performance improved

✅ duration
phase estimated improvement -3069ms [-3100ms to -3036ms] OR -48.67% [-49.17% to -48.15%]
☑️ Phase [navigationStart] => [start-push-payload]
phase no difference [-2ms to 20ms]
☑️ Phase [start-push-payload] => [start-unload-records]
phase no difference [-22ms to 18ms]
✅ Phase [start-unload-records] => [end-unload-records]
phase estimated improvement -3073ms [-3084ms to -3062ms] OR -81.68% [-81.98% to -81.4%]
⚠️ Phase [end-unload-records] => [Test End]
phase estimated regression +2ms [1ms to 4ms] OR +3.14% [1.82% to 4.65%]

Scenario - destroy: ✅ Performance improved

✅ duration
phase estimated improvement -109ms [-142ms to -77ms] OR -2.85% [-3.7% to -2.01%]
⚠️ Phase [navigationStart] => [start-push-payload]
phase estimated regression +14ms [3ms to 25ms] OR +1.76% [0.34% to 3.18%]
☑️ Phase [start-push-payload] => [start-destroy-records]
phase no difference [-16ms to 19ms]
✅ Phase [start-destroy-records] => [end-destroy-records]
phase estimated improvement -117ms [-129ms to -105ms] OR -9.03% [-9.97% to -8.15%]
☑️ Phase [end-destroy-records] => [Test End]
phase no difference [0ms to 2ms]

Scenario - add-children: ☑️ Performance is stable

☑️ duration
phase no difference [-2ms to 38ms]
☑️ Phase [navigationStart] => [start-push-initial-payload]
phase no difference [-8ms to 17ms]
⚠️ Phase [start-push-initial-payload] => [start-push-update-payload]
phase estimated regression +14ms [4ms to 24ms] OR +2.16% [0.67% to 3.69%]
☑️ Phase [start-push-update-payload] => [end-push-update-payload]
phase no difference [-3ms to 4ms]
☑️ Phase [end-push-update-payload] => [Test End]
phase no difference [-2ms to 1ms]

Scenario - unused-relationships: ☑️ Performance is stable

☑️ duration
phase no difference [-11ms to 47ms]
☑️ Phase [navigationStart] => [start-push-payload]
phase no difference [-10ms to 7ms]
☑️ Phase [start-push-payload] => [end-push-payload]
phase no difference [-4ms to 36ms]
⚠️ Phase [end-push-payload] => [Test End]
phase estimated regression +3ms [0ms to 4ms] OR +1.96% [0.37% to 3.41%]

@runspired runspired changed the title Some small cleanups Eliminate _retainedManyArray cache, sync relationship flush, streamline notifications May 5, 2021
@runspired runspired requested a review from snewcomer May 5, 2021 08:07
@igorT
Copy link
Member

igorT commented May 8, 2021

The list of items in the PR title is a bit confusing, as eliminate applies only to the first two elements in the list. Something like: "Eliminate _retainedManyArray cache and sync relationship flushing. Also streamline notifications" Would be more readable.

@runspired runspired changed the title Eliminate _retainedManyArray cache, sync relationship flush, streamline notifications Perf: Refactor PromiseManyArray and prep for RFC#745 May 8, 2021
@runspired runspired changed the base branch from master to runspired/eliminate-many-array-retention May 8, 2021 22:11
@runspired runspired force-pushed the runspired/rel-cleanup branch 5 times, most recently from fa98b30 to 4769580 Compare May 9, 2021 01:27
@runspired runspired force-pushed the runspired/eliminate-many-array-retention branch from 96adf26 to cb146ae Compare May 9, 2021 01:46
@runspired runspired force-pushed the runspired/rel-cleanup branch 2 times, most recently from e316b48 to 8bb156e Compare May 9, 2021 02:05
@runspired runspired force-pushed the runspired/eliminate-many-array-retention branch from 6c760cf to acd7a3e Compare May 10, 2021 17:19
@runspired runspired force-pushed the runspired/eliminate-many-array-retention branch from 31d3869 to 010b63c Compare May 11, 2021 06:31
@delete-merged-branch delete-merged-branch bot deleted the branch master May 11, 2021 21:41
@runspired runspired changed the base branch from runspired/eliminate-many-array-retention to master May 11, 2021 23:08
@runspired runspired added 🏷️ chore This PR primarily refactors code or updates dependencies 🏷️ feat This PR introduces a new feature 🎯 beta PR should be backported to beta and removed 🏷️ deprecation 🏷️ chore This PR primarily refactors code or updates dependencies labels May 12, 2021
@runspired runspired merged commit ac5d113 into master May 12, 2021
@delete-merged-branch delete-merged-branch bot deleted the runspired/rel-cleanup branch May 12, 2021 08:27
@runspired runspired added 🏷️ perf PRs that improve performance in a notable way and removed 🏷️ feat This PR introduces a new feature performance 🎯 beta PR should be backported to beta labels May 27, 2021
@runspired runspired added this to the Public Graph API milestone Sep 11, 2023
@runspired runspired modified the milestones: Public Graph API, 🔌 Unplug Sep 11, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🏷️ perf PRs that improve performance in a notable way 🔌 Project Unplug 🔌
Projects
Status: Completed
Status: Completed
Development

Successfully merging this pull request may close these issues.

3 participants