Skip to content

chore: simplify updates #10922

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

Merged
merged 15 commits into from
Mar 25, 2024
Merged

chore: simplify updates #10922

merged 15 commits into from
Mar 25, 2024

Conversation

Rich-Harris
Copy link
Member

We can make our lives a lot simpler by replacing this...

$.text_effect(text, () => $.get(foo));

...with this:

$.render_effect(() => $.text(text, $.get(foo)));

That might seem like a step backwards, but after minification it's a very minor difference of 3 bytes...

-a(b,()=>c(d));
+a(()=>b(c,d(e)));

...and we're able to get rid of the text_effect function which minifies to 32 bytes (function a(b,c){d(()=>e(b,c()))}), and which involves more function calls and more stuff that needs to be warmed up. The same is true for other foo_effect functions like style_effect and class_toggle_effect and so on (with more to come, hence draft status).

Most significantly, it allows us to get rid of the distinction between 'singular' and 'grouped' updates in template.js:

// singular update, because `somefunction` could be expensive
-$.text_effect(text, () => somefunction($.get(x)));
+$.render_effect(() => $.text(text, somefunction($.get(x))));

// grouped updates, because we know these are cheap
$.render_effect(() => {
  $.text(text_1, $.get(y));
  $.text(text_2, $.get(z));
});

This results in a fairly substantial simplification of the compiler.

Before submitting the PR, please make sure you do the following

  • It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs
  • Prefix your PR title with feat:, fix:, chore:, or docs:.
  • This message body should clearly illustrate what problems it solves.
  • Ideally, include a test that fails without this PR but passes with it.

Tests and linting

  • Run the tests with pnpm test and lint the project with pnpm lint

Copy link

changeset-bot bot commented Mar 25, 2024

⚠️ No Changeset found

Latest commit: 7c56aa2

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@Rich-Harris Rich-Harris merged commit ed2981d into main Mar 25, 2024
@Rich-Harris Rich-Harris deleted the simplify-updates branch March 25, 2024 21:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants