Skip to content

perf: skip import graph collection outside client environments - #16383

Merged
Rich-Harris merged 1 commit into
sveltejs:version-3from
Nic-Polumeyv:perf-guard-skip-non-client-env
Jul 17, 2026
Merged

perf: skip import graph collection outside client environments#16383
Rich-Harris merged 1 commit into
sveltejs:version-3from
Nic-Polumeyv:perf-guard-skip-non-client-env

Conversation

@Nic-Polumeyv

Copy link
Copy Markdown
Contributor

Addresses part of #15461

vite-plugin-sveltekit-guard builds its import_map in every environment, but the map is only read in the load hook, which bails for non-client consumers before touching it. On the svelte.dev build that makes 69% of the guard's resolveId calls (3,987 of 5,778) dead work, and the guard was the top entry in dominikg's PLUGIN_TIMINGS report in #13756. This adds the same consumer bail to resolveId.

The error chains from #14155 are unaffected because the client environment collects its own edges. Measured on the svelte.dev build with 3.0.0-next.6 and vite 8.0.16 (details in #15461 (comment)), ssr-side hook time drops from ~296s cumulative to 23ms, the build succeeds, and a planted two-hop $lib/server violation still fails with the full chain. There is no new test because the behavior is meant to be unobservable and the exact chain assertions already exist in test/apps/dev-only (dev) and test/build-errors/server-only.spec.js (build), both green with this change.

History for reviewers. #15439 added hook filters everywhere except this hook, which is blocked on vitejs/vite#21956. #15543 proposed this skip plus a node_modules importer skip and was closed pending kit 3. The ssr half was not fixed by kit 3. The node_modules half is not implemented here because it is unsafe, a library can legitimately import $app/server and its violation chain has to walk node_modules edges.


Please don't delete this checklist! 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
  • This message body should clearly illustrate what problems it solves.
  • Ideally, include a test that fails without this PR but passes with it.

Tests

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

Changesets

  • If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running pnpm changeset and following the prompts. Changesets that add features should be minor and those that fix bugs should be patch. Please prefix changeset messages with feat:, fix:, or chore:.

Edits

  • Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed.

@pkg-svelte-dev

Copy link
Copy Markdown

Install the latest version of @sveltejs/kit from 1ae3a5c:

pnpm add https://pkg.svelte.dev/@sveltejs/kit/c/1ae3a5c9286ca84219a1f8f6f200689f2d9a934e

Open in pkg.svelte.dev: https://pkg.svelte.dev/repos/kit/pr/16383

Note

This PR is from a fork. A maintainer must approve approve each commit before it can be built and installed.

@changeset-bot

changeset-bot Bot commented Jul 17, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1ae3a5c

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@sveltejs/kit Patch

Not sure what this means? Click here to learn what changesets are.

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

@Rich-Harris Rich-Harris left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

this is great, thank you!

@Rich-Harris
Rich-Harris merged commit c026206 into sveltejs:version-3 Jul 17, 2026
17 of 18 checks passed
Rich-Harris pushed a commit that referenced this pull request Jul 17, 2026
follow up to #16383

Using `applyToEnvironment` is better here as the plugin isn't needed in
the server environment if we're already using an `if (...)` guard to opt
out early
teemingc pushed a commit that referenced this pull request Jul 18, 2026
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to version-3, this PR
will be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

`version-3` is currently in **pre mode** so this branch has prereleases
rather than normal releases. If you want to exit prereleases, run
`changeset pre exit` on `version-3`.

⚠️⚠️⚠️⚠️⚠️⚠️

# Releases
## @sveltejs/kit@3.0.0-next.10

### Major Changes

- breaking: move `defineEnvVars` to `@sveltejs/kit/env`
([#16375](#16375))

### Patch Changes

- fix: treat `data:` protocol URLs as external for redirect
([#16392](#16392))

- perf: skip import graph collection outside client environments
([#16383](#16383))

- fix: warn if there are plugins using `transformIndexHtml`
([#16394](#16394))

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@Nic-Polumeyv
Nic-Polumeyv deleted the perf-guard-skip-non-client-env branch July 30, 2026 22:53
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