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] Class Fields Use Optimization & Made OrderedSet Faster (Again) #7454

Merged
merged 8 commits into from
Apr 12, 2021

Conversation

runspired
Copy link
Contributor

@runspired runspired commented Apr 10, 2021

Evaluating some of our current perf-based decisions to see if they still ring true.

This started off to see if we can clean up some of our patterns, what I found was inconclusive (which means maybe?) but in the process I also found that using declare for class fields that are initialized in the constructor is a nice boost to asset size trimming and also discovered that we were still importing all of Ember to grab GUID_KEY in InternalModel which was no longer used. The latter reminded me that OrderedSet usage was probably de-optimized when we moved to RecordData and sure enough we get a ~4.6% win making sure the set is keyed efficiently again. I also found sadness, but that will hopefully get cleaned up soon.

Findings:

  • moving type only field declarations to use declare has no evident perf impact but significantly improves build size.
  • moving some props from [[DECLARE]] to [[SET]] semantics had no evident perf impact, though this may be due to our babel config (need to investigate)
  • moving 1 prop in a hot path from lazy getter to eager initializer of an array did not have any evident perf impact
  • I discovered we could remove GUID_FOR usage entirely on InternalModel. It was only there for our use of OrderedSet
  • speaking of which RecordData needed GUID_FOR, but I went a step further and ported OrderedSet in and tailored it to use clientId for now and eliminated our need for guidFor and GUID_FOR. This better prepares us for refactoring to identifiers anyway, plus it's actually a good sized win for bundle size.
  • typing OrderedSet better revealed a few issues in Relationship.ts which have now been cleaned up

Perf Win

This is purely from having OrderedSet not need to call guidFor on recordData which does not have a GUID_KEY already.

  Benchmark Results Summary    

duration phase estimated improvement -94ms [-133ms to -54ms] OR -3.16% [-4.46% to -1.82%]
Phase [navigationStart] => [start-find-all] phase no difference [-14ms to 14ms]
Phase [start-find-all] => [start-outer-materialization] phase estimated improvement -81ms [-113ms to -50ms] OR -4.63% [-6.46% to -2.89%]
Phase [start-outer-materialization] => [stop-outer-materialization] phase no difference [-25ms to 6ms]
Phase [stop-outer-materialization] => [end-find-all] phase no difference [0ms to 0ms]
Phase [end-find-all] => [Test End] phase no difference [-2ms to 1ms]

@github-actions
Copy link

github-actions bot commented Apr 10, 2021

Asset Size Report for f30c1e6

IE11 Builds

EmberData shrank by 1.2 KB (127.0 B compressed)

Warnings

The uncompressed size of the package @ember-data/record-data has increased by 584.0 B.

Changeset


EmberData 160.13 KB -1.2 KB (34.51 KB -127.0 B compressed)
    @ember-data/store 69.35 KB -714.0 B (14.95 KB -73.54 B compressed)
        @ember-data/store/-private 68.44 KB -714.0 B (14.75 KB -73.54 B compressed)
    @ember-data/record-data 23.2 KB +584.0 B (5.0 KB +60.15 B compressed)
        @ember-data/record-data/-private 23.2 KB +584.0 B (5.0 KB +60.15 B compressed)
    @ember/ordered-set 0.0 B -1.08 KB (0.0 B -113.61 B compressed)
        @ember/ordered-set/index 0.0 B -1.08 KB (0.0 B -113.61 B compressed)

Full Asset Analysis (IE11)

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


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

Package: @ember-data/store
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '69.35 KB' │
│  compressed  │ '14.95 KB' │
│ % Of Library │   '43.3'   │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/store/-private                        | 68.44 KB  | 14.75 KB   | 98.7          | 42.7
	@ember-data/store/index                           | 936.00 B  | 201.73 B   | 1.3           | 0.6

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

Package: @ember-data/serializer
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '19.37 KB' │
│  compressed  │ '4.17 KB'  │
│ % Of Library │   '12.1'   │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/serializer/json                       | 7.12 KB   | 1.53 KB    | 36.8          | 4.4
	@ember-data/serializer/-private                   | 5.37 KB   | 1.16 KB    | 27.7          | 3.4
	@ember-data/serializer/json-api                   | 3.72 KB   | 820.28 B   | 19.2          | 2.3
	@ember-data/serializer/rest                       | 2.71 KB   | 598.72 B   | 14.0          | 1.7
	@ember-data/serializer/index                      | 243.00 B  | 52.37 B    | 1.2           | 0.1
	@ember-data/serializer/transform                  | 215.00 B  | 46.33 B    | 1.1           | 0.1

Package: @ember-data/adapter
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '16.02 KB' │
│  compressed  │ '3.45 KB'  │
│ % Of Library │   '10.0'   │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/adapter/rest                          | 8.37 KB   | 1.80 KB    | 52.2          | 5.2
	@ember-data/adapter/-private                      | 3.58 KB   | 790.97 B   | 22.4          | 2.2
	@ember-data/adapter/error                         | 1.91 KB   | 422.21 B   | 11.9          | 1.2
	@ember-data/adapter/index                         | 1.14 KB   | 250.87 B   | 7.1           | 0.7
	@ember-data/adapter/json-api                      | 1.02 KB   | 224.79 B   | 6.4           | 0.6

Package: @ember-data/model
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '13.59 KB' │
│  compressed  │ '2.93 KB'  │
│ % Of Library │   '8.5'    │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/model/-private                        | 13.12 KB  | 2.83 KB    | 96.5          | 8.2
	@ember-data/model/index                           | 486.00 B  | 104.74 B   | 3.5           | 0.3

Package: ember-data
┌──────────────┬───────────┐
│   (index)    │  Values   │
├──────────────┼───────────┤
│    bytes     │ '9.24 KB' │
│  compressed  │ '1.99 KB' │
│ % Of Library │   '5.8'   │
└──────────────┴───────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	ember-data/index                                  | 2.32 KB   | 512.73 B   | 25.1          | 1.5
	ember-data/-private                               | 1.98 KB   | 437.30 B   | 21.4          | 1.2
	ember-data/adapters/errors                        | 1.19 KB   | 262.29 B   | 12.9          | 0.7
	ember-data/setup-container                        | 503.00 B  | 108.40 B   | 5.3           | 0.3
	ember-data/relationships                          | 318.00 B  | 68.53 B    | 3.4           | 0.2
	ember-data/serializers/embedded-records-mixin     | 274.00 B  | 59.05 B    | 2.9           | 0.2
	ember-data/serializers/json-api                   | 251.00 B  | 54.09 B    | 2.7           | 0.2
	ember-data/adapters/json-api                      | 245.00 B  | 52.80 B    | 2.6           | 0.1
	ember-data/serializers/json                       | 243.00 B  | 52.37 B    | 2.6           | 0.1
	ember-data/serializers/rest                       | 243.00 B  | 52.37 B    | 2.6           | 0.1
	ember-data/transform                              | 241.00 B  | 51.94 B    | 2.5           | 0.1
	ember-data/adapters/rest                          | 237.00 B  | 51.07 B    | 2.5           | 0.1
	ember-data/serializer                             | 232.00 B  | 50.00 B    | 2.5           | 0.1
	ember-data/adapter                                | 226.00 B  | 48.70 B    | 2.4           | 0.1
	ember-data/model                                  | 222.00 B  | 47.84 B    | 2.3           | 0.1
	ember-data/store                                  | 222.00 B  | 47.84 B    | 2.3           | 0.1
	ember-data/attr                                   | 218.00 B  | 46.98 B    | 2.3           | 0.1
	ember-data/version                                | 162.00 B  | 34.91 B    | 1.7           | 0.1

Package: ember-inflector
┌──────────────┬───────────┐
│   (index)    │  Values   │
├──────────────┼───────────┤
│    bytes     │ '6.66 KB' │
│  compressed  │ '1.43 KB' │
│ % Of Library │   '4.2'   │
└──────────────┴───────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	ember-inflector/lib/system/inflector              | 2.88 KB   | 635.58 B   | 43.3          | 1.8
	ember-inflector/lib/system/inflections            | 1.59 KB   | 350.65 B   | 23.9          | 1.0
	ember-inflector/index                             | 473.00 B  | 101.94 B   | 6.9           | 0.3
	ember-inflector/lib/system                        | 471.00 B  | 101.51 B   | 6.9           | 0.3
	ember-inflector/lib/helpers/pluralize             | 373.00 B  | 80.39 B    | 5.5           | 0.2
	ember-inflector/lib/system/string                 | 318.00 B  | 68.53 B    | 4.7           | 0.2
	ember-inflector/lib/utils/make-helper             | 308.00 B  | 66.38 B    | 4.5           | 0.2
	ember-inflector/lib/helpers/singularize           | 296.00 B  | 63.79 B    | 4.3           | 0.2

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

Modern Builds

EmberData shrank by 1.2 KB (127.0 B compressed)

Warnings

The uncompressed size of the package @ember-data/record-data has increased by 584.0 B.

Changeset


