perf: cache the default cookie header parse and avoid allocations in cookies.get - #16341
Conversation
|
Install the latest version of pnpm add https://pkg.svelte.dev/@sveltejs/kit/c/10a86d2608e7c0094ff8a1e5c2948f1d044c4803Open in Note This PR is from a fork. A maintainer must approve approve each commit before it can be built and installed. |
🦋 Changeset detectedLatest commit: 10a86d2 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
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 |
|
Hey — we really appreciate all the recent contributions, but we're mostly working on the |
|
Not a problem at all with some AI help, sorry for this! Thanks for the heads up. Working on it now |
40f4699 to
10a86d2
Compare
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.9 ### Major Changes - breaking: `handle`'s `resolve` is now typed to always return a `Promise` ([#16352](#16352)) - breaking: replace the `$lib` alias with `#lib` and remove `files.lib` config. ([#16360](#16360)) - breaking: disallow cross-origin form submissions without a `Content-Type` header ([#16347](#16347)) - breaking: Server-only directories (`/server/` in the path) are now treated as server-only everywhere inside the project (except `src/routes` and the assets directory) ([#16360](#16360)) - breaking: delegate CORS handling to Vite for static directory requests during development ([#16357](#16357)) ### Minor Changes - feat: reinstate `$env/static/private`, `$env/dynamic/private`, `$env/static/public`, `$env/dynamic/public` and `$app/environment` as deprecated aliases for `$app/env/private` `$app/env/public` and `$app/env` ([#16334](#16334)) ### Patch Changes - perf: cache the default cookie header parse and avoid allocations in `cookies.get` ([#16341](#16341)) - fix: avoid client-side code being bundled by Cloudflare Wrangler ([#16364](#16364)) - fix: handle rejected streamed server data after delayed loads ([#16268](#16268)) - fix: enable CSRF protection in builds with a non-production `NODE_ENV` value ([#16313](#16313)) ## @sveltejs/package@3.0.0-next.3 ### Minor Changes - feat: transform import aliases into relative imports in files ([#16360](#16360)) ## @sveltejs/adapter-node@6.0.0-next.4 ### Patch Changes - fix: correctly bundle entrypoints on Windows ([#16367](#16367)) - Updated dependencies [[`c1ee782`](c1ee782), [`1a1b3ea`](1a1b3ea), [`6423d98`](6423d98), [`6d1f4f0`](6d1f4f0), [`5ca9906`](5ca9906), [`b148d31`](b148d31), [`5ca9906`](5ca9906), [`9f3d9bb`](9f3d9bb), [`7bfd922`](7bfd922), [`ffa0e3b`](ffa0e3b)]: - @sveltejs/kit@3.0.0-next.9 ## @sveltejs/enhanced-img@1.0.0-next.2 ### Patch Changes - chore: replace the `$lib` alias with `#lib` in docs ([#16360](#16360)) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
closes #16340
get_cookiesparsed the header once but with an identity decode, so everycookies.get()re-parsed the whole header, and also allocated, filtered and sorted an array of locally set cookies even when there were none. No behavior change, three things:opts.decodebypasses the cache, and there is a test pinning that.getis a single pass instead ofArray.from().filter().sort()[0], no allocations, same tie-breaking (first inserted wins, as with the stable sort).getAllcopies the parsed object before merging locally set cookies into it, so the cache is never mutated.Measured on the real
get_cookieswith a realistic ~800B header and fivegetcalls per request: 6.00µs before, 2.98µs after. Parse cost scales linearly with header size, about 1µs per KB.Please don't delete this checklist! Before submitting the PR, please make sure you do the following:
Tests
pnpm testand lint the project withpnpm lintandpnpm checkChangesets
pnpm changesetand following the prompts. Changesets that add features should beminorand those that fix bugs should bepatch. Please prefix changeset messages withfeat:,fix:, orchore:.Edits