refactor(browser): Reduce browser package bundle size - #19856

Merged
Lms24 merged 3 commits into
developfrom
bundle-size/browser-cleanup
Mar 30, 2026
Merged

refactor(browser): Reduce browser package bundle size#19856
Lms24 merged 3 commits into
developfrom
bundle-size/browser-cleanup

Conversation

@HazAT

@HazATHazAT commented Mar 17, 2026

Copy link
Copy Markdown
Member

Summary

A collection of small, safe optimizations across the browser package. Combined saves ~60 bytes gzipped.

Changes

UPDATE (@Lms24): Removed some initial changes, leaving them here for posterity

FileChangeImpact
helpers.ts + stacktrace.tsRename internal sentryWrappedsW in wrap(). Update frame stripping regex to match both names.10B gzip
breadcrumbs.tsRemove unused breadcrumbData variable from fetch handlerdead code
browserapierrors.tsEncode DEFAULT_EVENT_TARGET as string.split(",") instead of array literal51B raw
globalhandlers.tsRemove redundant intermediate variable aliases in _enhanceEventWithInitialFramecleaner code
detectBrowserExtension.tsReplace array.some(startsWith) with single regex test~3B gzip
eventbuilder.tsSimplify getErrorPropertyFromObject to Object.values().find()~9B gzip
lazyLoadIntegration.tsDerive CDN bundle filenames from integration names list of integration names instead of storing duplicate key-value pairs~30B gzip

lazyLoadIntegration detail

The LazyLoadableIntegrations object stored 21 key-value pairs where values were mostly derivable from keys (strip "Integration", lowercase). Replaced with:

  • An array of integration names (encoded as string.split(","))
  • A derivation function
  • A 3-entry exceptions map for hyphenated names (replay-canvas, feedback-modal, feedback-screenshot)

All changes are behavior-preserving. No public API modifications.

Part of #19833.

Co-Authored-By: Claude claude@anthropic.com

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Comment threadpackages/browser/src/helpers.ts Outdated
@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

⚠️Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

PathSize% ChangeChange
@sentry/browser25.64 kB-0.17%-43 B 🔽
@sentry/browser - with treeshaking flags24.13 kB-0.17%-40 B 🔽
@sentry/browser (incl. Tracing)42.15 kB-0.06%-25 B 🔽
@sentry/browser (incl. Tracing, Profiling)46.76 kB-0.07%-31 B 🔽
@sentry/browser (incl. Tracing, Replay)80.94 kB-0.06%-45 B 🔽
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags70.56 kB-0.06%-37 B 🔽
@sentry/browser (incl. Tracing, Replay with Canvas)85.65 kB-0.07%-53 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)97.91 kB-0.06%-56 B 🔽
@sentry/browser (incl. Feedback)42.42 kB-0.14%-57 B 🔽
@sentry/browser (incl. sendFeedback)30.3 kB-0.17%-51 B 🔽
@sentry/browser (incl. FeedbackAsync)35.28 kB-0.34%-120 B 🔽
@sentry/browser (incl. Metrics)26.95 kB-0.03%-6 B 🔽
@sentry/browser (incl. Logs)27.1 kB+0.01%+2 B 🔺
@sentry/browser (incl. Metrics & Logs)27.77 kB-0.02%-5 B 🔽
@sentry/react27.41 kB-0.15%-41 B 🔽
@sentry/react (incl. Tracing)44.48 kB-0.1%-41 B 🔽
@sentry/vue30.08 kB-0.18%-53 B 🔽
@sentry/vue (incl. Tracing)44.05 kB-0.08%-32 B 🔽
@sentry/svelte25.66 kB-0.16%-40 B 🔽
CDN Bundle28.31 kB-0.28%-79 B 🔽
CDN Bundle (incl. Tracing)43.1 kB-0.22%-94 B 🔽
CDN Bundle (incl. Logs, Metrics)29.68 kB-0.27%-80 B 🔽
CDN Bundle (incl. Tracing, Logs, Metrics)44.16 kB-0.22%-94 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics)68.48 kB-0.12%-79 B 🔽
CDN Bundle (incl. Tracing, Replay)80 kB-0.11%-81 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)81.04 kB-0.15%-115 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback)85.54 kB-0.09%-75 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.58 kB-0.12%-97 B 🔽
CDN Bundle - uncompressed82.66 kB-0.33%-266 B 🔽
CDN Bundle (incl. Tracing) - uncompressed127.81 kB-0.21%-266 B 🔽
CDN Bundle (incl. Logs, Metrics) - uncompressed86.81 kB-0.31%-266 B 🔽
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed131.22 kB-0.21%-266 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed209.79 kB-0.13%-266 B 🔽
CDN Bundle (incl. Tracing, Replay) - uncompressed244.68 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed248.08 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed257.59 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed260.98 kB-0.11%-266 B 🔽
@sentry/nextjs (client)46.89 kB-0.09%-41 B 🔽
@sentry/sveltekit (client)42.62 kB-0.13%-53 B 🔽
@sentry/node-core56.52 kB+0.04%+21 B 🔺
@sentry/node173.62 kB+0.02%+23 B 🔺
@sentry/node - without tracing96.54 kB+0.01%+7 B 🔺
@sentry/aws-serverless113.54 kB+0.01%+6 B 🔺

View base workflow run

@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,386--added
GET With Sentry1,60917%-added
GET With Sentry (error only)6,06765%-added
POST Baseline1,198--added
POST With Sentry56847%-added
POST With Sentry (error only)1,03887%-added
MYSQL Baseline3,320--added
MYSQL With Sentry44013%-added
MYSQL With Sentry (error only)2,64880%-added

@Lms24
Lms24force-pushed the bundle-size/browser-cleanup branch from 8691cef to 712481eCompareMarch 27, 2026 14:01
@Lms24
Lms24 requested review from a team as code ownersMarch 27, 2026 14:01
@Lms24
Lms24 changed the base branch from autoresearch/browser-bundle-size-2026-03-17 to developMarch 27, 2026 14:01
@github-actions

github-actionsBot commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

🟢 Patch (bug fixes)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

Deps

  • Bump babel-loader from 10.0.0 to 10.1.1 by dependabot in #19997
  • Bump handlebars from 4.7.7 to 4.7.9 by dependabot in #20008

Nuxt

  • Add middleware instrumentation compatibility for Nuxt 5 by s1gr1d in #19968
  • Support parametrized SSR routes in Nuxt 5 by s1gr1d in #19977

Other

  • (browser) Replace element timing spans with metrics by logaretm in #19869
  • (bun) Add bunRuntimeMetricsIntegration by chargome in #19979
  • (core) Support embedding APIs in google-genai by nicohrubec in #19797
  • (node) Add nodeRuntimeMetricsIntegration by chargome in #19923
  • (node-core) Add OTLP integration for node-core/light by andreiborza in #19729
  • (solid) Add route parametrization for Solid Router by andreiborza in #20031

Bug Fixes 🐛

Ci

  • Update validate-pr action to remove draft enforcement by stephanie-anderson in #20037
  • Update validate-pr action to remove draft enforcement by stephanie-anderson in #20035

Other

  • (core) Guard nullish response in supabase PostgREST handler by antonis in #20033
  • (e2e) Pin @opentelemetry/api to 1.9.0 in ts3.8 test app by logaretm in #19992
  • (node) Ensure startNewTrace propagates traceId in OTel environments by logaretm in #19963
  • (nuxt) Use virtual module for Nuxt pages data (SSR route parametrization) by s1gr1d in #20020
  • (opentelemetry) Convert seconds timestamps in span.end() to milliseconds by logaretm in #19958

Documentation 📚

  • (release) Update publishing-a-release.md by nicohrubec in #19982

Internal Changes 🔧

Core

  • Introduce instrumented method registry for AI integrations by nicohrubec in #19981
  • Consolidate getOperationName into one shared utility by nicohrubec in #19971

Deps

  • Bump amqplib from 0.10.7 to 0.10.9 by dependabot in #20000
  • Bump actions/upload-artifact from 6 to 7 by dependabot in #19569
  • Bump srvx from 0.11.12 to 0.11.13 by dependabot in #20001
  • Bump @apollo/server from 5.4.0 to 5.5.0 by dependabot in #20007

Deps Dev

  • Remove esbuild override in astro-5-cf-workers E2E test by isaacs in #20024
  • Bump node-forge from 1.3.2 to 1.4.0 by dependabot in #20012
  • Bump yaml from 2.8.2 to 2.8.3 by dependabot in #19985

Other

  • (browser) Reduce browser package bundle size by HazAT in #19856
  • (deno) Expand Deno E2E test coverage by chargome in #19957
  • (e2e) Add e2e tests for nodeRuntimeMetricsIntegration by chargome in #19989

🤖 This preview updates automatically when you update the PR.

@Lms24Lms24 self-assigned this Mar 27, 2026
'XMLHttpRequestUpload',
];
// Using a comma-separated string and split for smaller bundle size vs an array literal
const DEFAULT_EVENT_TARGET =

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.

I think this is fine though with gzip compression only makes a minimal difference. We can roll with it here because types don't depend on this array. We can always revert it with minimal size impact if we need it for type safety.

// Single source of truth: as const array provides both the runtime list and the type.
// Bundle file names are derived: strip 'Integration' suffix, lowercase.
// Exceptions (hyphenated bundle names) are listed in HYPHENATED_BUNDLES.
const LAZY_LOADABLE_NAMES = [

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.

I made a few changes here: We need the list here for type safety but not the full object as before. This should still save a few bytes in comparison to the initial change.

'createLangChainCallbackHandler',
] as const;

type LazyLoadableIntegrationName = (typeof LAZY_LOADABLE_NAMES)[number];

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.

TIL:

Image

@Lms24
Lms24 enabled auto-merge (squash) March 27, 2026 15:44
HazATand others added 3 commits March 30, 2026 12:31
A collection of small, safe optimizations across the browser package:
- helpers.ts: Rename internal `sentryWrapped` function to `sW` in the
wrap() helper. Update the frame stripping regex in core/stacktrace.ts
to match both names for backwards compatibility. Saves ~10B gzipped.
- breadcrumbs.ts: Remove unused `breadcrumbData` variable from the fetch
breadcrumb handler — it was constructed but never used in either branch.
- browserapierrors.ts: Encode DEFAULT_EVENT_TARGET as comma-separated
string.split() instead of array literal. Saves 51B raw.
- globalhandlers.ts: Remove redundant intermediate variable aliases in
_enhanceEventWithInitialFrame.
- detectBrowserExtension.ts: Replace array.some(startsWith) with a single
regex test for extension protocol detection.
- eventbuilder.ts: Simplify getErrorPropertyFromObject to use
Object.values().find() instead of manual for-in loop.
- lazyLoadIntegration.ts: Derive CDN bundle filenames from integration
names instead of storing duplicate key-value pairs. Uses a 3-entry
exceptions map for hyphenated names (replay-canvas, feedback-modal,
feedback-screenshot). Saves ~30B gzipped.
All changes are behavior-preserving. No public API modifications.
Co-Authored-By: Claude claude@anthropic.com
@Lms24
Lms24force-pushed the bundle-size/browser-cleanup branch from ccf6cb6 to aa4523cCompareMarch 30, 2026 10:31
@Lms24
Lms24 merged commit 738b3e7 into developMar 30, 2026
342 of 344 checks passed
@Lms24
Lms24 deleted the bundle-size/browser-cleanup branch March 30, 2026 11:41
Sign up for freeto 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

@HazAT@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

refactor(browser): Reduce browser package bundle size - #19856

Merged
Lms24 merged 3 commits into
developfrom
bundle-size/browser-cleanup
Mar 30, 2026
Merged

refactor(browser): Reduce browser package bundle size#19856
Lms24 merged 3 commits into
developfrom
bundle-size/browser-cleanup

Conversation

@HazAT

@HazATHazAT commented Mar 17, 2026

Copy link
Copy Markdown
Member

Summary

A collection of small, safe optimizations across the browser package. Combined saves ~60 bytes gzipped.

Changes

UPDATE (@Lms24): Removed some initial changes, leaving them here for posterity

FileChangeImpact
helpers.ts + stacktrace.tsRename internal sentryWrappedsW in wrap(). Update frame stripping regex to match both names.10B gzip
breadcrumbs.tsRemove unused breadcrumbData variable from fetch handlerdead code
browserapierrors.tsEncode DEFAULT_EVENT_TARGET as string.split(",") instead of array literal51B raw
globalhandlers.tsRemove redundant intermediate variable aliases in _enhanceEventWithInitialFramecleaner code
detectBrowserExtension.tsReplace array.some(startsWith) with single regex test~3B gzip
eventbuilder.tsSimplify getErrorPropertyFromObject to Object.values().find()~9B gzip
lazyLoadIntegration.tsDerive CDN bundle filenames from integration names list of integration names instead of storing duplicate key-value pairs~30B gzip

lazyLoadIntegration detail

The LazyLoadableIntegrations object stored 21 key-value pairs where values were mostly derivable from keys (strip "Integration", lowercase). Replaced with:

  • An array of integration names (encoded as string.split(","))
  • A derivation function
  • A 3-entry exceptions map for hyphenated names (replay-canvas, feedback-modal, feedback-screenshot)

All changes are behavior-preserving. No public API modifications.

Part of #19833.

Co-Authored-By: Claude claude@anthropic.com

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Comment threadpackages/browser/src/helpers.ts Outdated
@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

⚠️Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

PathSize% ChangeChange
@sentry/browser25.64 kB-0.17%-43 B 🔽
@sentry/browser - with treeshaking flags24.13 kB-0.17%-40 B 🔽
@sentry/browser (incl. Tracing)42.15 kB-0.06%-25 B 🔽
@sentry/browser (incl. Tracing, Profiling)46.76 kB-0.07%-31 B 🔽
@sentry/browser (incl. Tracing, Replay)80.94 kB-0.06%-45 B 🔽
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags70.56 kB-0.06%-37 B 🔽
@sentry/browser (incl. Tracing, Replay with Canvas)85.65 kB-0.07%-53 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)97.91 kB-0.06%-56 B 🔽
@sentry/browser (incl. Feedback)42.42 kB-0.14%-57 B 🔽
@sentry/browser (incl. sendFeedback)30.3 kB-0.17%-51 B 🔽
@sentry/browser (incl. FeedbackAsync)35.28 kB-0.34%-120 B 🔽
@sentry/browser (incl. Metrics)26.95 kB-0.03%-6 B 🔽
@sentry/browser (incl. Logs)27.1 kB+0.01%+2 B 🔺
@sentry/browser (incl. Metrics & Logs)27.77 kB-0.02%-5 B 🔽
@sentry/react27.41 kB-0.15%-41 B 🔽
@sentry/react (incl. Tracing)44.48 kB-0.1%-41 B 🔽
@sentry/vue30.08 kB-0.18%-53 B 🔽
@sentry/vue (incl. Tracing)44.05 kB-0.08%-32 B 🔽
@sentry/svelte25.66 kB-0.16%-40 B 🔽
CDN Bundle28.31 kB-0.28%-79 B 🔽
CDN Bundle (incl. Tracing)43.1 kB-0.22%-94 B 🔽
CDN Bundle (incl. Logs, Metrics)29.68 kB-0.27%-80 B 🔽
CDN Bundle (incl. Tracing, Logs, Metrics)44.16 kB-0.22%-94 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics)68.48 kB-0.12%-79 B 🔽
CDN Bundle (incl. Tracing, Replay)80 kB-0.11%-81 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)81.04 kB-0.15%-115 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback)85.54 kB-0.09%-75 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.58 kB-0.12%-97 B 🔽
CDN Bundle - uncompressed82.66 kB-0.33%-266 B 🔽
CDN Bundle (incl. Tracing) - uncompressed127.81 kB-0.21%-266 B 🔽
CDN Bundle (incl. Logs, Metrics) - uncompressed86.81 kB-0.31%-266 B 🔽
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed131.22 kB-0.21%-266 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed209.79 kB-0.13%-266 B 🔽
CDN Bundle (incl. Tracing, Replay) - uncompressed244.68 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed248.08 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed257.59 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed260.98 kB-0.11%-266 B 🔽
@sentry/nextjs (client)46.89 kB-0.09%-41 B 🔽
@sentry/sveltekit (client)42.62 kB-0.13%-53 B 🔽
@sentry/node-core56.52 kB+0.04%+21 B 🔺
@sentry/node173.62 kB+0.02%+23 B 🔺
@sentry/node - without tracing96.54 kB+0.01%+7 B 🔺
@sentry/aws-serverless113.54 kB+0.01%+6 B 🔺

View base workflow run

@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,386--added
GET With Sentry1,60917%-added
GET With Sentry (error only)6,06765%-added
POST Baseline1,198--added
POST With Sentry56847%-added
POST With Sentry (error only)1,03887%-added
MYSQL Baseline3,320--added
MYSQL With Sentry44013%-added
MYSQL With Sentry (error only)2,64880%-added

@Lms24
Lms24force-pushed the bundle-size/browser-cleanup branch from 8691cef to 712481eCompareMarch 27, 2026 14:01
@Lms24
Lms24 requested review from a team as code ownersMarch 27, 2026 14:01
@Lms24
Lms24 changed the base branch from autoresearch/browser-bundle-size-2026-03-17 to developMarch 27, 2026 14:01
@github-actions

github-actionsBot commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

🟢 Patch (bug fixes)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

Deps

  • Bump babel-loader from 10.0.0 to 10.1.1 by dependabot in #19997
  • Bump handlebars from 4.7.7 to 4.7.9 by dependabot in #20008

Nuxt

  • Add middleware instrumentation compatibility for Nuxt 5 by s1gr1d in #19968
  • Support parametrized SSR routes in Nuxt 5 by s1gr1d in #19977

Other

  • (browser) Replace element timing spans with metrics by logaretm in #19869
  • (bun) Add bunRuntimeMetricsIntegration by chargome in #19979
  • (core) Support embedding APIs in google-genai by nicohrubec in #19797
  • (node) Add nodeRuntimeMetricsIntegration by chargome in #19923
  • (node-core) Add OTLP integration for node-core/light by andreiborza in #19729
  • (solid) Add route parametrization for Solid Router by andreiborza in #20031

Bug Fixes 🐛

Ci

  • Update validate-pr action to remove draft enforcement by stephanie-anderson in #20037
  • Update validate-pr action to remove draft enforcement by stephanie-anderson in #20035

Other

  • (core) Guard nullish response in supabase PostgREST handler by antonis in #20033
  • (e2e) Pin @opentelemetry/api to 1.9.0 in ts3.8 test app by logaretm in #19992
  • (node) Ensure startNewTrace propagates traceId in OTel environments by logaretm in #19963
  • (nuxt) Use virtual module for Nuxt pages data (SSR route parametrization) by s1gr1d in #20020
  • (opentelemetry) Convert seconds timestamps in span.end() to milliseconds by logaretm in #19958

Documentation 📚

  • (release) Update publishing-a-release.md by nicohrubec in #19982

Internal Changes 🔧

Core

  • Introduce instrumented method registry for AI integrations by nicohrubec in #19981
  • Consolidate getOperationName into one shared utility by nicohrubec in #19971

Deps

  • Bump amqplib from 0.10.7 to 0.10.9 by dependabot in #20000
  • Bump actions/upload-artifact from 6 to 7 by dependabot in #19569
  • Bump srvx from 0.11.12 to 0.11.13 by dependabot in #20001
  • Bump @apollo/server from 5.4.0 to 5.5.0 by dependabot in #20007

Deps Dev

  • Remove esbuild override in astro-5-cf-workers E2E test by isaacs in #20024
  • Bump node-forge from 1.3.2 to 1.4.0 by dependabot in #20012
  • Bump yaml from 2.8.2 to 2.8.3 by dependabot in #19985

Other

  • (browser) Reduce browser package bundle size by HazAT in #19856
  • (deno) Expand Deno E2E test coverage by chargome in #19957
  • (e2e) Add e2e tests for nodeRuntimeMetricsIntegration by chargome in #19989

🤖 This preview updates automatically when you update the PR.

@Lms24Lms24 self-assigned this Mar 27, 2026
'XMLHttpRequestUpload',
];
// Using a comma-separated string and split for smaller bundle size vs an array literal
const DEFAULT_EVENT_TARGET =

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.

I think this is fine though with gzip compression only makes a minimal difference. We can roll with it here because types don't depend on this array. We can always revert it with minimal size impact if we need it for type safety.

// Single source of truth: as const array provides both the runtime list and the type.
// Bundle file names are derived: strip 'Integration' suffix, lowercase.
// Exceptions (hyphenated bundle names) are listed in HYPHENATED_BUNDLES.
const LAZY_LOADABLE_NAMES = [

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.

I made a few changes here: We need the list here for type safety but not the full object as before. This should still save a few bytes in comparison to the initial change.

'createLangChainCallbackHandler',
] as const;

type LazyLoadableIntegrationName = (typeof LAZY_LOADABLE_NAMES)[number];

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.

TIL:

Image

@Lms24
Lms24 enabled auto-merge (squash) March 27, 2026 15:44
HazATand others added 3 commits March 30, 2026 12:31
A collection of small, safe optimizations across the browser package:
- helpers.ts: Rename internal `sentryWrapped` function to `sW` in the
wrap() helper. Update the frame stripping regex in core/stacktrace.ts
to match both names for backwards compatibility. Saves ~10B gzipped.
- breadcrumbs.ts: Remove unused `breadcrumbData` variable from the fetch
breadcrumb handler — it was constructed but never used in either branch.
- browserapierrors.ts: Encode DEFAULT_EVENT_TARGET as comma-separated
string.split() instead of array literal. Saves 51B raw.
- globalhandlers.ts: Remove redundant intermediate variable aliases in
_enhanceEventWithInitialFrame.
- detectBrowserExtension.ts: Replace array.some(startsWith) with a single
regex test for extension protocol detection.
- eventbuilder.ts: Simplify getErrorPropertyFromObject to use
Object.values().find() instead of manual for-in loop.
- lazyLoadIntegration.ts: Derive CDN bundle filenames from integration
names instead of storing duplicate key-value pairs. Uses a 3-entry
exceptions map for hyphenated names (replay-canvas, feedback-modal,
feedback-screenshot). Saves ~30B gzipped.
All changes are behavior-preserving. No public API modifications.
Co-Authored-By: Claude claude@anthropic.com
@Lms24
Lms24force-pushed the bundle-size/browser-cleanup branch from ccf6cb6 to aa4523cCompareMarch 30, 2026 10:31
@Lms24
Lms24 merged commit 738b3e7 into developMar 30, 2026
342 of 344 checks passed
@Lms24
Lms24 deleted the bundle-size/browser-cleanup branch March 30, 2026 11:41
Sign up for freeto 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

@HazAT@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

