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

2.x part #2 - Split existing behaviors into lazily loaded chunks #116

Merged
merged 4 commits into from
Jun 3, 2021

Conversation

symbioquine
Copy link
Collaborator

Note: This is intended to be merged to a new 2.x branch after #114. Unfortunately, the diff includes the changes from that PR and the prerequisite PR #112 since stacked pull requests don't work across forks on Github.

Why? Make farmOS-map more modular and efficient without drastically changing its interface or feature set.

Note: This is a breaking change though because it makes the existing behaviors load asynchronously so properties like instance.edit won't get populated until the behavior has loaded and done so.

@@ -31,9 +31,6 @@ import {
// Import Geolocate control.
import Geolocate from '../control/Geolocate/Geolocate';

// Import farmOS-map behaviors.
import rememberLayer from '../behavior/rememberLayer';

// Define an object that contains the default layers, controls, interactions,
// and behaviors that will be added to all farmOS maps.
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

will fix

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Specifically, I'm going to update this comment to communicate more clearly that the "defaults" in this file are default OpenLayers controls/interactions and not incorrectly mention behaviors.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I'm planning to force-push to update the PR and keep the commit history simpler and more ready-to-merge, but the change to this comment is going to be;

diff --git a/src/instance/defaults.js b/src/instance/defaults.js
index bacbbfe..6764831 100644
--- a/src/instance/defaults.js
+++ b/src/instance/defaults.js
@@ -31,8 +31,8 @@ import {
 // Import Geolocate control.
 import Geolocate from '../control/Geolocate/Geolocate';
 
-// Define an object that contains the default layers, controls, interactions,
-// and behaviors that will be added to all farmOS maps.
+// Define an object that contains the default OpenLayers configuration of layers,
+// controls, and interactions that will be added to all farmOS maps.
 const defaults = {
 
   // Layers.

@symbioquine symbioquine force-pushed the 2.x-part2-async-behavior-loading branch from a9f1aa1 to de9f907 Compare June 3, 2021 18:02
…armOS#112

**Why?** Establish a baseline for how farmOS-map performs with the
current 1.x build. This will make it possible to tell whether
proposed future changes make farmOS-map's performance better or worse.

```sh
$ npm test

> farmos-map-examples-root@0.0.0 test
> rm -rf **/perfData/* && jest test/index.spec.js --maxWorkers=1

 PASS  test/index.spec.js (1239.458 s)
  minimal-html-consumer
    ✓ should build (8392 ms)
    get metrics from 10 perf.test.js runs
      ✓ minimal-html-consumer run #0 (36467 ms)
      ✓ minimal-html-consumer run #1 (35982 ms)
      ✓ minimal-html-consumer run farmOS#2 (36179 ms)
      ✓ minimal-html-consumer run farmOS#3 (36566 ms)
      ✓ minimal-html-consumer run farmOS#4 (36226 ms)
      ✓ minimal-html-consumer run farmOS#5 (35367 ms)
      ✓ minimal-html-consumer run farmOS#6 (35738 ms)
      ✓ minimal-html-consumer run farmOS#7 (35843 ms)
      ✓ minimal-html-consumer run farmOS#8 (36533 ms)
      ✓ minimal-html-consumer run farmOS#9 (35015 ms)
  simple-html-consumer
    ✓ should build (8166 ms)
    get metrics from 10 perf.test.js runs
      ✓ simple-html-consumer run #0 (42998 ms)
      ✓ simple-html-consumer run #1 (42986 ms)
      ✓ simple-html-consumer run farmOS#2 (44794 ms)
      ✓ simple-html-consumer run farmOS#3 (42317 ms)
      ✓ simple-html-consumer run farmOS#4 (42581 ms)
      ✓ simple-html-consumer run farmOS#5 (42097 ms)
      ✓ simple-html-consumer run farmOS#6 (42674 ms)
      ✓ simple-html-consumer run farmOS#7 (43826 ms)
      ✓ simple-html-consumer run farmOS#8 (42665 ms)
      ✓ simple-html-consumer run farmOS#9 (42041 ms)
  extended-behavior
    ✓ should build (10391 ms)
    get metrics from 10 perf.test.js runs
      ✓ extended-behavior run #0 (42462 ms)
      ✓ extended-behavior run #1 (42358 ms)
      ✓ extended-behavior run farmOS#2 (42340 ms)
      ✓ extended-behavior run farmOS#3 (41896 ms)
      ✓ extended-behavior run farmOS#4 (42412 ms)
      ✓ extended-behavior run farmOS#5 (41932 ms)
      ✓ extended-behavior run farmOS#6 (42316 ms)
      ✓ extended-behavior run farmOS#7 (42584 ms)
      ✓ extended-behavior run farmOS#8 (42611 ms)
      ✓ extended-behavior run farmOS#9 (42234 ms)

  console.log
    {
      'minimal-html-consumer/Regular4G-uncached': {
        'first-contentful-paint': 446.90000002384187,
        'nav-to-net-idle': 1512.1465719461441,
        'js-resource-count': 1,
        'js-resource-total-transfer-bytes': 142388,
        'js-resource-total-decoded-bytes': 566734
      },
      'minimal-html-consumer/SlowCPU-uncached': {
        'first-contentful-paint': 492.09000000953677,
        'nav-to-net-idle': 1706.3178470849991,
        'js-resource-count': 1,
        'js-resource-total-transfer-bytes': 142388,
        'js-resource-total-decoded-bytes': 566734
      },
      'minimal-html-consumer/Unthrottled-uncached': {
        'first-contentful-paint': 183.65999999046326,
        'nav-to-net-idle': 1374.6113351106644,
        'js-resource-count': 1,
        'js-resource-total-transfer-bytes': 142388,
        'js-resource-total-decoded-bytes': 566734
      },
      'minimal-html-consumer/Regular2G-uncached': {
        'first-contentful-paint': 5213.679999971389,
        'nav-to-net-idle': 8806.243415784837,
        'js-resource-count': 1,
        'js-resource-total-transfer-bytes': 142388,
        'js-resource-total-decoded-bytes': 566734
      },
      'minimal-html-consumer/Unthrottled-cached': {
        'first-contentful-paint': 122.57000005245209,
        'nav-to-net-idle': 971.3543920755386,
        'js-resource-count': 1,
        'js-resource-total-transfer-bytes': 0,
        'js-resource-total-decoded-bytes': 566734
      },
      'minimal-html-consumer/Regular4G-cached': {
        'first-contentful-paint': 124.43000001907349,
        'nav-to-net-idle': 970.4835140228272,
        'js-resource-count': 1,
        'js-resource-total-transfer-bytes': 0,
        'js-resource-total-decoded-bytes': 566734
      },
      'minimal-html-consumer/SlowCPU-cached': {
        'first-contentful-paint': 530.1500000238418,
        'nav-to-net-idle': 2080.892780327797,
        'js-resource-count': 1,
        'js-resource-total-transfer-bytes': 0,
        'js-resource-total-decoded-bytes': 566734
      },
      'minimal-html-consumer/Regular2G-cached': {
        'first-contentful-paint': 130.1899999856949,
        'nav-to-net-idle': 2055.8916233778,
        'js-resource-count': 1,
        'js-resource-total-transfer-bytes': 0,
        'js-resource-total-decoded-bytes': 566734
      },
      'minimal-html-consumer/DSL-uncached': {
        'first-contentful-paint': 672.9100000143051,
        'nav-to-net-idle': 2104.5823947668077,
        'js-resource-count': 1,
        'js-resource-total-transfer-bytes': 142388,
        'js-resource-total-decoded-bytes': 566734
      },
      'minimal-html-consumer/DSL-cached': {
        'first-contentful-paint': 129.41999998092652,
        'nav-to-net-idle': 972.6821264743805,
        'js-resource-count': 1,
        'js-resource-total-transfer-bytes': 0,
        'js-resource-total-decoded-bytes': 566734
      },
      'simple-html-consumer/DSL-uncached': {
        'first-contentful-paint': 877.7100001096726,
        'nav-to-net-idle': 2393.6956593513487,
        'js-resource-count': 7,
        'js-resource-total-transfer-bytes': 147957,
        'js-resource-total-decoded-bytes': 579733
      },
      'simple-html-consumer/Regular2G-uncached': {
        'first-contentful-paint': 6718.77999997139,
        'nav-to-net-idle': 14342.337829470634,
        'js-resource-count': 7,
        'js-resource-total-transfer-bytes': 147957,
        'js-resource-total-decoded-bytes': 579733
      },
      'simple-html-consumer/Regular4G-cached': {
        'first-contentful-paint': 164.4800000190735,
        'nav-to-net-idle': 1156.7266651630403,
        'js-resource-count': 7,
        'js-resource-total-transfer-bytes': 0,
        'js-resource-total-decoded-bytes': 579733
      },
      'simple-html-consumer/Unthrottled-cached': {
        'first-contentful-paint': 153.54999997615815,
        'nav-to-net-idle': 1055.5395266771316,
        'js-resource-count': 7,
        'js-resource-total-transfer-bytes': 0,
        'js-resource-total-decoded-bytes': 579733
      },
      'simple-html-consumer/SlowCPU-cached': {
        'first-contentful-paint': 775.8299999475479,
        'nav-to-net-idle': 2235.711291909218,
        'js-resource-count': 7,
        'js-resource-total-transfer-bytes': 0,
        'js-resource-total-decoded-bytes': 579733
      },
      'simple-html-consumer/Regular2G-cached': {
        'first-contentful-paint': 151.5399999141693,
        'nav-to-net-idle': 1685.8383747816085,
        'js-resource-count': 7,
        'js-resource-total-transfer-bytes': 0,
        'js-resource-total-decoded-bytes': 579733
      },
      'simple-html-consumer/SlowCPU-uncached': {
        'first-contentful-paint': 750.6200000286102,
        'nav-to-net-idle': 2078.0361548185347,
        'js-resource-count': 7,
        'js-resource-total-transfer-bytes': 147957,
        'js-resource-total-decoded-bytes': 579733
      },
      'simple-html-consumer/Regular4G-uncached': {
        'first-contentful-paint': 552.9100000143051,
        'nav-to-net-idle': 1738.50921125412,
        'js-resource-count': 7.1,
        'js-resource-total-transfer-bytes': 147957,
        'js-resource-total-decoded-bytes': 579733
      },
      'simple-html-consumer/DSL-cached': {
        'first-contentful-paint': 158.12000012397766,
        'nav-to-net-idle': 1152.6239531278611,
        'js-resource-count': 7,
        'js-resource-total-transfer-bytes': 0,
        'js-resource-total-decoded-bytes': 579733
      },
      'simple-html-consumer/Unthrottled-uncached': {
        'first-contentful-paint': 424.30000004768374,
        'nav-to-net-idle': 1665.9948377847672,
        'js-resource-count': 7,
        'js-resource-total-transfer-bytes': 147957,
        'js-resource-total-decoded-bytes': 579733
      },
      'extended-behavior/Unthrottled-uncached': {
        'first-contentful-paint': 374.8199999332428,
        'nav-to-net-idle': 1389.9896256446839,
        'js-resource-count': 8,
        'js-resource-total-transfer-bytes': 149230,
        'js-resource-total-decoded-bytes': 581207
      },
      'extended-behavior/Regular2G-uncached': {
        'first-contentful-paint': 6742.35999994278,
        'nav-to-net-idle': 14359.734034967423,
        'js-resource-count': 8,
        'js-resource-total-transfer-bytes': 149230,
        'js-resource-total-decoded-bytes': 581207
      },
      'extended-behavior/Unthrottled-cached': {
        'first-contentful-paint': 145.82000002861022,
        'nav-to-net-idle': 955.8867040157318,
        'js-resource-count': 8,
        'js-resource-total-transfer-bytes': 0,
        'js-resource-total-decoded-bytes': 581207
      },
      'extended-behavior/Regular2G-cached': {
        'first-contentful-paint': 150.2199999809265,
        'nav-to-net-idle': 1660.2450085639953,
        'js-resource-count': 8,
        'js-resource-total-transfer-bytes': 0,
        'js-resource-total-decoded-bytes': 581207
      },
      'extended-behavior/SlowCPU-uncached': {
        'first-contentful-paint': 758.5700000286103,
        'nav-to-net-idle': 2088.9999500274657,
        'js-resource-count': 8,
        'js-resource-total-transfer-bytes': 149230,
        'js-resource-total-decoded-bytes': 581207
      },
      'extended-behavior/Regular4G-uncached': {
        'first-contentful-paint': 566.8199999332428,
        'nav-to-net-idle': 1697.445786523819,
        'js-resource-count': 8,
        'js-resource-total-transfer-bytes': 149230,
        'js-resource-total-decoded-bytes': 581207
      },
      'extended-behavior/SlowCPU-cached': {
        'first-contentful-paint': 810.9900000572204,
        'nav-to-net-idle': 2215.839546537399,
        'js-resource-count': 8,
        'js-resource-total-transfer-bytes': 0,
        'js-resource-total-decoded-bytes': 581207
      },
      'extended-behavior/DSL-uncached': {
        'first-contentful-paint': 899.310000038147,
        'nav-to-net-idle': 2403.841999006271,
        'js-resource-count': 8,
        'js-resource-total-transfer-bytes': 149230,
        'js-resource-total-decoded-bytes': 581207
      },
      'extended-behavior/Regular4G-cached': {
        'first-contentful-paint': 151.94000000953673,
        'nav-to-net-idle': 1047.6097763061523,
        'js-resource-count': 8,
        'js-resource-total-transfer-bytes': 0,
        'js-resource-total-decoded-bytes': 581207
      },
      'extended-behavior/DSL-cached': {
        'first-contentful-paint': 154.07999997138978,
        'nav-to-net-idle': 1070.1390951633452,
        'js-resource-count': 8,
        'js-resource-total-transfer-bytes': 0,
        'js-resource-total-decoded-bytes': 581207
      }
    }

      at Object.<anonymous> (test/index.spec.js:78:11)

Test Suites: 1 passed, 1 total
Tests:       33 passed, 33 total
Snapshots:   0 total
Time:        1239.846 s, estimated 1392 s
Ran all test suites matching /test\/index.spec.js/i.
```
…#116

**Why?** Subsequent changes will need to leverage non-top-level
import() statements and the old version of eslint/emca did
not support that.
**Why?** Make farmOS-map more modular and efficient without
drastically changing its interface or feature set.

*Note: This **is** a breaking change though because it
makes the existing behaviors load asynchronously so
properties like `instance.edit` won't get populated
until the behavior has loaded and done so.*
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants