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: optimize factory.create #8140

Merged
merged 4 commits into from
Aug 22, 2022
Merged

perf: optimize factory.create #8140

merged 4 commits into from
Aug 22, 2022

Conversation

runspired
Copy link
Contributor

Ports @ember-data/model init optimizations from #8134. Same as #8139 this is to ensure that the benchmark for that PR is as close as possible to "just the cost of moving to proxies"

@runspired runspired added 🎯 canary PR is targeting canary (default) 🏷️ perf PRs that improve performance in a notable way labels Aug 21, 2022
@github-actions
Copy link

github-actions bot commented Aug 21, 2022

Asset Size Report for a688b84

Modern Builds

EmberData increased by -69.0 B (+23.0 B compressed) which is within the allowed tolerance of 75 bytes uncompressed

Warnings

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

Changeset


EmberData +168.88 KB +69.0 B (+35.34 KB +23.0 B compressed)
    @ember-data/store +46.9 KB +22.0 B (+9.81 KB +7.33 B compressed)
        @ember-data/store/-private +45.9 KB +22.0 B (+9.61 KB +7.33 B compressed)
    @ember-data/model +45.4 KB +47.0 B (+9.5 KB +15.67 B compressed)
        @ember-data/model/-private +44.93 KB +47.0 B (+9.4 KB +15.67 B compressed)

Full Asset Analysis (Modern)

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


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

Package: @ember-data/store
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '46.90 KB' │
│  compressed  │ '9.81 KB'  │
│ % Of Library │   '27.8'   │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/store/-private                        | 45.90 KB  | 9.61 KB    | 97.9          | 27.2
	@ember-data/store/index                           | 1022.00 B | 213.89 B   | 2.1           | 0.6

Package: @ember-data/model
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '45.40 KB' │
│  compressed  │ '9.50 KB'  │
│ % Of Library │   '26.9'   │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/model/-private                        | 44.93 KB  | 9.40 KB    | 99.0          | 26.6
	@ember-data/model/index                           | 486.00 B  | 101.71 B   | 1.0           | 0.3

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

Package: @ember-data/serializer
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '20.42 KB' │
│  compressed  │ '4.27 KB'  │
│ % Of Library │   '12.1'   │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/serializer/json                       | 7.36 KB   | 1.54 KB    | 36.0          | 4.4
	@ember-data/serializer/-private                   | 5.60 KB   | 1.17 KB    | 27.4          | 3.3
	@ember-data/serializer/json-api                   | 3.79 KB   | 812.25 B   | 18.6          | 2.2
	@ember-data/serializer/rest                       | 2.87 KB   | 614.05 B   | 14.0          | 1.7
	@ember-data/serializer/index                      | 611.00 B  | 127.87 B   | 2.9           | 0.4
	@ember-data/serializer/transform                  | 215.00 B  | 44.99 B    | 1.0           | 0.1

Package: @ember-data/adapter
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '15.93 KB' │
│  compressed  │ '3.33 KB'  │
│ % Of Library │   '9.4'    │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/adapter/rest                          | 7.88 KB   | 1.65 KB    | 49.5          | 4.7
	@ember-data/adapter/-private                      | 3.79 KB   | 811.20 B   | 23.8          | 2.2
	@ember-data/adapter/error                         | 1.82 KB   | 390.53 B   | 11.4          | 1.1
	@ember-data/adapter/index                         | 1.41 KB   | 302.63 B   | 8.9           | 0.8
	@ember-data/adapter/json-api                      | 1.03 KB   | 221.63 B   | 6.5           | 0.6

Package: ember-data
┌──────────────┬───────────┐
│   (index)    │  Values   │
├──────────────┼───────────┤
│    bytes     │ '8.55 KB' │
│  compressed  │ '1.79 KB' │
│ % Of Library │   '5.1'   │
└──────────────┴───────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	ember-data/index                                  | 2.08 KB   | 444.94 B   | 24.3          | 1.2
	ember-data/-private                               | 1.67 KB   | 357.88 B   | 19.5          | 1.0
	ember-data/adapters/errors                        | 1.19 KB   | 254.70 B   | 13.9          | 0.7
	ember-data/setup-container                        | 368.00 B  | 77.01 B    | 4.2           | 0.2
	ember-data/relationships                          | 318.00 B  | 66.55 B    | 3.6           | 0.2
	ember-data/serializers/embedded-records-mixin     | 274.00 B  | 57.34 B    | 3.1           | 0.2
	ember-data/serializers/json-api                   | 251.00 B  | 52.53 B    | 2.9           | 0.1
	ember-data/adapters/json-api                      | 245.00 B  | 51.27 B    | 2.8           | 0.1
	ember-data/serializers/json                       | 243.00 B  | 50.85 B    | 2.8           | 0.1
	ember-data/serializers/rest                       | 243.00 B  | 50.85 B    | 2.8           | 0.1
	ember-data/transform                              | 241.00 B  | 50.43 B    | 2.8           | 0.1
	ember-data/adapters/rest                          | 237.00 B  | 49.60 B    | 2.7           | 0.1
	ember-data/serializer                             | 232.00 B  | 48.55 B    | 2.7           | 0.1
	ember-data/adapter                                | 226.00 B  | 47.29 B    | 2.6           | 0.1
	ember-data/model                                  | 222.00 B  | 46.46 B    | 2.5           | 0.1
	ember-data/store                                  | 222.00 B  | 46.46 B    | 2.5           | 0.1
	ember-data/attr                                   | 218.00 B  | 45.62 B    | 2.5           | 0.1
	ember-data/version                                | 161.00 B  | 33.69 B    | 1.8           | 0.1