EmberData 160.13 KB -1.2 KB (34.51 KB -127.0 B compressed)
    @ember-data/store 69.35 KB -714.0 B (14.95 KB -73.54 B compressed)
        @ember-data/store/-private 68.44 KB -714.0 B (14.75 KB -73.54 B compressed)
    @ember-data/record-data 23.2 KB +584.0 B (5.0 KB +60.15 B compressed)
        @ember-data/record-data/-private 23.2 KB +584.0 B (5.0 KB +60.15 B compressed)
    @ember/ordered-set 0.0 B -1.08 KB (0.0 B -113.61 B compressed)
        @ember/ordered-set/index 0.0 B -1.08 KB (0.0 B -113.61 B compressed)

Full Asset Analysis (Modern)

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


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

Package: @ember-data/store
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '69.35 KB' │
│  compressed  │ '14.95 KB' │
│ % Of Library │   '43.3'   │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/store/-private                        | 68.44 KB  | 14.75 KB   | 98.7          | 42.7
	@ember-data/store/index                           | 936.00 B  | 201.73 B   | 1.3           | 0.6

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

Package: @ember-data/serializer
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '19.37 KB' │
│  compressed  │ '4.17 KB'  │
│ % Of Library │   '12.1'   │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/serializer/json                       | 7.12 KB   | 1.53 KB    | 36.8          | 4.4
	@ember-data/serializer/-private                   | 5.37 KB   | 1.16 KB    | 27.7          | 3.4
	@ember-data/serializer/json-api                   | 3.72 KB   | 820.28 B   | 19.2          | 2.3
	@ember-data/serializer/rest                       | 2.71 KB   | 598.72 B   | 14.0          | 1.7
	@ember-data/serializer/index                      | 243.00 B  | 52.37 B    | 1.2           | 0.1
	@ember-data/serializer/transform                  | 215.00 B  | 46.33 B    | 1.1           | 0.1

Package: @ember-data/adapter
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '16.02 KB' │
│  compressed  │ '3.45 KB'  │
│ % Of Library │   '10.0'   │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/adapter/rest                          | 8.37 KB   | 1.80 KB    | 52.2          | 5.2
	@ember-data/adapter/-private                      | 3.58 KB   | 790.97 B   | 22.4          | 2.2
	@ember-data/adapter/error                         | 1.91 KB   | 422.21 B   | 11.9          | 1.2
	@ember-data/adapter/index                         | 1.14 KB   | 250.87 B   | 7.1           | 0.7
	@ember-data/adapter/json-api                      | 1.02 KB   | 224.79 B   | 6.4           | 0.6

Package: @ember-data/model
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '13.59 KB' │
│  compressed  │ '2.93 KB'  │
│ % Of Library │   '8.5'    │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/model/-private                        | 13.12 KB  | 2.83 KB    | 96.5          | 8.2
	@ember-data/model/index                           | 486.00 B  | 104.74 B   | 3.5           | 0.3

Package: ember-data
┌──────────────┬───────────┐
│   (index)    │  Values   │
├──────────────┼───────────┤
│    bytes     │ '9.24 KB' │
│  compressed  │ '1.99 KB' │
│ % Of Library │   '5.8'   │
└──────────────┴───────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	ember-data/index                                  | 2.32 KB   | 512.73 B   | 25.1          | 1.5
	ember-data/-private                               | 1.98 KB   | 437.30 B   | 21.4          | 1.2
	ember-data/adapters/errors                        | 1.19 KB   | 262.29 B   | 12.9          | 0.7
	ember-data/setup-container                        | 503.00 B  | 108.40 B   | 5.3           | 0.3
	ember-data/relationships                          | 318.00 B  | 68.53 B    | 3.4           | 0.2
	ember-data/serializers/embedded-records-mixin     | 274.00 B  | 59.05 B    | 2.9           | 0.2
	ember-data/serializers/json-api                   | 251.00 B  | 54.09 B    | 2.7           | 0.2
	ember-data/adapters/json-api                      | 245.00 B  | 52.80 B    | 2.6           | 0.1
	ember-data/serializers/json                       | 243.00 B  | 52.37 B    | 2.6           | 0.1
	ember-data/serializers/rest                       | 243.00 B  | 52.37 B    | 2.6           | 0.1
	ember-data/transform                              | 241.00 B  | 51.94 B    | 2.5           | 0.1
	ember-data/adapters/rest                          | 237.00 B  | 51.07 B    | 2.5           | 0.1
	ember-data/serializer                             | 232.00 B  | 50.00 B    | 2.5           | 0.1
	ember-data/adapter                                | 226.00 B  | 48.70 B    | 2.4           | 0.1
	ember-data/model                                  | 222.00 B  | 47.84 B    | 2.3           | 0.1
	ember-data/store                                  | 222.00 B  | 47.84 B    | 2.3           | 0.1
	ember-data/attr                                   | 218.00 B  | 46.98 B    | 2.3           | 0.1
	ember-data/version                                | 162.00 B  | 34.91 B    | 1.7           | 0.1