refactor(browser): Reduce browser package bundle size - #19856

Merged
Lms24 merged 3 commits into
developfrom
bundle-size/browser-cleanup
Mar 30, 2026
Merged

refactor(browser): Reduce browser package bundle size#19856
Lms24 merged 3 commits into
developfrom
bundle-size/browser-cleanup

Conversation

@HazAT

@HazATHazAT commented Mar 17, 2026

Copy link
Copy Markdown
Member

Summary

A collection of small, safe optimizations across the browser package. Combined saves ~60 bytes gzipped.

Changes

UPDATE (@Lms24): Removed some initial changes, leaving them here for posterity

FileChangeImpact
helpers.ts + stacktrace.tsRename internal sentryWrappedsW in wrap(). Update frame stripping regex to match both names.10B gzip
breadcrumbs.tsRemove unused breadcrumbData variable from fetch handlerdead code
browserapierrors.tsEncode DEFAULT_EVENT_TARGET as string.split(",") instead of array literal51B raw
globalhandlers.tsRemove redundant intermediate variable aliases in _enhanceEventWithInitialFramecleaner code
detectBrowserExtension.tsReplace array.some(startsWith) with single regex test~3B gzip
eventbuilder.tsSimplify getErrorPropertyFromObject to Object.values().find()~9B gzip
lazyLoadIntegration.tsDerive CDN bundle filenames from integration names list of integration names instead of storing duplicate key-value pairs~30B gzip

lazyLoadIntegration detail

The LazyLoadableIntegrations object stored 21 key-value pairs where values were mostly derivable from keys (strip "Integration", lowercase). Replaced with:

  • An array of integration names (encoded as string.split(","))
  • A derivation function
  • A 3-entry exceptions map for hyphenated names (replay-canvas, feedback-modal, feedback-screenshot)

All changes are behavior-preserving. No public API modifications.

Part of #19833.

Co-Authored-By: Claude claude@anthropic.com

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Comment threadpackages/browser/src/helpers.ts Outdated
@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

⚠️Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

PathSize% ChangeChange
@sentry/browser25.64 kB-0.17%-43 B 🔽
@sentry/browser - with treeshaking flags24.13 kB-0.17%-40 B 🔽
@sentry/browser (incl. Tracing)42.15 kB-0.06%-25 B 🔽
@sentry/browser (incl. Tracing, Profiling)46.76 kB-0.07%-31 B 🔽
@sentry/browser (incl. Tracing, Replay)80.94 kB-0.06%-45 B 🔽
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags70.56 kB-0.06%-37 B 🔽
@sentry/browser (incl. Tracing, Replay with Canvas)85.65 kB-0.07%-53 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)97.91 kB-0.06%-56 B 🔽
@sentry/browser (incl. Feedback)42.42 kB-0.14%-57 B 🔽
@sentry/browser (incl. sendFeedback)30.3 kB-0.17%-51 B 🔽
@sentry/browser (incl. FeedbackAsync)35.28 kB-0.34%-120 B 🔽
@sentry/browser (incl. Metrics)26.95 kB-0.03%-6 B 🔽
@sentry/browser (incl. Logs)27.1 kB+0.01%+2 B 🔺
@sentry/browser (incl. Metrics & Logs)27.77 kB-0.02%-5 B 🔽
@sentry/react27.41 kB-0.15%-41 B 🔽
@sentry/react (incl. Tracing)44.48 kB-0.1%-41 B 🔽
@sentry/vue30.08 kB-0.18%-53 B 🔽
@sentry/vue (incl. Tracing)44.05 kB-0.08%-32 B 🔽
@sentry/svelte25.66 kB-0.16%-40 B 🔽
CDN Bundle28.31 kB-0.28%-79 B 🔽
CDN Bundle (incl. Tracing)43.1 kB-0.22%-94 B 🔽
CDN Bundle (incl. Logs, Metrics)29.68 kB-0.27%-80 B 🔽
CDN Bundle (incl. Tracing, Logs, Metrics)44.16 kB-0.22%-94 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics)68.48 kB-0.12%-79 B 🔽
CDN Bundle (incl. Tracing, Replay)80 kB-0.11%-81 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)81.04 kB-0.15%-115 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback)85.54 kB-0.09%-75 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.58 kB-0.12%-97 B 🔽
CDN Bundle - uncompressed82.66 kB-0.33%-266 B 🔽
CDN Bundle (incl. Tracing) - uncompressed127.81 kB-0.21%-266 B 🔽
CDN Bundle (incl. Logs, Metrics) - uncompressed86.81 kB-0.31%-266 B 🔽
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed131.22 kB-0.21%-266 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed209.79 kB-0.13%-266 B 🔽
CDN Bundle (incl. Tracing, Replay) - uncompressed244.68 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed248.08 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed257.59 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed260.98 kB-0.11%-266 B 🔽
@sentry/nextjs (client)46.89 kB-0.09%-41 B 🔽
@sentry/sveltekit (client)42.62 kB-0.13%-53 B 🔽
@sentry/node-core56.52 kB+0.04%+21 B 🔺
@sentry/node173.62 kB+0.02%+23 B 🔺
@sentry/node - without tracing96.54 kB+0.01%+7 B 🔺
@sentry/aws-serverless113.54 kB+0.01%+6 B 🔺

View base workflow run

@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,386--added
GET With Sentry1,60917%-added
GET With Sentry (error only)6,06765%-added
POST Baseline1,198--added
POST With Sentry56847%-added
POST With Sentry (error only)1,03887%-added
MYSQL Baseline3,320--added
MYSQL With Sentry44013%-added
MYSQL With Sentry (error only)2,64880%-added

@Lms24
Lms24force-pushed the bundle-size/browser-cleanup branch from 8691cef to 712481eCompareMarch 27, 2026 14:01
@Lms24
Lms24 requested review from a team as code ownersMarch 27, 2026 14:01
@Lms24
Lms24 changed the base branch from autoresearch/browser-bundle-size-2026-03-17 to developMarch 27, 2026 14:01
@github-actions

github-actionsBot commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

🟢 Patch (bug fixes)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

Deps

  • Bump babel-loader from 10.0.0 to 10.1.1 by dependabot in #19997
  • Bump handlebars from 4.7.7 to 4.7.9 by dependabot in #20008

Nuxt

  • Add middleware instrumentation compatibility for Nuxt 5 by s1gr1d in #19968
  • Support parametrized SSR routes in Nuxt 5 by s1gr1d in #19977

Other

  • (browser) Replace element timing spans with metrics by logaretm in #19869
  • (bun) Add bunRuntimeMetricsIntegration by chargome in #19979
  • (core) Support embedding APIs in google-genai by nicohrubec in #19797
  • (node) Add nodeRuntimeMetricsIntegration by chargome in #19923
  • (node-core) Add OTLP integration for node-core/light by andreiborza in #19729
  • (solid) Add route parametrization for Solid Router by andreiborza in #20031

Bug Fixes 🐛

Ci

  • Update validate-pr action to remove draft enforcement by stephanie-anderson in #20037
  • Update validate-pr action to remove draft enforcement by stephanie-anderson in #20035

Other

  • (core) Guard nullish response in supabase PostgREST handler by antonis in #20033
  • (e2e) Pin @opentelemetry/api to 1.9.0 in ts3.8 test app by logaretm in #19992
  • (node) Ensure startNewTrace propagates traceId in OTel environments by logaretm in #19963
  • (nuxt) Use virtual module for Nuxt pages data (SSR route parametrization) by s1gr1d in #20020
  • (opentelemetry) Convert seconds timestamps in span.end() to milliseconds by logaretm in #19958

Documentation 📚

  • (release) Update publishing-a-release.md by nicohrubec in #19982

Internal Changes 🔧

Core

  • Introduce instrumented method registry for AI integrations by nicohrubec in #19981
  • Consolidate getOperationName into one shared utility by nicohrubec in #19971

Deps

  • Bump amqplib from 0.10.7 to 0.10.9 by dependabot in #20000
  • Bump actions/upload-artifact from 6 to 7 by dependabot in #19569
  • Bump srvx from 0.11.12 to 0.11.13 by dependabot in #20001
  • Bump @apollo/server from 5.4.0 to 5.5.0 by dependabot in #20007

Deps Dev

  • Remove esbuild override in astro-5-cf-workers E2E test by isaacs in #20024
  • Bump node-forge from 1.3.2 to 1.4.0 by dependabot in #20012
  • Bump yaml from 2.8.2 to 2.8.3 by dependabot in #19985

Other

  • (browser) Reduce browser package bundle size by HazAT in #19856
  • (deno) Expand Deno E2E test coverage by chargome in #19957
  • (e2e) Add e2e tests for nodeRuntimeMetricsIntegration by chargome in #19989

🤖 This preview updates automatically when you update the PR.

@Lms24Lms24 self-assigned this Mar 27, 2026
'XMLHttpRequestUpload',
];
// Using a comma-separated string and split for smaller bundle size vs an array literal
const DEFAULT_EVENT_TARGET =

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.

I think this is fine though with gzip compression only makes a minimal difference. We can roll with it here because types don't depend on this array. We can always revert it with minimal size impact if we need it for type safety.

// Single source of truth: as const array provides both the runtime list and the type.
// Bundle file names are derived: strip 'Integration' suffix, lowercase.
// Exceptions (hyphenated bundle names) are listed in HYPHENATED_BUNDLES.
const LAZY_LOADABLE_NAMES = [

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.

I made a few changes here: We need the list here for type safety but not the full object as before. This should still save a few bytes in comparison to the initial change.

'createLangChainCallbackHandler',
] as const;

type LazyLoadableIntegrationName = (typeof LAZY_LOADABLE_NAMES)[number];

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.

TIL:

Image

@Lms24
Lms24 enabled auto-merge (squash) March 27, 2026 15:44
HazATand others added 3 commits March 30, 2026 12:31
A collection of small, safe optimizations across the browser package:
- helpers.ts: Rename internal `sentryWrapped` function to `sW` in the
wrap() helper. Update the frame stripping regex in core/stacktrace.ts
to match both names for backwards compatibility. Saves ~10B gzipped.
- breadcrumbs.ts: Remove unused `breadcrumbData` variable from the fetch
breadcrumb handler — it was constructed but never used in either branch.
- browserapierrors.ts: Encode DEFAULT_EVENT_TARGET as comma-separated
string.split() instead of array literal. Saves 51B raw.
- globalhandlers.ts: Remove redundant intermediate variable aliases in
_enhanceEventWithInitialFrame.
- detectBrowserExtension.ts: Replace array.some(startsWith) with a single
regex test for extension protocol detection.
- eventbuilder.ts: Simplify getErrorPropertyFromObject to use
Object.values().find() instead of manual for-in loop.
- lazyLoadIntegration.ts: Derive CDN bundle filenames from integration
names instead of storing duplicate key-value pairs. Uses a 3-entry
exceptions map for hyphenated names (replay-canvas, feedback-modal,
feedback-screenshot). Saves ~30B gzipped.
All changes are behavior-preserving. No public API modifications.
Co-Authored-By: Claude claude@anthropic.com
@Lms24
Lms24force-pushed the bundle-size/browser-cleanup branch from ccf6cb6 to aa4523cCompareMarch 30, 2026 10:31
@Lms24
Lms24 merged commit 738b3e7 into developMar 30, 2026
342 of 344 checks passed
@Lms24
Lms24 deleted the bundle-size/browser-cleanup branch March 30, 2026 11:41
Sign up for freeto 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

@HazAT@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

refactor(browser): Reduce browser package bundle size - #19856

Merged
Lms24 merged 3 commits into
developfrom
bundle-size/browser-cleanup
Mar 30, 2026
Merged

refactor(browser): Reduce browser package bundle size#19856
Lms24 merged 3 commits into
developfrom
bundle-size/browser-cleanup

Conversation

@HazAT

@HazATHazAT commented Mar 17, 2026

Copy link
Copy Markdown
Member

Summary

A collection of small, safe optimizations across the browser package. Combined saves ~60 bytes gzipped.

Changes

UPDATE (@Lms24): Removed some initial changes, leaving them here for posterity

FileChangeImpact
helpers.ts + stacktrace.tsRename internal sentryWrappedsW in wrap(). Update frame stripping regex to match both names.10B gzip
breadcrumbs.tsRemove unused breadcrumbData variable from fetch handlerdead code
browserapierrors.tsEncode DEFAULT_EVENT_TARGET as string.split(",") instead of array literal51B raw
globalhandlers.tsRemove redundant intermediate variable aliases in _enhanceEventWithInitialFramecleaner code
detectBrowserExtension.tsReplace array.some(startsWith) with single regex test~3B gzip
eventbuilder.tsSimplify getErrorPropertyFromObject to Object.values().find()~9B gzip
lazyLoadIntegration.tsDerive CDN bundle filenames from integration names list of integration names instead of storing duplicate key-value pairs~30B gzip

lazyLoadIntegration detail

The LazyLoadableIntegrations object stored 21 key-value pairs where values were mostly derivable from keys (strip "Integration", lowercase). Replaced with:

  • An array of integration names (encoded as string.split(","))
  • A derivation function
  • A 3-entry exceptions map for hyphenated names (replay-canvas, feedback-modal, feedback-screenshot)

All changes are behavior-preserving. No public API modifications.

Part of #19833.

Co-Authored-By: Claude claude@anthropic.com

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Comment threadpackages/browser/src/helpers.ts Outdated
@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

⚠️Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

PathSize% ChangeChange
@sentry/browser25.64 kB-0.17%-43 B 🔽
@sentry/browser - with treeshaking flags24.13 kB-0.17%-40 B 🔽
@sentry/browser (incl. Tracing)42.15 kB-0.06%-25 B 🔽
@sentry/browser (incl. Tracing, Profiling)46.76 kB-0.07%-31 B 🔽
@sentry/browser (incl. Tracing, Replay)80.94 kB-0.06%-45 B 🔽
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags70.56 kB-0.06%-37 B 🔽
@sentry/browser (incl. Tracing, Replay with Canvas)85.65 kB-0.07%-53 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)97.91 kB-0.06%-56 B 🔽
@sentry/browser (incl. Feedback)42.42 kB-0.14%-57 B 🔽
@sentry/browser (incl. sendFeedback)30.3 kB-0.17%-51 B 🔽
@sentry/browser (incl. FeedbackAsync)35.28 kB-0.34%-120 B 🔽
@sentry/browser (incl. Metrics)26.95 kB-0.03%-6 B 🔽
@sentry/browser (incl. Logs)27.1 kB+0.01%+2 B 🔺
@sentry/browser (incl. Metrics & Logs)27.77 kB-0.02%-5 B 🔽
@sentry/react27.41 kB-0.15%-41 B 🔽
@sentry/react (incl. Tracing)44.48 kB-0.1%-41 B 🔽
@sentry/vue30.08 kB-0.18%-53 B 🔽
@sentry/vue (incl. Tracing)44.05 kB-0.08%-32 B 🔽
@sentry/svelte25.66 kB-0.16%-40 B 🔽
CDN Bundle28.31 kB-0.28%-79 B 🔽
CDN Bundle (incl. Tracing)43.1 kB-0.22%-94 B 🔽
CDN Bundle (incl. Logs, Metrics)29.68 kB-0.27%-80 B 🔽
CDN Bundle (incl. Tracing, Logs, Metrics)44.16 kB-0.22%-94 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics)68.48 kB-0.12%-79 B 🔽
CDN Bundle (incl. Tracing, Replay)80 kB-0.11%-81 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)81.04 kB-0.15%-115 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback)85.54 kB-0.09%-75 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.58 kB-0.12%-97 B 🔽
CDN Bundle - uncompressed82.66 kB-0.33%-266 B 🔽
CDN Bundle (incl. Tracing) - uncompressed127.81 kB-0.21%-266 B 🔽
CDN Bundle (incl. Logs, Metrics) - uncompressed86.81 kB-0.31%-266 B 🔽
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed131.22 kB-0.21%-266 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed209.79 kB-0.13%-266 B 🔽
CDN Bundle (incl. Tracing, Replay) - uncompressed244.68 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed248.08 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed257.59 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed260.98 kB-0.11%-266 B 🔽
@sentry/nextjs (client)46.89 kB-0.09%-41 B 🔽
@sentry/sveltekit (client)42.62 kB-0.13%-53 B 🔽
@sentry/node-core56.52 kB+0.04%+21 B 🔺
@sentry/node173.62 kB+0.02%+23 B 🔺
@sentry/node - without tracing96.54 kB+0.01%+7 B 🔺
@sentry/aws-serverless113.54 kB+0.01%+6 B 🔺

View base workflow run

@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,386--added
GET With Sentry1,60917%-added
GET With Sentry (error only)6,06765%-added
POST Baseline1,198--added
POST With Sentry56847%-added
POST With Sentry (error only)1,03887%-added
MYSQL Baseline3,320--added
MYSQL With Sentry44013%-added
MYSQL With Sentry (error only)2,64880%-added

@Lms24
Lms24force-pushed the bundle-size/browser-cleanup branch from 8691cef to 712481eCompareMarch 27, 2026 14:01
@Lms24
Lms24 requested review from a team as code ownersMarch 27, 2026 14:01
@Lms24
Lms24 changed the base branch from autoresearch/browser-bundle-size-2026-03-17 to developMarch 27, 2026 14:01
@github-actions

github-actionsBot commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

🟢 Patch (bug fixes)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

Deps

  • Bump babel-loader from 10.0.0 to 10.1.1 by dependabot in #19997
  • Bump handlebars from 4.7.7 to 4.7.9 by dependabot in #20008

Nuxt

  • Add middleware instrumentation compatibility for Nuxt 5 by s1gr1d in #19968
  • Support parametrized SSR routes in Nuxt 5 by s1gr1d in #19977

Other

  • (browser) Replace element timing spans with metrics by logaretm in #19869
  • (bun) Add bunRuntimeMetricsIntegration by chargome in #19979
  • (core) Support embedding APIs in google-genai by nicohrubec in #19797
  • (node) Add nodeRuntimeMetricsIntegration by chargome in #19923
  • (node-core) Add OTLP integration for node-core/light by andreiborza in #19729
  • (solid) Add route parametrization for Solid Router by andreiborza in #20031

Bug Fixes 🐛

Ci

  • Update validate-pr action to remove draft enforcement by stephanie-anderson in #20037
  • Update validate-pr action to remove draft enforcement by stephanie-anderson in #20035

Other

  • (core) Guard nullish response in supabase PostgREST handler by antonis in #20033
  • (e2e) Pin @opentelemetry/api to 1.9.0 in ts3.8 test app by logaretm in #19992
  • (node) Ensure startNewTrace propagates traceId in OTel environments by logaretm in #19963
  • (nuxt) Use virtual module for Nuxt pages data (SSR route parametrization) by s1gr1d in #20020
  • (opentelemetry) Convert seconds timestamps in span.end() to milliseconds by logaretm in #19958

Documentation 📚

  • (release) Update publishing-a-release.md by nicohrubec in #19982

Internal Changes 🔧

Core

  • Introduce instrumented method registry for AI integrations by nicohrubec in #19981
  • Consolidate getOperationName into one shared utility by nicohrubec in #19971

Deps

  • Bump amqplib from 0.10.7 to 0.10.9 by dependabot in #20000
  • Bump actions/upload-artifact from 6 to 7 by dependabot in #19569
  • Bump srvx from 0.11.12 to 0.11.13 by dependabot in #20001
  • Bump @apollo/server from 5.4.0 to 5.5.0 by dependabot in #20007

Deps Dev

  • Remove esbuild override in astro-5-cf-workers E2E test by isaacs in #20024
  • Bump node-forge from 1.3.2 to 1.4.0 by dependabot in #20012
  • Bump yaml from 2.8.2 to 2.8.3 by dependabot in #19985

Other

  • (browser) Reduce browser package bundle size by HazAT in #19856
  • (deno) Expand Deno E2E test coverage by chargome in #19957
  • (e2e) Add e2e tests for nodeRuntimeMetricsIntegration by chargome in #19989

🤖 This preview updates automatically when you update the PR.

@Lms24Lms24 self-assigned this Mar 27, 2026
'XMLHttpRequestUpload',
];
// Using a comma-separated string and split for smaller bundle size vs an array literal
const DEFAULT_EVENT_TARGET =

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.

I think this is fine though with gzip compression only makes a minimal difference. We can roll with it here because types don't depend on this array. We can always revert it with minimal size impact if we need it for type safety.

// Single source of truth: as const array provides both the runtime list and the type.
// Bundle file names are derived: strip 'Integration' suffix, lowercase.
// Exceptions (hyphenated bundle names) are listed in HYPHENATED_BUNDLES.
const LAZY_LOADABLE_NAMES = [

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.

I made a few changes here: We need the list here for type safety but not the full object as before. This should still save a few bytes in comparison to the initial change.

'createLangChainCallbackHandler',
] as const;

type LazyLoadableIntegrationName = (typeof LAZY_LOADABLE_NAMES)[number];

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.

TIL:

Image

@Lms24
Lms24 enabled auto-merge (squash) March 27, 2026 15:44
HazATand others added 3 commits March 30, 2026 12:31
A collection of small, safe optimizations across the browser package:
- helpers.ts: Rename internal `sentryWrapped` function to `sW` in the
wrap() helper. Update the frame stripping regex in core/stacktrace.ts
to match both names for backwards compatibility. Saves ~10B gzipped.
- breadcrumbs.ts: Remove unused `breadcrumbData` variable from the fetch
breadcrumb handler — it was constructed but never used in either branch.
- browserapierrors.ts: Encode DEFAULT_EVENT_TARGET as comma-separated
string.split() instead of array literal. Saves 51B raw.
- globalhandlers.ts: Remove redundant intermediate variable aliases in
_enhanceEventWithInitialFrame.
- detectBrowserExtension.ts: Replace array.some(startsWith) with a single
regex test for extension protocol detection.
- eventbuilder.ts: Simplify getErrorPropertyFromObject to use
Object.values().find() instead of manual for-in loop.
- lazyLoadIntegration.ts: Derive CDN bundle filenames from integration
names instead of storing duplicate key-value pairs. Uses a 3-entry
exceptions map for hyphenated names (replay-canvas, feedback-modal,
feedback-screenshot). Saves ~30B gzipped.
All changes are behavior-preserving. No public API modifications.
Co-Authored-By: Claude claude@anthropic.com
@Lms24
Lms24force-pushed the bundle-size/browser-cleanup branch from ccf6cb6 to aa4523cCompareMarch 30, 2026 10:31
@Lms24
Lms24 merged commit 738b3e7 into developMar 30, 2026
342 of 344 checks passed
@Lms24
Lms24 deleted the bundle-size/browser-cleanup branch March 30, 2026 11:41
Sign up for freeto 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

@HazAT@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

refactor(browser): Reduce browser package bundle size - #19856

Merged
Lms24 merged 3 commits into
developfrom
bundle-size/browser-cleanup
Mar 30, 2026
Merged

refactor(browser): Reduce browser package bundle size#19856
Lms24 merged 3 commits into
developfrom
bundle-size/browser-cleanup

Conversation

@HazAT

@HazATHazAT commented Mar 17, 2026

Copy link
Copy Markdown
Member

Summary

A collection of small, safe optimizations across the browser package. Combined saves ~60 bytes gzipped.

Changes

UPDATE (@Lms24): Removed some initial changes, leaving them here for posterity

FileChangeImpact
helpers.ts + stacktrace.tsRename internal sentryWrappedsW in wrap(). Update frame stripping regex to match both names.10B gzip
breadcrumbs.tsRemove unused breadcrumbData variable from fetch handlerdead code
browserapierrors.tsEncode DEFAULT_EVENT_TARGET as string.split(",") instead of array literal51B raw
globalhandlers.tsRemove redundant intermediate variable aliases in _enhanceEventWithInitialFramecleaner code
detectBrowserExtension.tsReplace array.some(startsWith) with single regex test~3B gzip
eventbuilder.tsSimplify getErrorPropertyFromObject to Object.values().find()~9B gzip
lazyLoadIntegration.tsDerive CDN bundle filenames from integration names list of integration names instead of storing duplicate key-value pairs~30B gzip

lazyLoadIntegration detail

The LazyLoadableIntegrations object stored 21 key-value pairs where values were mostly derivable from keys (strip "Integration", lowercase). Replaced with:

  • An array of integration names (encoded as string.split(","))
  • A derivation function
  • A 3-entry exceptions map for hyphenated names (replay-canvas, feedback-modal, feedback-screenshot)

All changes are behavior-preserving. No public API modifications.

Part of #19833.

Co-Authored-By: Claude claude@anthropic.com

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Comment threadpackages/browser/src/helpers.ts Outdated
@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

⚠️Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

PathSize% ChangeChange
@sentry/browser25.64 kB-0.17%-43 B 🔽
@sentry/browser - with treeshaking flags24.13 kB-0.17%-40 B 🔽
@sentry/browser (incl. Tracing)42.15 kB-0.06%-25 B 🔽
@sentry/browser (incl. Tracing, Profiling)46.76 kB-0.07%-31 B 🔽
@sentry/browser (incl. Tracing, Replay)80.94 kB-0.06%-45 B 🔽
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags70.56 kB-0.06%-37 B 🔽
@sentry/browser (incl. Tracing, Replay with Canvas)85.65 kB-0.07%-53 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)97.91 kB-0.06%-56 B 🔽
@sentry/browser (incl. Feedback)42.42 kB-0.14%-57 B 🔽
@sentry/browser (incl. sendFeedback)30.3 kB-0.17%-51 B 🔽
@sentry/browser (incl. FeedbackAsync)35.28 kB-0.34%-120 B 🔽
@sentry/browser (incl. Metrics)26.95 kB-0.03%-6 B 🔽
@sentry/browser (incl. Logs)27.1 kB+0.01%+2 B 🔺
@sentry/browser (incl. Metrics & Logs)27.77 kB-0.02%-5 B 🔽
@sentry/react27.41 kB-0.15%-41 B 🔽
@sentry/react (incl. Tracing)44.48 kB-0.1%-41 B 🔽
@sentry/vue30.08 kB-0.18%-53 B 🔽
@sentry/vue (incl. Tracing)44.05 kB-0.08%-32 B 🔽
@sentry/svelte25.66 kB-0.16%-40 B 🔽
CDN Bundle28.31 kB-0.28%-79 B 🔽
CDN Bundle (incl. Tracing)43.1 kB-0.22%-94 B 🔽
CDN Bundle (incl. Logs, Metrics)29.68 kB-0.27%-80 B 🔽
CDN Bundle (incl. Tracing, Logs, Metrics)44.16 kB-0.22%-94 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics)68.48 kB-0.12%-79 B 🔽
CDN Bundle (incl. Tracing, Replay)80 kB-0.11%-81 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)81.04 kB-0.15%-115 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback)85.54 kB-0.09%-75 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.58 kB-0.12%-97 B 🔽
CDN Bundle - uncompressed82.66 kB-0.33%-266 B 🔽
CDN Bundle (incl. Tracing) - uncompressed127.81 kB-0.21%-266 B 🔽
CDN Bundle (incl. Logs, Metrics) - uncompressed86.81 kB-0.31%-266 B 🔽
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed131.22 kB-0.21%-266 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed209.79 kB-0.13%-266 B 🔽
CDN Bundle (incl. Tracing, Replay) - uncompressed244.68 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed248.08 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed257.59 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed260.98 kB-0.11%-266 B 🔽
@sentry/nextjs (client)46.89 kB-0.09%-41 B 🔽
@sentry/sveltekit (client)42.62 kB-0.13%-53 B 🔽
@sentry/node-core56.52 kB+0.04%+21 B 🔺
@sentry/node173.62 kB+0.02%+23 B 🔺
@sentry/node - without tracing96.54 kB+0.01%+7 B 🔺
@sentry/aws-serverless113.54 kB+0.01%+6 B 🔺

View base workflow run

@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,386--added
GET With Sentry1,60917%-added
GET With Sentry (error only)6,06765%-added
POST Baseline1,198--added
POST With Sentry56847%-added
POST With Sentry (error only)1,03887%-added
MYSQL Baseline3,320--added
MYSQL With Sentry44013%-added
MYSQL With Sentry (error only)2,64880%-added

@Lms24
Lms24force-pushed the bundle-size/browser-cleanup branch from 8691cef to 712481eCompareMarch 27, 2026 14:01
@Lms24
Lms24 requested review from a team as code ownersMarch 27, 2026 14:01
@Lms24
Lms24 changed the base branch from autoresearch/browser-bundle-size-2026-03-17 to developMarch 27, 2026 14:01
@github-actions

github-actionsBot commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

🟢 Patch (bug fixes)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

Deps

  • Bump babel-loader from 10.0.0 to 10.1.1 by dependabot in #19997
  • Bump handlebars from 4.7.7 to 4.7.9 by dependabot in #20008

Nuxt

  • Add middleware instrumentation compatibility for Nuxt 5 by s1gr1d in #19968
  • Support parametrized SSR routes in Nuxt 5 by s1gr1d in #19977

Other

  • (browser) Replace element timing spans with metrics by logaretm in #19869
  • (bun) Add bunRuntimeMetricsIntegration by chargome in #19979
  • (core) Support embedding APIs in google-genai by nicohrubec in #19797
  • (node) Add nodeRuntimeMetricsIntegration by chargome in #19923
  • (node-core) Add OTLP integration for node-core/light by andreiborza in #19729
  • (solid) Add route parametrization for Solid Router by andreiborza in #20031

Bug Fixes 🐛

Ci

  • Update validate-pr action to remove draft enforcement by stephanie-anderson in #20037
  • Update validate-pr action to remove draft enforcement by stephanie-anderson in #20035

Other

  • (core) Guard nullish response in supabase PostgREST handler by antonis in #20033
  • (e2e) Pin @opentelemetry/api to 1.9.0 in ts3.8 test app by logaretm in #19992
  • (node) Ensure startNewTrace propagates traceId in OTel environments by logaretm in #19963
  • (nuxt) Use virtual module for Nuxt pages data (SSR route parametrization) by s1gr1d in #20020
  • (opentelemetry) Convert seconds timestamps in span.end() to milliseconds by logaretm in #19958

Documentation 📚

  • (release) Update publishing-a-release.md by nicohrubec in #19982

Internal Changes 🔧

Core

  • Introduce instrumented method registry for AI integrations by nicohrubec in #19981
  • Consolidate getOperationName into one shared utility by nicohrubec in #19971

Deps

  • Bump amqplib from 0.10.7 to 0.10.9 by dependabot in #20000
  • Bump actions/upload-artifact from 6 to 7 by dependabot in #19569
  • Bump srvx from 0.11.12 to 0.11.13 by dependabot in #20001
  • Bump @apollo/server from 5.4.0 to 5.5.0 by dependabot in #20007

Deps Dev

  • Remove esbuild override in astro-5-cf-workers E2E test by isaacs in #20024
  • Bump node-forge from 1.3.2 to 1.4.0 by dependabot in #20012
  • Bump yaml from 2.8.2 to 2.8.3 by dependabot in #19985

Other

  • (browser) Reduce browser package bundle size by HazAT in #19856
  • (deno) Expand Deno E2E test coverage by chargome in #19957
  • (e2e) Add e2e tests for nodeRuntimeMetricsIntegration by chargome in #19989

🤖 This preview updates automatically when you update the PR.

@Lms24Lms24 self-assigned this Mar 27, 2026
'XMLHttpRequestUpload',
];
// Using a comma-separated string and split for smaller bundle size vs an array literal
const DEFAULT_EVENT_TARGET =

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.

I think this is fine though with gzip compression only makes a minimal difference. We can roll with it here because types don't depend on this array. We can always revert it with minimal size impact if we need it for type safety.

// Single source of truth: as const array provides both the runtime list and the type.
// Bundle file names are derived: strip 'Integration' suffix, lowercase.
// Exceptions (hyphenated bundle names) are listed in HYPHENATED_BUNDLES.
const LAZY_LOADABLE_NAMES = [

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.

I made a few changes here: We need the list here for type safety but not the full object as before. This should still save a few bytes in comparison to the initial change.

'createLangChainCallbackHandler',
] as const;

type LazyLoadableIntegrationName = (typeof LAZY_LOADABLE_NAMES)[number];

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.

TIL:

Image

@Lms24
Lms24 enabled auto-merge (squash) March 27, 2026 15:44
HazATand others added 3 commits March 30, 2026 12:31
A collection of small, safe optimizations across the browser package:
- helpers.ts: Rename internal `sentryWrapped` function to `sW` in the
wrap() helper. Update the frame stripping regex in core/stacktrace.ts
to match both names for backwards compatibility. Saves ~10B gzipped.
- breadcrumbs.ts: Remove unused `breadcrumbData` variable from the fetch
breadcrumb handler — it was constructed but never used in either branch.
- browserapierrors.ts: Encode DEFAULT_EVENT_TARGET as comma-separated
string.split() instead of array literal. Saves 51B raw.
- globalhandlers.ts: Remove redundant intermediate variable aliases in
_enhanceEventWithInitialFrame.
- detectBrowserExtension.ts: Replace array.some(startsWith) with a single
regex test for extension protocol detection.
- eventbuilder.ts: Simplify getErrorPropertyFromObject to use
Object.values().find() instead of manual for-in loop.
- lazyLoadIntegration.ts: Derive CDN bundle filenames from integration
names instead of storing duplicate key-value pairs. Uses a 3-entry
exceptions map for hyphenated names (replay-canvas, feedback-modal,
feedback-screenshot). Saves ~30B gzipped.
All changes are behavior-preserving. No public API modifications.
Co-Authored-By: Claude claude@anthropic.com
@Lms24
Lms24force-pushed the bundle-size/browser-cleanup branch from ccf6cb6 to aa4523cCompareMarch 30, 2026 10:31
@Lms24
Lms24 merged commit 738b3e7 into developMar 30, 2026
342 of 344 checks passed
@Lms24
Lms24 deleted the bundle-size/browser-cleanup branch March 30, 2026 11:41
Sign up for freeto 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

@HazAT@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

refactor(browser): Reduce browser package bundle size - #19856

Merged
Lms24 merged 3 commits into
developfrom
bundle-size/browser-cleanup
Mar 30, 2026
Merged

refactor(browser): Reduce browser package bundle size#19856
Lms24 merged 3 commits into
developfrom
bundle-size/browser-cleanup

Conversation

@HazAT

@HazATHazAT commented Mar 17, 2026

Copy link
Copy Markdown
Member

Summary

A collection of small, safe optimizations across the browser package. Combined saves ~60 bytes gzipped.

Changes

UPDATE (@Lms24): Removed some initial changes, leaving them here for posterity

FileChangeImpact
helpers.ts + stacktrace.tsRename internal sentryWrappedsW in wrap(). Update frame stripping regex to match both names.10B gzip
breadcrumbs.tsRemove unused breadcrumbData variable from fetch handlerdead code
browserapierrors.tsEncode DEFAULT_EVENT_TARGET as string.split(",") instead of array literal51B raw
globalhandlers.tsRemove redundant intermediate variable aliases in _enhanceEventWithInitialFramecleaner code
detectBrowserExtension.tsReplace array.some(startsWith) with single regex test~3B gzip
eventbuilder.tsSimplify getErrorPropertyFromObject to Object.values().find()~9B gzip
lazyLoadIntegration.tsDerive CDN bundle filenames from integration names list of integration names instead of storing duplicate key-value pairs~30B gzip

lazyLoadIntegration detail

The LazyLoadableIntegrations object stored 21 key-value pairs where values were mostly derivable from keys (strip "Integration", lowercase). Replaced with:

  • An array of integration names (encoded as string.split(","))
  • A derivation function
  • A 3-entry exceptions map for hyphenated names (replay-canvas, feedback-modal, feedback-screenshot)

All changes are behavior-preserving. No public API modifications.

Part of #19833.

Co-Authored-By: Claude claude@anthropic.com

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Comment threadpackages/browser/src/helpers.ts Outdated
@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

⚠️Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

PathSize% ChangeChange
@sentry/browser25.64 kB-0.17%-43 B 🔽
@sentry/browser - with treeshaking flags24.13 kB-0.17%-40 B 🔽
@sentry/browser (incl. Tracing)42.15 kB-0.06%-25 B 🔽
@sentry/browser (incl. Tracing, Profiling)46.76 kB-0.07%-31 B 🔽
@sentry/browser (incl. Tracing, Replay)80.94 kB-0.06%-45 B 🔽
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags70.56 kB-0.06%-37 B 🔽
@sentry/browser (incl. Tracing, Replay with Canvas)85.65 kB-0.07%-53 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)97.91 kB-0.06%-56 B 🔽
@sentry/browser (incl. Feedback)42.42 kB-0.14%-57 B 🔽
@sentry/browser (incl. sendFeedback)30.3 kB-0.17%-51 B 🔽
@sentry/browser (incl. FeedbackAsync)35.28 kB-0.34%-120 B 🔽
@sentry/browser (incl. Metrics)26.95 kB-0.03%-6 B 🔽
@sentry/browser (incl. Logs)27.1 kB+0.01%+2 B 🔺
@sentry/browser (incl. Metrics & Logs)27.77 kB-0.02%-5 B 🔽
@sentry/react27.41 kB-0.15%-41 B 🔽
@sentry/react (incl. Tracing)44.48 kB-0.1%-41 B 🔽
@sentry/vue30.08 kB-0.18%-53 B 🔽
@sentry/vue (incl. Tracing)44.05 kB-0.08%-32 B 🔽
@sentry/svelte25.66 kB-0.16%-40 B 🔽
CDN Bundle28.31 kB-0.28%-79 B 🔽
CDN Bundle (incl. Tracing)43.1 kB-0.22%-94 B 🔽
CDN Bundle (incl. Logs, Metrics)29.68 kB-0.27%-80 B 🔽
CDN Bundle (incl. Tracing, Logs, Metrics)44.16 kB-0.22%-94 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics)68.48 kB-0.12%-79 B 🔽
CDN Bundle (incl. Tracing, Replay)80 kB-0.11%-81 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)81.04 kB-0.15%-115 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback)85.54 kB-0.09%-75 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.58 kB-0.12%-97 B 🔽
CDN Bundle - uncompressed82.66 kB-0.33%-266 B 🔽
CDN Bundle (incl. Tracing) - uncompressed127.81 kB-0.21%-266 B 🔽
CDN Bundle (incl. Logs, Metrics) - uncompressed86.81 kB-0.31%-266 B 🔽
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed131.22 kB-0.21%-266 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed209.79 kB-0.13%-266 B 🔽
CDN Bundle (incl. Tracing, Replay) - uncompressed244.68 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed248.08 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed257.59 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed260.98 kB-0.11%-266 B 🔽
@sentry/nextjs (client)46.89 kB-0.09%-41 B 🔽
@sentry/sveltekit (client)42.62 kB-0.13%-53 B 🔽
@sentry/node-core56.52 kB+0.04%+21 B 🔺
@sentry/node173.62 kB+0.02%+23 B 🔺
@sentry/node - without tracing96.54 kB+0.01%+7 B 🔺
@sentry/aws-serverless113.54 kB+0.01%+6 B 🔺

View base workflow run

@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,386--added
GET With Sentry1,60917%-added
GET With Sentry (error only)6,06765%-added
POST Baseline1,198--added
POST With Sentry56847%-added
POST With Sentry (error only)1,03887%-added
MYSQL Baseline3,320--added
MYSQL With Sentry44013%-added
MYSQL With Sentry (error only)2,64880%-added

@Lms24
Lms24force-pushed the bundle-size/browser-cleanup branch from 8691cef to 712481eCompareMarch 27, 2026 14:01
@Lms24
Lms24 requested review from a team as code ownersMarch 27, 2026 14:01
@Lms24
Lms24 changed the base branch from autoresearch/browser-bundle-size-2026-03-17 to developMarch 27, 2026 14:01
@github-actions

github-actionsBot commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

🟢 Patch (bug fixes)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

Deps

  • Bump babel-loader from 10.0.0 to 10.1.1 by dependabot in #19997
  • Bump handlebars from 4.7.7 to 4.7.9 by dependabot in #20008

Nuxt

  • Add middleware instrumentation compatibility for Nuxt 5 by s1gr1d in #19968
  • Support parametrized SSR routes in Nuxt 5 by s1gr1d in #19977

Other

  • (browser) Replace element timing spans with metrics by logaretm in #19869
  • (bun) Add bunRuntimeMetricsIntegration by chargome in #19979
  • (core) Support embedding APIs in google-genai by nicohrubec in #19797
  • (node) Add nodeRuntimeMetricsIntegration by chargome in #19923
  • (node-core) Add OTLP integration for node-core/light by andreiborza in #19729
  • (solid) Add route parametrization for Solid Router by andreiborza in #20031

Bug Fixes 🐛

Ci

  • Update validate-pr action to remove draft enforcement by stephanie-anderson in #20037
  • Update validate-pr action to remove draft enforcement by stephanie-anderson in #20035

Other

  • (core) Guard nullish response in supabase PostgREST handler by antonis in #20033
  • (e2e) Pin @opentelemetry/api to 1.9.0 in ts3.8 test app by logaretm in #19992
  • (node) Ensure startNewTrace propagates traceId in OTel environments by logaretm in #19963
  • (nuxt) Use virtual module for Nuxt pages data (SSR route parametrization) by s1gr1d in #20020
  • (opentelemetry) Convert seconds timestamps in span.end() to milliseconds by logaretm in #19958

Documentation 📚

  • (release) Update publishing-a-release.md by nicohrubec in #19982

Internal Changes 🔧

Core

  • Introduce instrumented method registry for AI integrations by nicohrubec in #19981
  • Consolidate getOperationName into one shared utility by nicohrubec in #19971

Deps

  • Bump amqplib from 0.10.7 to 0.10.9 by dependabot in #20000
  • Bump actions/upload-artifact from 6 to 7 by dependabot in #19569
  • Bump srvx from 0.11.12 to 0.11.13 by dependabot in #20001
  • Bump @apollo/server from 5.4.0 to 5.5.0 by dependabot in #20007

Deps Dev

  • Remove esbuild override in astro-5-cf-workers E2E test by isaacs in #20024
  • Bump node-forge from 1.3.2 to 1.4.0 by dependabot in #20012
  • Bump yaml from 2.8.2 to 2.8.3 by dependabot in #19985

Other

  • (browser) Reduce browser package bundle size by HazAT in #19856
  • (deno) Expand Deno E2E test coverage by chargome in #19957
  • (e2e) Add e2e tests for nodeRuntimeMetricsIntegration by chargome in #19989

🤖 This preview updates automatically when you update the PR.

@Lms24Lms24 self-assigned this Mar 27, 2026
'XMLHttpRequestUpload',
];
// Using a comma-separated string and split for smaller bundle size vs an array literal
const DEFAULT_EVENT_TARGET =

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.

I think this is fine though with gzip compression only makes a minimal difference. We can roll with it here because types don't depend on this array. We can always revert it with minimal size impact if we need it for type safety.

// Single source of truth: as const array provides both the runtime list and the type.
// Bundle file names are derived: strip 'Integration' suffix, lowercase.
// Exceptions (hyphenated bundle names) are listed in HYPHENATED_BUNDLES.
const LAZY_LOADABLE_NAMES = [

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.

I made a few changes here: We need the list here for type safety but not the full object as before. This should still save a few bytes in comparison to the initial change.

'createLangChainCallbackHandler',
] as const;

type LazyLoadableIntegrationName = (typeof LAZY_LOADABLE_NAMES)[number];

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.

TIL:

Image

@Lms24
Lms24 enabled auto-merge (squash) March 27, 2026 15:44
HazATand others added 3 commits March 30, 2026 12:31
A collection of small, safe optimizations across the browser package:
- helpers.ts: Rename internal `sentryWrapped` function to `sW` in the
wrap() helper. Update the frame stripping regex in core/stacktrace.ts
to match both names for backwards compatibility. Saves ~10B gzipped.
- breadcrumbs.ts: Remove unused `breadcrumbData` variable from the fetch
breadcrumb handler — it was constructed but never used in either branch.
- browserapierrors.ts: Encode DEFAULT_EVENT_TARGET as comma-separated
string.split() instead of array literal. Saves 51B raw.
- globalhandlers.ts: Remove redundant intermediate variable aliases in
_enhanceEventWithInitialFrame.
- detectBrowserExtension.ts: Replace array.some(startsWith) with a single
regex test for extension protocol detection.
- eventbuilder.ts: Simplify getErrorPropertyFromObject to use
Object.values().find() instead of manual for-in loop.
- lazyLoadIntegration.ts: Derive CDN bundle filenames from integration
names instead of storing duplicate key-value pairs. Uses a 3-entry
exceptions map for hyphenated names (replay-canvas, feedback-modal,
feedback-screenshot). Saves ~30B gzipped.
All changes are behavior-preserving. No public API modifications.
Co-Authored-By: Claude claude@anthropic.com
@Lms24
Lms24force-pushed the bundle-size/browser-cleanup branch from ccf6cb6 to aa4523cCompareMarch 30, 2026 10:31
@Lms24
Lms24 merged commit 738b3e7 into developMar 30, 2026
342 of 344 checks passed
@Lms24
Lms24 deleted the bundle-size/browser-cleanup branch March 30, 2026 11:41
Sign up for freeto 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

@HazAT@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

refactor(browser): Reduce browser package bundle size - #19856

Merged
Lms24 merged 3 commits into
developfrom
bundle-size/browser-cleanup
Mar 30, 2026
Merged

refactor(browser): Reduce browser package bundle size#19856
Lms24 merged 3 commits into
developfrom
bundle-size/browser-cleanup

Conversation

@HazAT

@HazATHazAT commented Mar 17, 2026

Copy link
Copy Markdown
Member

Summary

A collection of small, safe optimizations across the browser package. Combined saves ~60 bytes gzipped.

Changes

UPDATE (@Lms24): Removed some initial changes, leaving them here for posterity

FileChangeImpact
helpers.ts + stacktrace.tsRename internal sentryWrappedsW in wrap(). Update frame stripping regex to match both names.10B gzip
breadcrumbs.tsRemove unused breadcrumbData variable from fetch handlerdead code
browserapierrors.tsEncode DEFAULT_EVENT_TARGET as string.split(",") instead of array literal51B raw
globalhandlers.tsRemove redundant intermediate variable aliases in _enhanceEventWithInitialFramecleaner code
detectBrowserExtension.tsReplace array.some(startsWith) with single regex test~3B gzip
eventbuilder.tsSimplify getErrorPropertyFromObject to Object.values().find()~9B gzip
lazyLoadIntegration.tsDerive CDN bundle filenames from integration names list of integration names instead of storing duplicate key-value pairs~30B gzip

lazyLoadIntegration detail

The LazyLoadableIntegrations object stored 21 key-value pairs where values were mostly derivable from keys (strip "Integration", lowercase). Replaced with:

  • An array of integration names (encoded as string.split(","))
  • A derivation function
  • A 3-entry exceptions map for hyphenated names (replay-canvas, feedback-modal, feedback-screenshot)

All changes are behavior-preserving. No public API modifications.

Part of #19833.

Co-Authored-By: Claude claude@anthropic.com

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Comment threadpackages/browser/src/helpers.ts Outdated
@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

⚠️Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

PathSize% ChangeChange
@sentry/browser25.64 kB-0.17%-43 B 🔽
@sentry/browser - with treeshaking flags24.13 kB-0.17%-40 B 🔽
@sentry/browser (incl. Tracing)42.15 kB-0.06%-25 B 🔽
@sentry/browser (incl. Tracing, Profiling)46.76 kB-0.07%-31 B 🔽
@sentry/browser (incl. Tracing, Replay)80.94 kB-0.06%-45 B 🔽
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags70.56 kB-0.06%-37 B 🔽
@sentry/browser (incl. Tracing, Replay with Canvas)85.65 kB-0.07%-53 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)97.91 kB-0.06%-56 B 🔽
@sentry/browser (incl. Feedback)42.42 kB-0.14%-57 B 🔽
@sentry/browser (incl. sendFeedback)30.3 kB-0.17%-51 B 🔽
@sentry/browser (incl. FeedbackAsync)35.28 kB-0.34%-120 B 🔽
@sentry/browser (incl. Metrics)26.95 kB-0.03%-6 B 🔽
@sentry/browser (incl. Logs)27.1 kB+0.01%+2 B 🔺
@sentry/browser (incl. Metrics & Logs)27.77 kB-0.02%-5 B 🔽
@sentry/react27.41 kB-0.15%-41 B 🔽
@sentry/react (incl. Tracing)44.48 kB-0.1%-41 B 🔽
@sentry/vue30.08 kB-0.18%-53 B 🔽
@sentry/vue (incl. Tracing)44.05 kB-0.08%-32 B 🔽
@sentry/svelte25.66 kB-0.16%-40 B 🔽
CDN Bundle28.31 kB-0.28%-79 B 🔽
CDN Bundle (incl. Tracing)43.1 kB-0.22%-94 B 🔽
CDN Bundle (incl. Logs, Metrics)29.68 kB-0.27%-80 B 🔽
CDN Bundle (incl. Tracing, Logs, Metrics)44.16 kB-0.22%-94 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics)68.48 kB-0.12%-79 B 🔽
CDN Bundle (incl. Tracing, Replay)80 kB-0.11%-81 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)81.04 kB-0.15%-115 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback)85.54 kB-0.09%-75 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.58 kB-0.12%-97 B 🔽
CDN Bundle - uncompressed82.66 kB-0.33%-266 B 🔽
CDN Bundle (incl. Tracing) - uncompressed127.81 kB-0.21%-266 B 🔽
CDN Bundle (incl. Logs, Metrics) - uncompressed86.81 kB-0.31%-266 B 🔽
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed131.22 kB-0.21%-266 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed209.79 kB-0.13%-266 B 🔽
CDN Bundle (incl. Tracing, Replay) - uncompressed244.68 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed248.08 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed257.59 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed260.98 kB-0.11%-266 B 🔽
@sentry/nextjs (client)46.89 kB-0.09%-41 B 🔽
@sentry/sveltekit (client)42.62 kB-0.13%-53 B 🔽
@sentry/node-core56.52 kB+0.04%+21 B 🔺
@sentry/node173.62 kB+0.02%+23 B 🔺
@sentry/node - without tracing96.54 kB+0.01%+7 B 🔺
@sentry/aws-serverless113.54 kB+0.01%+6 B 🔺

View base workflow run

@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,386--added
GET With Sentry1,60917%-added
GET With Sentry (error only)6,06765%-added
POST Baseline1,198--added
POST With Sentry56847%-added
POST With Sentry (error only)1,03887%-added
MYSQL Baseline3,320--added
MYSQL With Sentry44013%-added
MYSQL With Sentry (error only)2,64880%-added

@Lms24
Lms24force-pushed the bundle-size/browser-cleanup branch from 8691cef to 712481eCompareMarch 27, 2026 14:01
@Lms24
Lms24 requested review from a team as code ownersMarch 27, 2026 14:01
@Lms24
Lms24 changed the base branch from autoresearch/browser-bundle-size-2026-03-17 to developMarch 27, 2026 14:01
@github-actions

github-actionsBot commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

🟢 Patch (bug fixes)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

Deps

  • Bump babel-loader from 10.0.0 to 10.1.1 by dependabot in #19997
  • Bump handlebars from 4.7.7 to 4.7.9 by dependabot in #20008

Nuxt

  • Add middleware instrumentation compatibility for Nuxt 5 by s1gr1d in #19968
  • Support parametrized SSR routes in Nuxt 5 by s1gr1d in #19977

Other

  • (browser) Replace element timing spans with metrics by logaretm in #19869
  • (bun) Add bunRuntimeMetricsIntegration by chargome in #19979
  • (core) Support embedding APIs in google-genai by nicohrubec in #19797
  • (node) Add nodeRuntimeMetricsIntegration by chargome in #19923
  • (node-core) Add OTLP integration for node-core/light by andreiborza in #19729
  • (solid) Add route parametrization for Solid Router by andreiborza in #20031

Bug Fixes 🐛

Ci

  • Update validate-pr action to remove draft enforcement by stephanie-anderson in #20037
  • Update validate-pr action to remove draft enforcement by stephanie-anderson in #20035

Other

  • (core) Guard nullish response in supabase PostgREST handler by antonis in #20033
  • (e2e) Pin @opentelemetry/api to 1.9.0 in ts3.8 test app by logaretm in #19992
  • (node) Ensure startNewTrace propagates traceId in OTel environments by logaretm in #19963
  • (nuxt) Use virtual module for Nuxt pages data (SSR route parametrization) by s1gr1d in #20020
  • (opentelemetry) Convert seconds timestamps in span.end() to milliseconds by logaretm in #19958

Documentation 📚

  • (release) Update publishing-a-release.md by nicohrubec in #19982

Internal Changes 🔧

Core

  • Introduce instrumented method registry for AI integrations by nicohrubec in #19981
  • Consolidate getOperationName into one shared utility by nicohrubec in #19971

Deps

  • Bump amqplib from 0.10.7 to 0.10.9 by dependabot in #20000
  • Bump actions/upload-artifact from 6 to 7 by dependabot in #19569
  • Bump srvx from 0.11.12 to 0.11.13 by dependabot in #20001
  • Bump @apollo/server from 5.4.0 to 5.5.0 by dependabot in #20007

Deps Dev

  • Remove esbuild override in astro-5-cf-workers E2E test by isaacs in #20024
  • Bump node-forge from 1.3.2 to 1.4.0 by dependabot in #20012
  • Bump yaml from 2.8.2 to 2.8.3 by dependabot in #19985

Other

  • (browser) Reduce browser package bundle size by HazAT in #19856
  • (deno) Expand Deno E2E test coverage by chargome in #19957
  • (e2e) Add e2e tests for nodeRuntimeMetricsIntegration by chargome in #19989

🤖 This preview updates automatically when you update the PR.

@Lms24Lms24 self-assigned this Mar 27, 2026
'XMLHttpRequestUpload',
];
// Using a comma-separated string and split for smaller bundle size vs an array literal
const DEFAULT_EVENT_TARGET =

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.

I think this is fine though with gzip compression only makes a minimal difference. We can roll with it here because types don't depend on this array. We can always revert it with minimal size impact if we need it for type safety.

// Single source of truth: as const array provides both the runtime list and the type.
// Bundle file names are derived: strip 'Integration' suffix, lowercase.
// Exceptions (hyphenated bundle names) are listed in HYPHENATED_BUNDLES.
const LAZY_LOADABLE_NAMES = [

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.

I made a few changes here: We need the list here for type safety but not the full object as before. This should still save a few bytes in comparison to the initial change.

'createLangChainCallbackHandler',
] as const;

type LazyLoadableIntegrationName = (typeof LAZY_LOADABLE_NAMES)[number];

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.

TIL:

Image

@Lms24
Lms24 enabled auto-merge (squash) March 27, 2026 15:44
HazATand others added 3 commits March 30, 2026 12:31
A collection of small, safe optimizations across the browser package:
- helpers.ts: Rename internal `sentryWrapped` function to `sW` in the
wrap() helper. Update the frame stripping regex in core/stacktrace.ts
to match both names for backwards compatibility. Saves ~10B gzipped.
- breadcrumbs.ts: Remove unused `breadcrumbData` variable from the fetch
breadcrumb handler — it was constructed but never used in either branch.
- browserapierrors.ts: Encode DEFAULT_EVENT_TARGET as comma-separated
string.split() instead of array literal. Saves 51B raw.
- globalhandlers.ts: Remove redundant intermediate variable aliases in
_enhanceEventWithInitialFrame.
- detectBrowserExtension.ts: Replace array.some(startsWith) with a single
regex test for extension protocol detection.
- eventbuilder.ts: Simplify getErrorPropertyFromObject to use
Object.values().find() instead of manual for-in loop.
- lazyLoadIntegration.ts: Derive CDN bundle filenames from integration
names instead of storing duplicate key-value pairs. Uses a 3-entry
exceptions map for hyphenated names (replay-canvas, feedback-modal,
feedback-screenshot). Saves ~30B gzipped.
All changes are behavior-preserving. No public API modifications.
Co-Authored-By: Claude claude@anthropic.com
@Lms24
Lms24force-pushed the bundle-size/browser-cleanup branch from ccf6cb6 to aa4523cCompareMarch 30, 2026 10:31
@Lms24
Lms24 merged commit 738b3e7 into developMar 30, 2026
342 of 344 checks passed
@Lms24
Lms24 deleted the bundle-size/browser-cleanup branch March 30, 2026 11:41
Sign up for freeto 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

@HazAT@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

refactor(browser): Reduce browser package bundle size - #19856

Merged
Lms24 merged 3 commits into
developfrom
bundle-size/browser-cleanup
Mar 30, 2026
Merged

refactor(browser): Reduce browser package bundle size#19856
Lms24 merged 3 commits into
developfrom
bundle-size/browser-cleanup

Conversation

@HazAT

@HazATHazAT commented Mar 17, 2026

Copy link
Copy Markdown
Member

Summary

A collection of small, safe optimizations across the browser package. Combined saves ~60 bytes gzipped.

Changes

UPDATE (@Lms24): Removed some initial changes, leaving them here for posterity

FileChangeImpact
helpers.ts + stacktrace.tsRename internal sentryWrappedsW in wrap(). Update frame stripping regex to match both names.10B gzip
breadcrumbs.tsRemove unused breadcrumbData variable from fetch handlerdead code
browserapierrors.tsEncode DEFAULT_EVENT_TARGET as string.split(",") instead of array literal51B raw
globalhandlers.tsRemove redundant intermediate variable aliases in _enhanceEventWithInitialFramecleaner code
detectBrowserExtension.tsReplace array.some(startsWith) with single regex test~3B gzip
eventbuilder.tsSimplify getErrorPropertyFromObject to Object.values().find()~9B gzip
lazyLoadIntegration.tsDerive CDN bundle filenames from integration names list of integration names instead of storing duplicate key-value pairs~30B gzip

lazyLoadIntegration detail

The LazyLoadableIntegrations object stored 21 key-value pairs where values were mostly derivable from keys (strip "Integration", lowercase). Replaced with:

  • An array of integration names (encoded as string.split(","))
  • A derivation function
  • A 3-entry exceptions map for hyphenated names (replay-canvas, feedback-modal, feedback-screenshot)

All changes are behavior-preserving. No public API modifications.

Part of #19833.

Co-Authored-By: Claude claude@anthropic.com

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Comment threadpackages/browser/src/helpers.ts Outdated
@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

⚠️Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

PathSize% ChangeChange
@sentry/browser25.64 kB-0.17%-43 B 🔽
@sentry/browser - with treeshaking flags24.13 kB-0.17%-40 B 🔽
@sentry/browser (incl. Tracing)42.15 kB-0.06%-25 B 🔽
@sentry/browser (incl. Tracing, Profiling)46.76 kB-0.07%-31 B 🔽
@sentry/browser (incl. Tracing, Replay)80.94 kB-0.06%-45 B 🔽
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags70.56 kB-0.06%-37 B 🔽
@sentry/browser (incl. Tracing, Replay with Canvas)85.65 kB-0.07%-53 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)97.91 kB-0.06%-56 B 🔽
@sentry/browser (incl. Feedback)42.42 kB-0.14%-57 B 🔽
@sentry/browser (incl. sendFeedback)30.3 kB-0.17%-51 B 🔽
@sentry/browser (incl. FeedbackAsync)35.28 kB-0.34%-120 B 🔽
@sentry/browser (incl. Metrics)26.95 kB-0.03%-6 B 🔽
@sentry/browser (incl. Logs)27.1 kB+0.01%+2 B 🔺
@sentry/browser (incl. Metrics & Logs)27.77 kB-0.02%-5 B 🔽
@sentry/react27.41 kB-0.15%-41 B 🔽
@sentry/react (incl. Tracing)44.48 kB-0.1%-41 B 🔽
@sentry/vue30.08 kB-0.18%-53 B 🔽
@sentry/vue (incl. Tracing)44.05 kB-0.08%-32 B 🔽
@sentry/svelte25.66 kB-0.16%-40 B 🔽
CDN Bundle28.31 kB-0.28%-79 B 🔽
CDN Bundle (incl. Tracing)43.1 kB-0.22%-94 B 🔽
CDN Bundle (incl. Logs, Metrics)29.68 kB-0.27%-80 B 🔽
CDN Bundle (incl. Tracing, Logs, Metrics)44.16 kB-0.22%-94 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics)68.48 kB-0.12%-79 B 🔽
CDN Bundle (incl. Tracing, Replay)80 kB-0.11%-81 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)81.04 kB-0.15%-115 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback)85.54 kB-0.09%-75 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.58 kB-0.12%-97 B 🔽
CDN Bundle - uncompressed82.66 kB-0.33%-266 B 🔽
CDN Bundle (incl. Tracing) - uncompressed127.81 kB-0.21%-266 B 🔽
CDN Bundle (incl. Logs, Metrics) - uncompressed86.81 kB-0.31%-266 B 🔽
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed131.22 kB-0.21%-266 B 🔽
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed209.79 kB-0.13%-266 B 🔽
CDN Bundle (incl. Tracing, Replay) - uncompressed244.68 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed248.08 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed257.59 kB-0.11%-266 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed260.98 kB-0.11%-266 B 🔽
@sentry/nextjs (client)46.89 kB-0.09%-41 B 🔽
@sentry/sveltekit (client)42.62 kB-0.13%-53 B 🔽
@sentry/node-core56.52 kB+0.04%+21 B 🔺
@sentry/node173.62 kB+0.02%+23 B 🔺
@sentry/node - without tracing96.54 kB+0.01%+7 B 🔺
@sentry/aws-serverless113.54 kB+0.01%+6 B 🔺

View base workflow run

@github-actions

github-actionsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,386--added
GET With Sentry1,60917%-added
GET With Sentry (error only)6,06765%-added
POST Baseline1,198--added
POST With Sentry56847%-added
POST With Sentry (error only)1,03887%-added
MYSQL Baseline3,320--added
MYSQL With Sentry44013%-added
MYSQL With Sentry (error only)2,64880%-added

@Lms24
Lms24force-pushed the bundle-size/browser-cleanup branch from 8691cef to 712481eCompareMarch 27, 2026 14:01
@Lms24
Lms24 requested review from a team as code ownersMarch 27, 2026 14:01
@Lms24
Lms24 changed the base branch from autoresearch/browser-bundle-size-2026-03-17 to developMarch 27, 2026 14:01
@github-actions

github-actionsBot commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

🟢 Patch (bug fixes)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

Deps

  • Bump babel-loader from 10.0.0 to 10.1.1 by dependabot in #19997
  • Bump handlebars from 4.7.7 to 4.7.9 by dependabot in #20008

Nuxt

  • Add middleware instrumentation compatibility for Nuxt 5 by s1gr1d in #19968
  • Support parametrized SSR routes in Nuxt 5 by s1gr1d in #19977

Other

  • (browser) Replace element timing spans with metrics by logaretm in #19869
  • (bun) Add bunRuntimeMetricsIntegration by chargome in #19979
  • (core) Support embedding APIs in google-genai by nicohrubec in #19797
  • (node) Add nodeRuntimeMetricsIntegration by chargome in #19923
  • (node-core) Add OTLP integration for node-core/light by andreiborza in #19729
  • (solid) Add route parametrization for Solid Router by andreiborza in #20031

Bug Fixes 🐛

Ci

  • Update validate-pr action to remove draft enforcement by stephanie-anderson in #20037
  • Update validate-pr action to remove draft enforcement by stephanie-anderson in #20035

Other

  • (core) Guard nullish response in supabase PostgREST handler by antonis in #20033
  • (e2e) Pin @opentelemetry/api to 1.9.0 in ts3.8 test app by logaretm in #19992
  • (node) Ensure startNewTrace propagates traceId in OTel environments by logaretm in #19963
  • (nuxt) Use virtual module for Nuxt pages data (SSR route parametrization) by s1gr1d in #20020
  • (opentelemetry) Convert seconds timestamps in span.end() to milliseconds by logaretm in #19958

Documentation 📚

  • (release) Update publishing-a-release.md by nicohrubec in #19982

Internal Changes 🔧

Core

  • Introduce instrumented method registry for AI integrations by nicohrubec in #19981
  • Consolidate getOperationName into one shared utility by nicohrubec in #19971

Deps

  • Bump amqplib from 0.10.7 to 0.10.9 by dependabot in #20000
  • Bump actions/upload-artifact from 6 to 7 by dependabot in #19569
  • Bump srvx from 0.11.12 to 0.11.13 by dependabot in #20001
  • Bump @apollo/server from 5.4.0 to 5.5.0 by dependabot in #20007

Deps Dev

  • Remove esbuild override in astro-5-cf-workers E2E test by isaacs in #20024
  • Bump node-forge from 1.3.2 to 1.4.0 by dependabot in #20012
  • Bump yaml from 2.8.2 to 2.8.3 by dependabot in #19985

Other

  • (browser) Reduce browser package bundle size by HazAT in #19856
  • (deno) Expand Deno E2E test coverage by chargome in #19957
  • (e2e) Add e2e tests for nodeRuntimeMetricsIntegration by chargome in #19989

🤖 This preview updates automatically when you update the PR.

@Lms24Lms24 self-assigned this Mar 27, 2026
'XMLHttpRequestUpload',
];
// Using a comma-separated string and split for smaller bundle size vs an array literal
const DEFAULT_EVENT_TARGET =

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.

I think this is fine though with gzip compression only makes a minimal difference. We can roll with it here because types don't depend on this array. We can always revert it with minimal size impact if we need it for type safety.

// Single source of truth: as const array provides both the runtime list and the type.
// Bundle file names are derived: strip 'Integration' suffix, lowercase.
// Exceptions (hyphenated bundle names) are listed in HYPHENATED_BUNDLES.
const LAZY_LOADABLE_NAMES = [

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.

I made a few changes here: We need the list here for type safety but not the full object as before. This should still save a few bytes in comparison to the initial change.

'createLangChainCallbackHandler',
] as const;

type LazyLoadableIntegrationName = (typeof LAZY_LOADABLE_NAMES)[number];

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.

TIL:

Image

@Lms24
Lms24 enabled auto-merge (squash) March 27, 2026 15:44
HazATand others added 3 commits March 30, 2026 12:31
A collection of small, safe optimizations across the browser package:
- helpers.ts: Rename internal `sentryWrapped` function to `sW` in the
wrap() helper. Update the frame stripping regex in core/stacktrace.ts
to match both names for backwards compatibility. Saves ~10B gzipped.
- breadcrumbs.ts: Remove unused `breadcrumbData` variable from the fetch
breadcrumb handler — it was constructed but never used in either branch.
- browserapierrors.ts: Encode DEFAULT_EVENT_TARGET as comma-separated
string.split() instead of array literal. Saves 51B raw.
- globalhandlers.ts: Remove redundant intermediate variable aliases in
_enhanceEventWithInitialFrame.
- detectBrowserExtension.ts: Replace array.some(startsWith) with a single
regex test for extension protocol detection.
- eventbuilder.ts: Simplify getErrorPropertyFromObject to use
Object.values().find() instead of manual for-in loop.
- lazyLoadIntegration.ts: Derive CDN bundle filenames from integration
names instead of storing duplicate key-value pairs. Uses a 3-entry
exceptions map for hyphenated names (replay-canvas, feedback-modal,
feedback-screenshot). Saves ~30B gzipped.
All changes are behavior-preserving. No public API modifications.
Co-Authored-By: Claude claude@anthropic.com
@Lms24
Lms24force-pushed the bundle-size/browser-cleanup branch from ccf6cb6 to aa4523cCompareMarch 30, 2026 10:31
@Lms24
Lms24 merged commit 738b3e7 into developMar 30, 2026
342 of 344 checks passed
@Lms24
Lms24 deleted the bundle-size/browser-cleanup branch March 30, 2026 11:41
Sign up for freeto 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

@HazAT@Lms24