Package: ember-inflector
┌──────────────┬───────────┐
│   (index)    │  Values   │
├──────────────┼───────────┤
│    bytes     │ '6.67 KB' │
│  compressed  │ '1.40 KB' │
│ % Of Library │   '3.9'   │
└──────────────┴───────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	ember-inflector/lib/system/inflector              | 2.96 KB   | 634.98 B   | 44.4          | 1.8
	ember-inflector/lib/system/inflections            | 1.59 KB   | 340.51 B   | 23.8          | 0.9
	ember-inflector/lib/system                        | 471.00 B  | 98.57 B    | 6.9           | 0.3
	ember-inflector/index                             | 379.00 B  | 79.32 B    | 5.6           | 0.2
	ember-inflector/lib/helpers/pluralize             | 369.00 B  | 77.22 B    | 5.4           | 0.2
	ember-inflector/lib/utils/make-helper             | 332.00 B  | 69.48 B    | 4.9           | 0.2
	ember-inflector/lib/system/string                 | 318.00 B  | 66.55 B    | 4.7           | 0.2
	ember-inflector/lib/helpers/singularize           | 296.00 B  | 61.94 B    | 4.3           | 0.2

Package: @ember-data/debug
┌──────────────┬────────────┐
│   (index)    │   Values   │
├──────────────┼────────────┤
│    bytes     │ '2.77 KB'  │
│  compressed  │ '592.91 B' │
│ % Of Library │   '1.6'    │
└──────────────┴────────────┘
	Module                                            | Bytes     | Compressed | % of Package  | % Of Library
	-----------------------------------------------------------------------------------------------------
	@ember-data/debug/index                           | 2.27 KB   | 487.22 B   | 82.2          | 1.3
	@ember-data/debug/setup                           | 505.00 B  | 105.68 B   | 17.8          | 0.3

Modern Builds (No Rollup)

☑️ EmberData has not changed in size

If any packages had changed sizes they would be listed here.

Changeset



Full Asset Analysis (Modern)

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


Library: EmberData
┌────────────┬──────────┐
│  (index)   │  Values  │
├────────────┼──────────┤
│   bytes    │ '0.00 B' │
│ compressed │ '1.00 B' │
│  packages  │    0     │
│  modules   │    0     │
└────────────┴──────────┘

@github-actions
Copy link

Performance Report for a688b84

Scenario - basic-record-materialization: ✅ Performance improved

✅ duration
phase estimated improvement -175ms [-192ms to -155ms] OR -4.71% [-5.15% to -4.17%]
☑️ Phase [navigationStart] => [start-data-generation]
phase no difference [-3ms to 3ms]
☑️ Phase [start-data-generation] => [start-push-payload]
phase no difference [-1ms to 2ms]
☑️ Phase [start-push-payload] => [start-peek-records]
phase no difference [-17ms to 1ms]
☑️ Phase [start-peek-records] => [start-record-materialization]
phase no difference [0ms to 0ms]
✅ Phase [start-record-materialization] => [end-record-materialization]
phase estimated improvement -165ms [-172ms to -158ms] OR -18.2% [-18.99% to -17.46%]
☑️ Phase [end-record-materialization] => [Test End]
phase no difference [0ms to 0ms]

Scenario - relationship-materialization-simple: ✅ Performance improved

✅ duration
phase estimated improvement -22ms [-32ms to -13ms] OR -2.18% [-3.16% to -1.3%]
☑️ Phase [navigationStart] => [start-find-all]
phase no difference [-3ms to 2ms]
☑️ Phase [start-find-all] => [start-materialization]
phase no difference [-3ms to 3ms]
✅ Phase [start-materialization] => [end-materialization]
phase estimated improvement -17ms [-21ms to -14ms] OR -5.33% [-6.34% to -4.34%]
☑️ Phase [end-materialization] => [Test End]
phase no difference [0ms to 0ms]

Scenario - relationship-materialization-complex: ✅ Performance improved

✅ duration
phase estimated improvement -95ms [-123ms to -66ms] OR -1.83% [-2.37% to -1.28%]
☑️ Phase [navigationStart] => [start-data-generation]
phase no difference [-3ms to 2ms]
⚠️ Phase [start-data-generation] => [start-push-payload]
phase estimated regression +1ms [0ms to 2ms] OR +0.57% [0.18% to 1.01%]
✅ Phase [start-push-payload] => [start-peek-records]
phase estimated improvement -5ms [-9ms to 0ms] OR -0.45% [-0.86% to -0.03%]
☑️ Phase [start-peek-records] => [start-record-materialization]
phase no difference [0ms to 0ms]
✅ Phase [start-record-materialization] => [start-relationship-materialization]
phase estimated improvement -98ms [-101ms to -94ms] OR -23.92% [-24.71% to -23.09%]
☑️ Phase [start-relationship-materialization] => [end-relationship-materialization]
phase no difference [-22ms to 30ms]
☑️ Phase [end-relationship-materialization] => [Test End]
phase no difference [-3ms to 6ms]

Scenario - unload: ☑️ Performance is stable

☑️ duration
phase no difference [-16ms to 2ms]
☑️ Phase [navigationStart] => [start-push-payload]
phase no difference [-5ms to 2ms]
☑️ Phase [start-push-payload] => [start-unload-records]
phase no difference [-7ms to 1ms]
✅ Phase [start-unload-records] => [end-unload-records]
phase estimated improvement -2ms [-4ms to -1ms] OR -1.3% [-2.01% to -0.6%]
☑️ Phase [end-unload-records] => [Test End]
phase no difference [0ms to 0ms]

Scenario - unload-all: ✅ Performance improved

✅ duration
phase estimated improvement -90ms [-104ms to -77ms] OR -3.14% [-3.6% to -2.67%]
☑️ Phase [navigationStart] => [start-push-payload]
phase no difference [-5ms to 2ms]
✅ Phase [start-push-payload] => [start-materialization]
phase estimated improvement -6ms [-13ms to 0ms] OR -0.49% [-0.99% to -0.02%]
✅ Phase [start-materialization] => [start-unload-all]
phase estimated improvement -97ms [-102ms to -93ms] OR -17.15% [-17.95% to -16.29%]
⚠️ Phase [start-unload-all] => [end-unload-all]
phase estimated regression +15ms [12ms to 19ms] OR +3.55% [2.67% to 4.42%]
☑️ Phase [end-unload-all] => [Test End]
phase no difference [0ms to 0ms]

Scenario - destroy: ☑️ Performance is stable

☑️ duration
phase no difference [-8ms to 9ms]
☑️ Phase [navigationStart] => [start-push-payload]
phase no difference [-4ms to 3ms]
☑️ Phase [start-push-payload] => [start-destroy-records]
phase no difference [-2ms to 4ms]
☑️ Phase [start-destroy-records] => [end-destroy-records]
phase no difference [-3ms to 1ms]
☑️ Phase [end-destroy-records] => [Test End]
phase no difference [0ms to 0ms]

Scenario - add-children: ☑️ Performance is stable

☑️ duration
phase no difference [-8ms to 9ms]
☑️ Phase [navigationStart] => [start-push-initial-payload]
phase no difference [-3ms to 9ms]
✅ Phase [start-push-initial-payload] => [start-push-update-payload]
phase estimated improvement -3ms [-6ms to -1ms] OR -1.43% [-2.45% to -0.58%]
☑️ Phase [start-push-update-payload] => [end-push-update-payload]
phase no difference [-3ms to 1ms]
☑️ Phase [end-push-update-payload] => [Test End]
phase no difference [0ms to 0ms]

Scenario - unused-relationships: ☑️ Performance is stable

☑️ duration
phase no difference [-11ms to 5ms]
☑️ Phase [navigationStart] => [start-push-payload]
phase no difference [-5ms to 2ms]
☑️ Phase [start-push-payload] => [end-push-payload]
phase no difference [-6ms to 1ms]
☑️ Phase [end-push-payload] => [Test End]
phase no difference [0ms to 0ms]

@runspired runspired merged commit ba1f566 into master Aug 22, 2022
@delete-merged-branch delete-merged-branch bot deleted the perf/optimize-init branch August 22, 2022 01:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🎯 canary PR is targeting canary (default) 🏷️ perf PRs that improve performance in a notable way
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant