From 56992858c00513f5ee95025a55a20cea8c4b5f72 Mon Sep 17 00:00:00 2001 From: Nolan Lawson Date: Sun, 17 Dec 2023 12:28:46 -0800 Subject: [PATCH] perf: replace Svelte with vanilla JS (#381) --- .gitignore | 2 - CONTRIBUTING.md | 29 +- README.md | 15 +- bin/bundlesize.js | 4 +- config/minifyHtmlInJest.js | 9 + config/svelte.config.js | 5 - jest.config.cjs | 16 +- package.json | 12 +- rollup.config.js | 97 +- shims/svelte-v3-shim.js | 9 - src/picker/PickerElement.js | 12 +- src/picker/components/Picker/Picker.html | 197 --- src/picker/components/Picker/Picker.js | 1225 +++++++++-------- src/picker/components/Picker/Picker.svelte | 2 - .../components/Picker/PickerTemplate.js | 258 ++++ src/picker/components/Picker/framework.js | 314 +++++ src/picker/components/Picker/reactivity.js | 103 ++ src/picker/components/Picker/utils.js | 25 + src/picker/groups.js | 3 +- src/picker/utils/arraysAreEqualByFunction.js | 12 + src/picker/utils/queueMicrotask.js | 3 + src/picker/utils/resetScrollTopIfPossible.js | 3 +- src/picker/utils/widthCalculator.js | 13 +- svelte.js | 4 + test/spec/picker/Picker.test.js | 23 + test/spec/picker/framework.test.js | 127 ++ yarn.lock | 299 ++-- 27 files changed, 1766 insertions(+), 1055 deletions(-) create mode 100644 config/minifyHtmlInJest.js delete mode 100644 config/svelte.config.js delete mode 100644 shims/svelte-v3-shim.js delete mode 100644 src/picker/components/Picker/Picker.html delete mode 100644 src/picker/components/Picker/Picker.svelte create mode 100644 src/picker/components/Picker/PickerTemplate.js create mode 100644 src/picker/components/Picker/framework.js create mode 100644 src/picker/components/Picker/reactivity.js create mode 100644 src/picker/components/Picker/utils.js create mode 100644 src/picker/utils/arraysAreEqualByFunction.js create mode 100644 src/picker/utils/queueMicrotask.js create mode 100644 svelte.js create mode 100644 test/spec/picker/framework.test.js diff --git a/.gitignore b/.gitignore index d934c5c..651ce13 100644 --- a/.gitignore +++ b/.gitignore @@ -123,8 +123,6 @@ dist /trimEmojiData.js.map /trimEmojiData.cjs /trimEmojiData.cjs.map -/svelte.js -/svelte.js.map /docs-tmp /ts-tmp diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5c365da..5dc1912 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -59,15 +59,32 @@ Build the GitHub Pages docs site: Some explanations of why the code is structured the way it is, in case it's confusing. -### Why is it one big Svelte component? +### Why a custom framework? -When you build Svelte components with `customElement: true`, it makes _each individual component_ into a web component. This can be bad for perf reasons (lots of repetition, [constructible stylesheets](https://wicg.github.io/construct-stylesheets/) aren't a thing yet, event and prop overhead) as well as correctness reasons (e.g. I want an `
  • ` inside of a `