Package: ember-inflector
┌──────────────┬───────────┐
│   (index)    │  Values   │
├──────────────┼───────────┤
│    bytes     │ '6.66 KB' │
│  compressed  │ '1.43 KB' │
│ % Of Library │   '4.2'   │
└──────────────┴───────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	ember-inflector/lib/system/inflector              | 2.88 KB   | 635.58 B   | 43.3          | 1.8
	ember-inflector/lib/system/inflections            | 1.59 KB   | 350.65 B   | 23.9          | 1.0
	ember-inflector/index                             | 473.00 B  | 101.94 B   | 6.9           | 0.3
	ember-inflector/lib/system                        | 471.00 B  | 101.51 B   | 6.9           | 0.3
	ember-inflector/lib/helpers/pluralize             | 373.00 B  | 80.39 B    | 5.5           | 0.2
	ember-inflector/lib/system/string                 | 318.00 B  | 68.53 B    | 4.7           | 0.2
	ember-inflector/lib/utils/make-helper             | 308.00 B  | 66.38 B    | 4.5           | 0.2
	ember-inflector/lib/helpers/singularize           | 296.00 B  | 63.79 B    | 4.3           | 0.2

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

Modern Builds (No Rollup)

EmberData shrank by 1.16 KB (159.0 B compressed)

Warnings

The uncompressed size of the package @ember-data/record-data has increased by 621.0 B.

Changeset


EmberData 204.98 KB -1.16 KB (39.02 KB -159.0 B compressed)
    @ember-data/store 102.01 KB -707.0 B (19.42 KB -94.54 B compressed)
        @ember-data/store/-private/system/model/internal-model 16.3 KB -707.0 B (3.1 KB -94.54 B compressed)
    @ember-data/record-data 26.68 KB +621.0 B (5.08 KB +83.04 B compressed)
        @ember-data/record-data/-private/relationships/state/relationship 8.22 KB +49.0 B (1.56 KB +6.55 B compressed)
        @ember-data/record-data/-private/ordered-set 1.14 KB +572.0 B (222.71 B +76.49 B compressed)
    @ember/ordered-set 0.0 B -1.08 KB (0.0 B -147.5 B compressed)
        @ember/ordered-set/index 0.0 B -1.08 KB (0.0 B -147.5 B compressed)

Full Asset Analysis (Modern)

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


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

Package: @ember-data/store
┌──────────────┬─────────────┐
│   (index)    │   Values    │
├──────────────┼─────────────┤
│    bytes     │ '102.01 KB' │
│  compressed  │ '19.42 KB'  │
│ % Of Library │   '49.8'    │
└──────────────┴─────────────┘
	Module                                                                             | Bytes     | Compressed | % of Package  | % Of Library
	--------------------------------------------------------------------------------------------------------------------------------------
	@ember-data/store/-private/system/core-store                                       | 17.60 KB  | 3.35 KB    | 17.3          | 8.6
	@ember-data/store/-private/system/model/internal-model                             | 16.30 KB  | 3.10 KB    | 16.0          | 8.0
	@ember-data/store/-private/system/model/states                                     | 5.44 KB   | 1.04 KB    | 5.3           | 2.7
	@ember-data/store/-private/system/fetch-manager                                    | 4.96 KB   | 967.21 B   | 4.9           | 2.4
	@ember-data/store/-private/system/record-array-manager                             | 4.47 KB   | 870.50 B   | 4.4           | 2.2
	@ember-data/store/-private/index                                                   | 4.44 KB   | 864.60 B   | 4.3           | 2.2
	@ember-data/store/-private/system/store/finders                                    | 4.35 KB   | 848.61 B   | 4.3           | 2.1
	@ember-data/store/-private/identifiers/cache                                       | 3.86 KB   | 752.67 B   | 3.8           | 1.9
	@ember-data/store/-private/system/store/record-data-store-wrapper                  | 3.42 KB   | 666.06 B   | 3.3           | 1.7
	@ember-data/store/-private/system/store/internal-model-factory                     | 2.91 KB   | 567.45 B   | 2.9           | 1.4
	@ember-data/store/-private/system/snapshot                                         | 2.85 KB   | 555.65 B   | 2.8           | 1.4
	@ember-data/store/-private/system/record-arrays/record-array                       | 2.25 KB   | 438.39 B   | 2.2           | 1.1
	@ember-data/store/-private/system/ds-model-store                                   | 1.99 KB   | 387.95 B   | 2.0           | 1.0
	@ember-data/store/-private/system/request-cache                                    | 1.89 KB   | 367.58 B   | 1.8           | 0.9
	@ember-data/store/-private/system/references/has-many                              | 1.51 KB   | 293.53 B   | 1.5           | 0.7
	@ember-data/store/-private/system/schema-definition-service                        | 1.47 KB   | 287.25 B   | 1.4           | 0.7
	@ember-data/store/-private/system/relationship-meta                                | 1.45 KB   | 282.11 B   | 1.4           | 0.7
	@ember-data/store/-private/system/model/shim-model-class                           | 1.27 KB   | 247.46 B   | 1.2           | 0.6
	@ember-data/store/-private/system/references/belongs-to                            | 1.24 KB   | 240.99 B   | 1.2           | 0.6
	@ember-data/store/-private/system/store/serializer-response                        | 1.12 KB   | 219.10 B   | 1.1           | 0.5
	@ember-data/store/-private/identifiers/utils/uuid-v4                               | 1.05 KB   | 205.20 B   | 1.0           | 0.5
	@ember-data/store/-private/system/internal-model-map                               | 983.00 B  | 187.12 B   | 0.9           | 0.5
	@ember-data/store/-private/system/references/record                                | 968.00 B  | 184.26 B   | 0.9           | 0.5
	@ember-data/store/index                                                            | 936.00 B  | 178.17 B   | 0.9           | 0.4
	@ember-data/store/-private/system/references/reference                             | 917.00 B  | 174.55 B   | 0.9           | 0.4
	@ember-data/store/-private/system/record-arrays/adapter-populated-record-array     | 892.00 B  | 169.79 B   | 0.9           | 0.4
	@ember-data/store/-private/system/model/notify-changes                             | 866.00 B  | 164.85 B   | 0.8           | 0.4
	@ember-data/store/-private/system/errors-utils                                     | 764.00 B  | 145.43 B   | 0.7           | 0.4
	@ember-data/store/-private/system/snapshot-record-array                            | 753.00 B  | 143.33 B   | 0.7           | 0.4
	@ember-data/store/-private/system/record-notification-manager                      | 689.00 B  | 131.15 B   | 0.7           | 0.3
	@ember-data/store/-private/system/references                                       | 598.00 B  | 113.83 B   | 0.6           | 0.3
	@ember-data/store/-private/system/promise-proxies                                  | 556.00 B  | 105.83 B   | 0.5           | 0.3
	@ember-data/store/-private/utils/construct-resource                                | 506.00 B  | 96.32 B    | 0.5           | 0.2
	@ember-data/store/-private/system/store/common                                     | 505.00 B  | 96.13 B    | 0.5           | 0.2
	@ember-data/store/-private/system/coerce-id                                        | 496.00 B  | 94.41 B    | 0.5           | 0.2
	@ember-data/store/-private/system/record-arrays                                    | 487.00 B  | 92.70 B    | 0.5           | 0.2
	@ember-data/store/-private/system/identity-map                                     | 450.00 B  | 85.66 B    | 0.4           | 0.2
	@ember-data/store/-private/system/diff-array                                       | 438.00 B  | 83.37 B    | 0.4           | 0.2
	@ember-data/store/-private/ts-interfaces/identifier                                | 400.00 B  | 76.14 B    | 0.4           | 0.2
	@ember-data/store/-private/utils/symbol                                            | 393.00 B  | 74.81 B    | 0.4           | 0.2
	@ember-data/store/-private/identifiers/is-stable-identifier                        | 327.00 B  | 62.24 B    | 0.3           | 0.2
	@ember-data/store/-private/ts-interfaces/fetch-manager                             | 316.00 B  | 60.15 B    | 0.3           | 0.2
	@ember-data/store/-private/utils/promise-record                                    | 290.00 B  | 55.20 B    | 0.3           | 0.1
	@ember-data/store/-private/system/backburner                                       | 268.00 B  | 51.01 B    | 0.3           | 0.1
	@ember-data/store/-private/utils/brand                                             | 258.00 B  | 49.11 B    | 0.2           | 0.1
	@ember-data/store/-private/system/record-data-for                                  | 235.00 B  | 44.73 B    | 0.2           | 0.1
	@ember-data/store/-private/system/ts-upgrade-map                                   | 234.00 B  | 44.54 B    | 0.2           | 0.1
	@ember-data/store/-private/system/normalize-model-name                             | 220.00 B  | 41.87 B    | 0.2           | 0.1
	@ember-data/store/-private/utils/is-non-empty-string                               | 212.00 B  | 40.35 B    | 0.2           | 0.1
	@ember-data/store/-debug/index                                                     | 193.00 B  | 36.73 B    | 0.2           | 0.1
	@ember-data/store/-private/system/deprecated-evented                               | 190.00 B  | 36.16 B    | 0.2           | 0.1
	@ember-data/store/-private/ts-interfaces/record-data-store-wrapper                 | 136.00 B  | 25.88 B    | 0.1           | 0.1
	@ember-data/store/-private/ts-interfaces/record-data-schemas                       | 130.00 B  | 24.74 B    | 0.1           | 0.1
	@ember-data/store/-private/ts-interfaces/minimum-serializer-interface              | 98.00 B   | 18.65 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/record-data-record-wrapper                | 96.00 B   | 18.27 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/minimum-adapter-interface                 | 95.00 B   | 18.08 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/schema-definition-service                 | 95.00 B   | 18.08 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/record-data-json-api                      | 90.00 B   | 17.13 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/ember-data-json-api                       | 89.00 B   | 16.94 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/promise-proxies                           | 85.00 B   | 16.18 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/record-instance                           | 85.00 B   | 16.18 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/record-data                               | 81.00 B   | 15.41 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/ds-model                                  | 78.00 B   | 14.84 B    | 0.1           | 0.0
	@ember-data/store/-private/ts-interfaces/utils                                     | 75.00 B   | 14.27 B    | 0.1           | 0.0

Package: @ember-data/record-data
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '26.68 KB' │
│  compressed  │ '5.08 KB'  │
│ % Of Library │   '13.0'   │
└──────────────┴────────────┘
	Module                                                                      | Bytes     | Compressed | % of Package  | % Of Library
	-------------------------------------------------------------------------------------------------------------------------------
	@ember-data/record-data/-private/relationships/state/relationship           | 8.22 KB   | 1.56 KB    | 30.8          | 4.0
	@ember-data/record-data/-private/record-data                                | 8.12 KB   | 1.55 KB    | 30.4          | 4.0
	@ember-data/record-data/-private/relationships/state/belongs-to             | 3.03 KB   | 589.72 B   | 11.3          | 1.5
	@ember-data/record-data/-private/relationships/state/has-many               | 2.82 KB   | 549.56 B   | 10.6          | 1.4
	@ember-data/record-data/-private/relationships/state/create                 | 1.15 KB   | 224.62 B   | 4.3           | 0.6
	@ember-data/record-data/-private/ordered-set                                | 1.14 KB   | 222.71 B   | 4.3           | 0.6
	@ember-data/record-data/-private/index                                      | 1023.00 B | 194.73 B   | 3.7           | 0.5
	@ember-data/record-data/-private/record-data-for                            | 481.00 B  | 91.56 B    | 1.8           | 0.2
	@ember-data/record-data/-private/coerce-id                                  | 406.00 B  | 77.28 B    | 1.5           | 0.2
	@ember-data/record-data/-private/normalize-link                             | 249.00 B  | 47.39 B    | 0.9           | 0.1
	@ember-data/record-data/-private/ts-interfaces/relationship-record-data     | 100.00 B  | 19.03 B    | 0.4           | 0.0

Package: @ember-data/serializer
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '21.76 KB' │
│  compressed  │ '4.14 KB'  │
│ % Of Library │   '10.6'   │
└──────────────┴────────────┘
	Module                                                     | Bytes     | Compressed | % of Package  | % Of Library
	--------------------------------------------------------------------------------------------------------------
	@ember-data/serializer/json                                | 7.12 KB   | 1.35 KB    | 32.7          | 3.5
	@ember-data/serializer/-private/embedded-records-mixin     | 4.30 KB   | 837.95 B   | 19.8          | 2.1
	@ember-data/serializer/json-api                            | 3.72 KB   | 724.50 B   | 17.1          | 1.8
	@ember-data/serializer/rest                                | 2.71 KB   | 528.81 B   | 12.5          | 1.3
	@ember-data/serializer/-private/index                      | 1.18 KB   | 230.33 B   | 5.4           | 0.6
	@ember-data/serializer/-private/transforms/date            | 523.00 B  | 99.55 B    | 2.3           | 0.2
	@ember-data/serializer/-private/transforms/boolean         | 490.00 B  | 93.27 B    | 2.2           | 0.2
	@ember-data/serializer/-private/transforms/number          | 446.00 B  | 84.89 B    | 2.0           | 0.2
	@ember-data/serializer/-private/transforms/string          | 351.00 B  | 66.81 B    | 1.6           | 0.2
	@ember-data/serializer/-private/utils                      | 286.00 B  | 54.44 B    | 1.3           | 0.1
	@ember-data/serializer/index                               | 243.00 B  | 46.25 B    | 1.1           | 0.1
	@ember-data/serializer/-private/transforms/transform       | 242.00 B  | 46.06 B    | 1.1           | 0.1
	@ember-data/serializer/transform                           | 215.00 B  | 40.92 B    | 1.0           | 0.1

Package: @ember-data/adapter
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '18.14 KB' │
│  compressed  │ '3.45 KB'  │
│ % Of Library │   '8.8'    │
└──────────────┴────────────┘
	Module                                                        | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------------------
	@ember-data/adapter/rest                                      | 8.37 KB   | 1.59 KB    | 46.1          | 4.1
	@ember-data/adapter/error                                     | 1.91 KB   | 372.91 B   | 10.5          | 0.9
	@ember-data/adapter/-private/build-url-mixin                  | 1.82 KB   | 355.39 B   | 10.1          | 0.9
	@ember-data/adapter/index                                     | 1.14 KB   | 221.57 B   | 6.3           | 0.6
	@ember-data/adapter/-private/index                            | 1.03 KB   | 201.01 B   | 5.7           | 0.5
	@ember-data/adapter/json-api                                  | 1.02 KB   | 198.54 B   | 5.6           | 0.5
	@ember-data/adapter/-private/utils/serialize-query-params     | 792.00 B  | 150.76 B   | 4.3           | 0.4
	@ember-data/adapter/-private/utils/determine-body-promise     | 549.00 B  | 104.50 B   | 3.0           | 0.3
	@ember-data/adapter/-private/utils/parse-response-headers     | 480.00 B  | 91.37 B    | 2.6           | 0.2
	@ember-data/adapter/-private/utils/fetch                      | 454.00 B  | 86.42 B    | 2.4           | 0.2
	@ember-data/adapter/-private/utils/serialize-into-hash        | 347.00 B  | 66.05 B    | 1.9           | 0.2
	@ember-data/adapter/-private/utils/continue-on-reject         | 219.00 B  | 41.68 B    | 1.2           | 0.1
	@ember-data/adapter/-private/fastboot-interface               | 76.00 B   | 14.46 B    | 0.4           | 0.0

Package: @ember-data/model
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '17.53 KB' │
│  compressed  │ '3.34 KB'  │
│ % Of Library │   '8.6'    │
└──────────────┴────────────┘
	Module                                                   | Bytes     | Compressed | % of Package  | % Of Library
	------------------------------------------------------------------------------------------------------------
	@ember-data/model/-private/model                         | 6.32 KB   | 1.20 KB    | 36.0          | 3.1
	@ember-data/model/-private/system/many-array             | 2.40 KB   | 467.13 B   | 13.7          | 1.2
	@ember-data/model/-private/errors                        | 2.03 KB   | 396.32 B   | 11.6          | 1.0
	@ember-data/model/-private/index                         | 1.29 KB   | 251.46 B   | 7.4           | 0.6
	@ember-data/model/-private/system/relationships/ext      | 1.19 KB   | 232.42 B   | 6.8           | 0.6
	@ember-data/model/-private/attr                          | 724.00 B  | 137.81 B   | 4.0           | 0.3
	@ember-data/model/-private/belongs-to                    | 663.00 B  | 126.20 B   | 3.7           | 0.3
	@ember-data/model/-private/system/promise-many-array     | 642.00 B  | 122.20 B   | 3.6           | 0.3
	@ember-data/model/-private/has-many                      | 626.00 B  | 119.16 B   | 3.5           | 0.3
	@ember-data/model/index                                  | 486.00 B  | 92.51 B    | 2.7           | 0.2
	@ember-data/model/-private/util                          | 442.00 B  | 84.13 B    | 2.5           | 0.2
	@ember-data/model/-private/system/promise-belongs-to     | 412.00 B  | 78.42 B    | 2.3           | 0.2
	@ember-data/model/-private/system/model-for-mixin        | 408.00 B  | 77.66 B    | 2.3           | 0.2

Package: ember-data
┌──────────────┬───────────┐
│   (index)    │  Values   │
├──────────────┼───────────┤
│    bytes     │ '9.50 KB' │
│  compressed  │ '1.81 KB' │
│ % Of Library │   '4.6'   │
└──────────────┴───────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	ember-data/index                                  | 2.32 KB   | 452.86 B   | 24.5          | 1.1
	ember-data/-private/index                         | 1.93 KB   | 375.76 B   | 20.3          | 0.9
	ember-data/adapters/errors                        | 1.19 KB   | 231.66 B   | 12.5          | 0.6
	ember-data/setup-container                        | 503.00 B  | 95.74 B    | 5.2           | 0.2
	ember-data/-private/core                          | 321.00 B  | 61.10 B    | 3.3           | 0.2
	ember-data/relationships                          | 318.00 B  | 60.53 B    | 3.3           | 0.2
	ember-data/serializers/embedded-records-mixin     | 274.00 B  | 52.15 B    | 2.8           | 0.1
	ember-data/serializers/json-api                   | 251.00 B  | 47.77 B    | 2.6           | 0.1
	ember-data/adapters/json-api                      | 245.00 B  | 46.63 B    | 2.5           | 0.1
	ember-data/serializers/json                       | 243.00 B  | 46.25 B    | 2.5           | 0.1
	ember-data/serializers/rest                       | 243.00 B  | 46.25 B    | 2.5           | 0.1
	ember-data/transform                              | 241.00 B  | 45.87 B    | 2.5           | 0.1
	ember-data/adapters/rest                          | 237.00 B  | 45.11 B    | 2.4           | 0.1
	ember-data/serializer                             | 232.00 B  | 44.16 B    | 2.4           | 0.1
	ember-data/adapter                                | 226.00 B  | 43.02 B    | 2.3           | 0.1
	ember-data/model                                  | 222.00 B  | 42.25 B    | 2.3           | 0.1
	ember-data/store                                  | 222.00 B  | 42.25 B    | 2.3           | 0.1
	ember-data/attr                                   | 218.00 B  | 41.49 B    | 2.2           | 0.1
	ember-data/version                                | 162.00 B  | 30.83 B    | 1.7           | 0.1

Package: ember-inflector
┌──────────────┬───────────┐
│   (index)    │  Values   │
├──────────────┼───────────┤
│    bytes     │ '6.66 KB' │
│  compressed  │ '1.27 KB' │
│ % Of Library │   '3.2'   │
└──────────────┴───────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	ember-inflector/lib/system/inflector              | 2.88 KB   | 561.36 B   | 43.3          | 1.4
	ember-inflector/lib/system/inflections            | 1.59 KB   | 309.71 B   | 23.9          | 0.8
	ember-inflector/index                             | 473.00 B  | 90.03 B    | 6.9           | 0.2
	ember-inflector/lib/system                        | 471.00 B  | 89.65 B    | 6.9           | 0.2
	ember-inflector/lib/helpers/pluralize             | 373.00 B  | 71.00 B    | 5.5           | 0.2
	ember-inflector/lib/system/string                 | 318.00 B  | 60.53 B    | 4.7           | 0.2
	ember-inflector/lib/utils/make-helper             | 308.00 B  | 58.63 B    | 4.5           | 0.1
	ember-inflector/lib/helpers/singularize           | 296.00 B  | 56.34 B    | 4.3           | 0.1

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

@runspired runspired added this to In Development in 🌲 Project Trim 🌲 via automation Apr 10, 2021
@runspired runspired added performance 🌲 Project Trim 🌲 PRs related to https://github.com/emberjs/data/issues/6166 labels Apr 10, 2021
@emberjs emberjs deleted a comment from github-actions bot Apr 10, 2021
@runspired runspired marked this pull request as ready for review April 10, 2021 08:14
@runspired runspired added this to In Development in 🔌 Project Unplug 🔌 via automation Apr 10, 2021
@runspired runspired changed the title [PERF] Class Fields Use Optimization [PERF] Class Fields Use Optimization & Made OrderedSet Faster (Again) Apr 10, 2021
Copy link
Contributor

@snewcomer snewcomer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Spicy! I like this PR a lot.

@@ -1,22 +1,118 @@
import { assert } from '@ember/debug';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we want a unit test for our own OrderedSet now?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Possibly, but I don't anticipate this lasting more than 2 weeks in the code. We've got a 4.0 deadline to hit.

Copy link
Contributor

@snewcomer snewcomer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the explanations! I wasn't aware of the short term-ndess of the changes here as well but this looks great!

🌲 Project Trim 🌲 automation moved this from In Development to Ready To Ship Apr 11, 2021
🔌 Project Unplug 🔌 automation moved this from In Development to Ready To Ship Apr 11, 2021
@runspired runspired merged commit 5236425 into master Apr 12, 2021
🌲 Project Trim 🌲 automation moved this from Ready To Ship to Completed Apr 12, 2021
🔌 Project Unplug 🔌 automation moved this from Ready To Ship to Completed Apr 12, 2021
@delete-merged-branch delete-merged-branch bot deleted the perf/internal-model branch April 12, 2021 18:37
@runspired runspired added 🏷️ perf PRs that improve performance in a notable way and removed performance labels May 27, 2021
@runspired runspired added this to the 🔌 Unplug milestone 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 Trim 🌲 PRs related to https://github.com/emberjs/data/issues/6166 🔌 Project Unplug 🔌
Projects
Status: Completed
Development

Successfully merging this pull request may close these issues.

None yet

2 participants