chore(prefetch): disable link prefetching on slow internet connections#15885
Conversation
🦋 Changeset detectedLatest commit: a960557 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 |
37226b6 to
db79bd9
Compare
| // @ts-expect-error this isn't supported everywhere yet | ||
| if (!navigator.connection?.saveData) { | ||
| if (!navigator.connection?.saveData && !/2g/.test(navigator.connection?.effectiveType)) { | ||
| setup_preload(); |
There was a problem hiding this comment.
Maybe something for the future: if the preload could be enabled/disabled (instead of just enabled once), we could use the change event on navigator.connection (docs) to toggle it dynamically (e.g. connection suddenly becomes slow or user switches to/from a WiFi hotspot from a mobile device).
There was a problem hiding this comment.
Related #14917
EDIT: Compatibility doesn't seem quite there yet but it should benefit a large number of android/chrome users https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/change_event#browser_compatibility
teemingc
left a comment
There was a problem hiding this comment.
Thank you! I learned something new today
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 main, this PR will be updated. # Releases ## @sveltejs/kit@2.61.0 ### Minor Changes - breaking: the `.run()` method has been removed from remote queries on both the client and the server. Use `await query()` directly instead — it now works everywhere ([#15779](#15779)) - feat: remote queries can now be awaited in any context (event handlers, module scope, async callbacks), not just inside reactive contexts. The cache is shared across reactive and non-reactive subscribers, so awaiting a query in an event handler will dedupe with components that have already subscribed to the same query. ([#15779](#15779)) - feat: live query instances are now themselves async-iterable ([#15878](#15878)) - feat: add programmatic `submit` method to `form` remote function instances ([#15657](#15657)) - feat: pass `form` remote function instance into `enhance` callback ([#15657](#15657)) ### Patch Changes - fix: resolve the app payload without using `process.env.NODE_ENV` ([#15852](#15852)) - fix: support `exactOptionalPropertyTypes` for optional route params ([#15825](#15825)) - fix: correctly send `true` value to the server for 'submit' and 'hidden' form fields ([#15858](#15858)) - fix: avoid build warnings about undefined universal hooks ([#15895](#15895)) - fix: prefer default error page when failing to decode the URL pathname ([#15744](#15744)) - fix: disable link prefetching on slow internet connections ([#15885](#15885)) - fix: allow routes ending with optional parameters next to more specific routes ([#15861](#15861)) - fix: remove reliance on Content-Length header in deserialize_binary_form, which caused failures when proxies (e.g. Vercel, Azure) strip the header and use chunked transfer encoding ([#15796](#15796)) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This PR disables link prefetching on slow Internet connections to avoid slowing down intentional page navigations network traffic.
Astro already does this: https://github.com/withastro/astro/blob/ace96ba5024129cbeb9d8e75134f4f8bdf42a57a/packages/astro/src/prefetch/index.ts#L303
You can test this by setting the network throttling to '3G' in Chrome. (it's weird, 3G shows up as
'2g'in navigator.connection.effectiveType)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