Skip to content

perf: use a Set to check element ids when validating fragment links#16494

Merged
teemingc merged 1 commit into
sveltejs:version-3from
Nic-Polumeyv:prerender-hashlink-set
Jul 25, 2026
Merged

perf: use a Set to check element ids when validating fragment links#16494
teemingc merged 1 commit into
sveltejs:version-3from
Nic-Polumeyv:prerender-hashlink-set

Conversation

@Nic-Polumeyv

Copy link
Copy Markdown
Contributor

Prerendering validates each expected fragment link with hashlinks.includes(id) against the target page's array of element ids, which is O(A*L) for A ids and L inbound fragment links. Storing the crawled ids as a Set makes it O(A + L).

Cost for a page with N anchors and N inbound fragment links (Node 22):

N array includes Set (incl. construction)
1,000 21 ms 0.5 ms
4,000 123 ms 0.8 ms
8,000 616 ms 1.7 ms
16,000 1,591 ms 3.8 ms

This mainly benefits large heavily cross-linked prerendered sites such as generated API references.

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. All changesets should be patch until SvelteKit 2.0 (major releases only that fix regressions)

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 c6ad266:

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

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

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 23, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: c6ad266

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

@teemingc teemingc 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.

Thanks

@teemingc
teemingc merged commit 6850fa5 into sveltejs:version-3 Jul 25, 2026
17 of 18 checks passed
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