Skip to content

perf(core): Remove usage of addNonEnumerableProperty from span utils - #15765

Closed
AbhiPrasad wants to merge 4 commits into
developfrom
abhi-remove-addNonEnumerableProperty-from-span-utils
Closed

perf(core): Remove usage of addNonEnumerableProperty from span utils#15765
AbhiPrasad wants to merge 4 commits into
developfrom
abhi-remove-addNonEnumerableProperty-from-span-utils

Conversation

@AbhiPrasad

Copy link
Copy Markdown
Contributor

ref #15725 (comment)

addNonEnumerableProperty is pretty expensive because of Object.defineProperty, so this changes usage of span utils (which are called frequently) to avoid usage of addNonEnumerableProperty.

addNonEnumerableProperty is replaced with weak maps, which has the added benefit of being more GC friendly (addNonEnumerableProperty causes hard references to be created between the objects).

The only downside of switching to this approach is that we lose the try catch built into addNonEnumerableProperty, but I think thats fine given the nature of the changed methods.

@AbhiPrasad
AbhiPrasad requested review from a team and mydeaMarch 21, 2025 01:18
@AbhiPrasadAbhiPrasad self-assigned this Mar 21, 2025
@AbhiPrasad
AbhiPrasad requested review from andreiborza and removed request for a teamMarch 21, 2025 01:18
@github-actions

github-actionsBot commented Mar 21, 2025

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/browser23.2 KB-0.04%-8 B 🔽
@sentry/browser - with treeshaking flags23.01 KB-0.03%-6 B 🔽
@sentry/browser (incl. Tracing)36.6 KB-0.04%-12 B 🔽
@sentry/browser (incl. Tracing, Replay)73.77 KB-0.03%-19 B 🔽
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags67.09 KB-0.04%-21 B 🔽
@sentry/browser (incl. Tracing, Replay with Canvas)78.4 KB-0.03%-20 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)90.98 KB-0.02%-18 B 🔽
@sentry/browser (incl. Feedback)40.33 KB-0.03%-10 B 🔽
@sentry/browser (incl. sendFeedback)27.84 KB-0.04%-9 B 🔽
@sentry/browser (incl. FeedbackAsync)32.62 KB-0.04%-12 B 🔽
@sentry/react24.99 KB-0.03%-7 B 🔽
@sentry/react (incl. Tracing)38.49 KB-0.06%-21 B 🔽
@sentry/vue27.42 KB-0.07%-18 B 🔽
@sentry/vue (incl. Tracing)38.28 KB-0.04%-15 B 🔽
@sentry/svelte23.23 KB-0.04%-8 B 🔽
CDN Bundle24.42 KB-0.06%-14 B 🔽
CDN Bundle (incl. Tracing)36.59 KB-0.09%-33 B 🔽
CDN Bundle (incl. Tracing, Replay)71.58 KB-0.04%-29 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback)76.79 KB-0.04%-30 B 🔽
CDN Bundle - uncompressed71.39 KB+0.01%+5 B 🔺
CDN Bundle (incl. Tracing) - uncompressed108.59 KB+0.01%+11 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed219.84 KB+0.01%+11 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed232.41 KB+0.01%+11 B 🔺
@sentry/nextjs (client)39.79 KB-0.05%-20 B 🔽
@sentry/sveltekit (client)37.01 KB-0.04%-15 B 🔽
@sentry/node142.58 KB-0.02%-24 B 🔽
@sentry/node - without tracing95.96 KB-0.03%-27 B 🔽
@sentry/aws-serverless120.32 KB-0.02%-24 B 🔽

View base workflow run

@andreiborzaandreiborza left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

AbhiPrasad added a commit that referenced this pull request Mar 21, 2025
ref
#15725 (comment)
Similar to the work done in
#15765 we can avoid
usage of `addNonEnumerableProperty` with usage of a `WeakSet`.
@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

No clue why this is failing.

I'm going to open up individual PRs for this, perhaps that will help

@AbhiPrasad
AbhiPrasadforce-pushed the abhi-remove-addNonEnumerableProperty-from-span-utils branch from a87a0de to a416137CompareMarch 24, 2025 17:15
@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Seems like #15811 is causing the issue. Reverting changes in packages/core/src/tracing/utils.ts.

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

nvm 😢

@AbhiPrasad
AbhiPrasad deleted the abhi-remove-addNonEnumerableProperty-from-span-utils branch March 24, 2025 19:02
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

@AbhiPrasad@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
perf(core): Remove usage of addNonEnumerableProperty from span utils by AbhiPrasad · Pull Request #15765 · getsentry/sentry-javascript · GitHub
Skip to content

perf(core): Remove usage of addNonEnumerableProperty from span utils - #15765

Closed
AbhiPrasad wants to merge 4 commits into
developfrom
abhi-remove-addNonEnumerableProperty-from-span-utils
Closed

perf(core): Remove usage of addNonEnumerableProperty from span utils#15765
AbhiPrasad wants to merge 4 commits into
developfrom
abhi-remove-addNonEnumerableProperty-from-span-utils

Conversation

@AbhiPrasad

Copy link
Copy Markdown
Contributor

ref #15725 (comment)

addNonEnumerableProperty is pretty expensive because of Object.defineProperty, so this changes usage of span utils (which are called frequently) to avoid usage of addNonEnumerableProperty.

addNonEnumerableProperty is replaced with weak maps, which has the added benefit of being more GC friendly (addNonEnumerableProperty causes hard references to be created between the objects).

The only downside of switching to this approach is that we lose the try catch built into addNonEnumerableProperty, but I think thats fine given the nature of the changed methods.

@AbhiPrasad
AbhiPrasad requested review from a team and mydeaMarch 21, 2025 01:18
@AbhiPrasadAbhiPrasad self-assigned this Mar 21, 2025
@AbhiPrasad
AbhiPrasad requested review from andreiborza and removed request for a teamMarch 21, 2025 01:18
@github-actions

github-actionsBot commented Mar 21, 2025

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/browser23.2 KB-0.04%-8 B 🔽
@sentry/browser - with treeshaking flags23.01 KB-0.03%-6 B 🔽
@sentry/browser (incl. Tracing)36.6 KB-0.04%-12 B 🔽
@sentry/browser (incl. Tracing, Replay)73.77 KB-0.03%-19 B 🔽
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags67.09 KB-0.04%-21 B 🔽
@sentry/browser (incl. Tracing, Replay with Canvas)78.4 KB-0.03%-20 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)90.98 KB-0.02%-18 B 🔽
@sentry/browser (incl. Feedback)40.33 KB-0.03%-10 B 🔽
@sentry/browser (incl. sendFeedback)27.84 KB-0.04%-9 B 🔽
@sentry/browser (incl. FeedbackAsync)32.62 KB-0.04%-12 B 🔽
@sentry/react24.99 KB-0.03%-7 B 🔽
@sentry/react (incl. Tracing)38.49 KB-0.06%-21 B 🔽
@sentry/vue27.42 KB-0.07%-18 B 🔽
@sentry/vue (incl. Tracing)38.28 KB-0.04%-15 B 🔽
@sentry/svelte23.23 KB-0.04%-8 B 🔽
CDN Bundle24.42 KB-0.06%-14 B 🔽
CDN Bundle (incl. Tracing)36.59 KB-0.09%-33 B 🔽
CDN Bundle (incl. Tracing, Replay)71.58 KB-0.04%-29 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback)76.79 KB-0.04%-30 B 🔽
CDN Bundle - uncompressed71.39 KB+0.01%+5 B 🔺
CDN Bundle (incl. Tracing) - uncompressed108.59 KB+0.01%+11 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed219.84 KB+0.01%+11 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed232.41 KB+0.01%+11 B 🔺
@sentry/nextjs (client)39.79 KB-0.05%-20 B 🔽
@sentry/sveltekit (client)37.01 KB-0.04%-15 B 🔽
@sentry/node142.58 KB-0.02%-24 B 🔽
@sentry/node - without tracing95.96 KB-0.03%-27 B 🔽
@sentry/aws-serverless120.32 KB-0.02%-24 B 🔽

View base workflow run

@andreiborzaandreiborza left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

AbhiPrasad added a commit that referenced this pull request Mar 21, 2025
ref
#15725 (comment)
Similar to the work done in
#15765 we can avoid
usage of `addNonEnumerableProperty` with usage of a `WeakSet`.
@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

No clue why this is failing.

I'm going to open up individual PRs for this, perhaps that will help

@AbhiPrasad
AbhiPrasadforce-pushed the abhi-remove-addNonEnumerableProperty-from-span-utils branch from a87a0de to a416137CompareMarch 24, 2025 17:15
@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Seems like #15811 is causing the issue. Reverting changes in packages/core/src/tracing/utils.ts.

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

nvm 😢

@AbhiPrasad
AbhiPrasad deleted the abhi-remove-addNonEnumerableProperty-from-span-utils branch March 24, 2025 19:02
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

@AbhiPrasad@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' perf(core): Remove usage of addNonEnumerableProperty from span utils by AbhiPrasad · Pull Request #15765 · getsentry/sentry-javascript · GitHub
Skip to content

perf(core): Remove usage of addNonEnumerableProperty from span utils - #15765

Closed
AbhiPrasad wants to merge 4 commits into
developfrom
abhi-remove-addNonEnumerableProperty-from-span-utils
Closed

perf(core): Remove usage of addNonEnumerableProperty from span utils#15765
AbhiPrasad wants to merge 4 commits into
developfrom
abhi-remove-addNonEnumerableProperty-from-span-utils

Conversation

@AbhiPrasad

Copy link
Copy Markdown
Contributor

ref #15725 (comment)

addNonEnumerableProperty is pretty expensive because of Object.defineProperty, so this changes usage of span utils (which are called frequently) to avoid usage of addNonEnumerableProperty.

addNonEnumerableProperty is replaced with weak maps, which has the added benefit of being more GC friendly (addNonEnumerableProperty causes hard references to be created between the objects).

The only downside of switching to this approach is that we lose the try catch built into addNonEnumerableProperty, but I think thats fine given the nature of the changed methods.

@AbhiPrasad
AbhiPrasad requested review from a team and mydeaMarch 21, 2025 01:18
@AbhiPrasadAbhiPrasad self-assigned this Mar 21, 2025
@AbhiPrasad
AbhiPrasad requested review from andreiborza and removed request for a teamMarch 21, 2025 01:18
@github-actions

github-actionsBot commented Mar 21, 2025

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/browser23.2 KB-0.04%-8 B 🔽
@sentry/browser - with treeshaking flags23.01 KB-0.03%-6 B 🔽
@sentry/browser (incl. Tracing)36.6 KB-0.04%-12 B 🔽
@sentry/browser (incl. Tracing, Replay)73.77 KB-0.03%-19 B 🔽
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags67.09 KB-0.04%-21 B 🔽
@sentry/browser (incl. Tracing, Replay with Canvas)78.4 KB-0.03%-20 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)90.98 KB-0.02%-18 B 🔽
@sentry/browser (incl. Feedback)40.33 KB-0.03%-10 B 🔽
@sentry/browser (incl. sendFeedback)27.84 KB-0.04%-9 B 🔽
@sentry/browser (incl. FeedbackAsync)32.62 KB-0.04%-12 B 🔽
@sentry/react24.99 KB-0.03%-7 B 🔽
@sentry/react (incl. Tracing)38.49 KB-0.06%-21 B 🔽
@sentry/vue27.42 KB-0.07%-18 B 🔽
@sentry/vue (incl. Tracing)38.28 KB-0.04%-15 B 🔽
@sentry/svelte23.23 KB-0.04%-8 B 🔽
CDN Bundle24.42 KB-0.06%-14 B 🔽
CDN Bundle (incl. Tracing)36.59 KB-0.09%-33 B 🔽
CDN Bundle (incl. Tracing, Replay)71.58 KB-0.04%-29 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback)76.79 KB-0.04%-30 B 🔽
CDN Bundle - uncompressed71.39 KB+0.01%+5 B 🔺
CDN Bundle (incl. Tracing) - uncompressed108.59 KB+0.01%+11 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed219.84 KB+0.01%+11 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed232.41 KB+0.01%+11 B 🔺
@sentry/nextjs (client)39.79 KB-0.05%-20 B 🔽
@sentry/sveltekit (client)37.01 KB-0.04%-15 B 🔽
@sentry/node142.58 KB-0.02%-24 B 🔽
@sentry/node - without tracing95.96 KB-0.03%-27 B 🔽
@sentry/aws-serverless120.32 KB-0.02%-24 B 🔽

View base workflow run

@andreiborzaandreiborza left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

AbhiPrasad added a commit that referenced this pull request Mar 21, 2025
ref
#15725 (comment)
Similar to the work done in
#15765 we can avoid
usage of `addNonEnumerableProperty` with usage of a `WeakSet`.
@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

No clue why this is failing.

I'm going to open up individual PRs for this, perhaps that will help

@AbhiPrasad
AbhiPrasadforce-pushed the abhi-remove-addNonEnumerableProperty-from-span-utils branch from a87a0de to a416137CompareMarch 24, 2025 17:15
@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Seems like #15811 is causing the issue. Reverting changes in packages/core/src/tracing/utils.ts.

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

nvm 😢

@AbhiPrasad
AbhiPrasad deleted the abhi-remove-addNonEnumerableProperty-from-span-utils branch March 24, 2025 19:02
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

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

perf(core): Remove usage of addNonEnumerableProperty from span utils - #15765

Closed
AbhiPrasad wants to merge 4 commits into
developfrom
abhi-remove-addNonEnumerableProperty-from-span-utils
Closed

perf(core): Remove usage of addNonEnumerableProperty from span utils#15765
AbhiPrasad wants to merge 4 commits into
developfrom
abhi-remove-addNonEnumerableProperty-from-span-utils

Conversation

@AbhiPrasad

Copy link
Copy Markdown
Contributor

ref #15725 (comment)

addNonEnumerableProperty is pretty expensive because of Object.defineProperty, so this changes usage of span utils (which are called frequently) to avoid usage of addNonEnumerableProperty.

addNonEnumerableProperty is replaced with weak maps, which has the added benefit of being more GC friendly (addNonEnumerableProperty causes hard references to be created between the objects).

The only downside of switching to this approach is that we lose the try catch built into addNonEnumerableProperty, but I think thats fine given the nature of the changed methods.

@AbhiPrasad
AbhiPrasad requested review from a team and mydeaMarch 21, 2025 01:18
@AbhiPrasadAbhiPrasad self-assigned this Mar 21, 2025
@AbhiPrasad
AbhiPrasad requested review from andreiborza and removed request for a teamMarch 21, 2025 01:18
@github-actions

github-actionsBot commented Mar 21, 2025

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/browser23.2 KB-0.04%-8 B 🔽
@sentry/browser - with treeshaking flags23.01 KB-0.03%-6 B 🔽
@sentry/browser (incl. Tracing)36.6 KB-0.04%-12 B 🔽
@sentry/browser (incl. Tracing, Replay)73.77 KB-0.03%-19 B 🔽
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags67.09 KB-0.04%-21 B 🔽
@sentry/browser (incl. Tracing, Replay with Canvas)78.4 KB-0.03%-20 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)90.98 KB-0.02%-18 B 🔽
@sentry/browser (incl. Feedback)40.33 KB-0.03%-10 B 🔽
@sentry/browser (incl. sendFeedback)27.84 KB-0.04%-9 B 🔽
@sentry/browser (incl. FeedbackAsync)32.62 KB-0.04%-12 B 🔽
@sentry/react24.99 KB-0.03%-7 B 🔽
@sentry/react (incl. Tracing)38.49 KB-0.06%-21 B 🔽
@sentry/vue27.42 KB-0.07%-18 B 🔽
@sentry/vue (incl. Tracing)38.28 KB-0.04%-15 B 🔽
@sentry/svelte23.23 KB-0.04%-8 B 🔽
CDN Bundle24.42 KB-0.06%-14 B 🔽
CDN Bundle (incl. Tracing)36.59 KB-0.09%-33 B 🔽
CDN Bundle (incl. Tracing, Replay)71.58 KB-0.04%-29 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback)76.79 KB-0.04%-30 B 🔽
CDN Bundle - uncompressed71.39 KB+0.01%+5 B 🔺
CDN Bundle (incl. Tracing) - uncompressed108.59 KB+0.01%+11 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed219.84 KB+0.01%+11 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed232.41 KB+0.01%+11 B 🔺
@sentry/nextjs (client)39.79 KB-0.05%-20 B 🔽
@sentry/sveltekit (client)37.01 KB-0.04%-15 B 🔽
@sentry/node142.58 KB-0.02%-24 B 🔽
@sentry/node - without tracing95.96 KB-0.03%-27 B 🔽
@sentry/aws-serverless120.32 KB-0.02%-24 B 🔽

View base workflow run

@andreiborzaandreiborza left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

AbhiPrasad added a commit that referenced this pull request Mar 21, 2025
ref
#15725 (comment)
Similar to the work done in
#15765 we can avoid
usage of `addNonEnumerableProperty` with usage of a `WeakSet`.
@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

No clue why this is failing.

I'm going to open up individual PRs for this, perhaps that will help

@AbhiPrasad
AbhiPrasadforce-pushed the abhi-remove-addNonEnumerableProperty-from-span-utils branch from a87a0de to a416137CompareMarch 24, 2025 17:15
@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Seems like #15811 is causing the issue. Reverting changes in packages/core/src/tracing/utils.ts.

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

nvm 😢

@AbhiPrasad
AbhiPrasad deleted the abhi-remove-addNonEnumerableProperty-from-span-utils branch March 24, 2025 19:02
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

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

perf(core): Remove usage of addNonEnumerableProperty from span utils - #15765

Closed
AbhiPrasad wants to merge 4 commits into
developfrom
abhi-remove-addNonEnumerableProperty-from-span-utils
Closed

perf(core): Remove usage of addNonEnumerableProperty from span utils#15765
AbhiPrasad wants to merge 4 commits into
developfrom
abhi-remove-addNonEnumerableProperty-from-span-utils

Conversation

@AbhiPrasad

Copy link
Copy Markdown
Contributor

ref #15725 (comment)

addNonEnumerableProperty is pretty expensive because of Object.defineProperty, so this changes usage of span utils (which are called frequently) to avoid usage of addNonEnumerableProperty.

addNonEnumerableProperty is replaced with weak maps, which has the added benefit of being more GC friendly (addNonEnumerableProperty causes hard references to be created between the objects).

The only downside of switching to this approach is that we lose the try catch built into addNonEnumerableProperty, but I think thats fine given the nature of the changed methods.

@AbhiPrasad
AbhiPrasad requested review from a team and mydeaMarch 21, 2025 01:18
@AbhiPrasadAbhiPrasad self-assigned this Mar 21, 2025
@AbhiPrasad
AbhiPrasad requested review from andreiborza and removed request for a teamMarch 21, 2025 01:18
@github-actions

github-actionsBot commented Mar 21, 2025

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/browser23.2 KB-0.04%-8 B 🔽
@sentry/browser - with treeshaking flags23.01 KB-0.03%-6 B 🔽
@sentry/browser (incl. Tracing)36.6 KB-0.04%-12 B 🔽
@sentry/browser (incl. Tracing, Replay)73.77 KB-0.03%-19 B 🔽
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags67.09 KB-0.04%-21 B 🔽
@sentry/browser (incl. Tracing, Replay with Canvas)78.4 KB-0.03%-20 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)90.98 KB-0.02%-18 B 🔽
@sentry/browser (incl. Feedback)40.33 KB-0.03%-10 B 🔽
@sentry/browser (incl. sendFeedback)27.84 KB-0.04%-9 B 🔽
@sentry/browser (incl. FeedbackAsync)32.62 KB-0.04%-12 B 🔽
@sentry/react24.99 KB-0.03%-7 B 🔽
@sentry/react (incl. Tracing)38.49 KB-0.06%-21 B 🔽
@sentry/vue27.42 KB-0.07%-18 B 🔽
@sentry/vue (incl. Tracing)38.28 KB-0.04%-15 B 🔽
@sentry/svelte23.23 KB-0.04%-8 B 🔽
CDN Bundle24.42 KB-0.06%-14 B 🔽
CDN Bundle (incl. Tracing)36.59 KB-0.09%-33 B 🔽
CDN Bundle (incl. Tracing, Replay)71.58 KB-0.04%-29 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback)76.79 KB-0.04%-30 B 🔽
CDN Bundle - uncompressed71.39 KB+0.01%+5 B 🔺
CDN Bundle (incl. Tracing) - uncompressed108.59 KB+0.01%+11 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed219.84 KB+0.01%+11 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed232.41 KB+0.01%+11 B 🔺
@sentry/nextjs (client)39.79 KB-0.05%-20 B 🔽
@sentry/sveltekit (client)37.01 KB-0.04%-15 B 🔽
@sentry/node142.58 KB-0.02%-24 B 🔽
@sentry/node - without tracing95.96 KB-0.03%-27 B 🔽
@sentry/aws-serverless120.32 KB-0.02%-24 B 🔽

View base workflow run

@andreiborzaandreiborza left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

AbhiPrasad added a commit that referenced this pull request Mar 21, 2025
ref
#15725 (comment)
Similar to the work done in
#15765 we can avoid
usage of `addNonEnumerableProperty` with usage of a `WeakSet`.
@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

No clue why this is failing.

I'm going to open up individual PRs for this, perhaps that will help

@AbhiPrasad
AbhiPrasadforce-pushed the abhi-remove-addNonEnumerableProperty-from-span-utils branch from a87a0de to a416137CompareMarch 24, 2025 17:15
@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Seems like #15811 is causing the issue. Reverting changes in packages/core/src/tracing/utils.ts.

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

nvm 😢

@AbhiPrasad
AbhiPrasad deleted the abhi-remove-addNonEnumerableProperty-from-span-utils branch March 24, 2025 19:02
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

@AbhiPrasad@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' perf(core): Remove usage of addNonEnumerableProperty from span utils by AbhiPrasad · Pull Request #15765 · getsentry/sentry-javascript · GitHub
Skip to content

perf(core): Remove usage of addNonEnumerableProperty from span utils - #15765

Closed
AbhiPrasad wants to merge 4 commits into
developfrom
abhi-remove-addNonEnumerableProperty-from-span-utils
Closed

perf(core): Remove usage of addNonEnumerableProperty from span utils#15765
AbhiPrasad wants to merge 4 commits into
developfrom
abhi-remove-addNonEnumerableProperty-from-span-utils

Conversation

@AbhiPrasad

Copy link
Copy Markdown
Contributor

ref #15725 (comment)

addNonEnumerableProperty is pretty expensive because of Object.defineProperty, so this changes usage of span utils (which are called frequently) to avoid usage of addNonEnumerableProperty.

addNonEnumerableProperty is replaced with weak maps, which has the added benefit of being more GC friendly (addNonEnumerableProperty causes hard references to be created between the objects).

The only downside of switching to this approach is that we lose the try catch built into addNonEnumerableProperty, but I think thats fine given the nature of the changed methods.

@AbhiPrasad
AbhiPrasad requested review from a team and mydeaMarch 21, 2025 01:18
@AbhiPrasadAbhiPrasad self-assigned this Mar 21, 2025
@AbhiPrasad
AbhiPrasad requested review from andreiborza and removed request for a teamMarch 21, 2025 01:18
@github-actions

github-actionsBot commented Mar 21, 2025

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/browser23.2 KB-0.04%-8 B 🔽
@sentry/browser - with treeshaking flags23.01 KB-0.03%-6 B 🔽
@sentry/browser (incl. Tracing)36.6 KB-0.04%-12 B 🔽
@sentry/browser (incl. Tracing, Replay)73.77 KB-0.03%-19 B 🔽
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags67.09 KB-0.04%-21 B 🔽
@sentry/browser (incl. Tracing, Replay with Canvas)78.4 KB-0.03%-20 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)90.98 KB-0.02%-18 B 🔽
@sentry/browser (incl. Feedback)40.33 KB-0.03%-10 B 🔽
@sentry/browser (incl. sendFeedback)27.84 KB-0.04%-9 B 🔽
@sentry/browser (incl. FeedbackAsync)32.62 KB-0.04%-12 B 🔽
@sentry/react24.99 KB-0.03%-7 B 🔽
@sentry/react (incl. Tracing)38.49 KB-0.06%-21 B 🔽
@sentry/vue27.42 KB-0.07%-18 B 🔽
@sentry/vue (incl. Tracing)38.28 KB-0.04%-15 B 🔽
@sentry/svelte23.23 KB-0.04%-8 B 🔽
CDN Bundle24.42 KB-0.06%-14 B 🔽
CDN Bundle (incl. Tracing)36.59 KB-0.09%-33 B 🔽
CDN Bundle (incl. Tracing, Replay)71.58 KB-0.04%-29 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback)76.79 KB-0.04%-30 B 🔽
CDN Bundle - uncompressed71.39 KB+0.01%+5 B 🔺
CDN Bundle (incl. Tracing) - uncompressed108.59 KB+0.01%+11 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed219.84 KB+0.01%+11 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed232.41 KB+0.01%+11 B 🔺
@sentry/nextjs (client)39.79 KB-0.05%-20 B 🔽
@sentry/sveltekit (client)37.01 KB-0.04%-15 B 🔽
@sentry/node142.58 KB-0.02%-24 B 🔽
@sentry/node - without tracing95.96 KB-0.03%-27 B 🔽
@sentry/aws-serverless120.32 KB-0.02%-24 B 🔽

View base workflow run

@andreiborzaandreiborza left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

AbhiPrasad added a commit that referenced this pull request Mar 21, 2025
ref
#15725 (comment)
Similar to the work done in
#15765 we can avoid
usage of `addNonEnumerableProperty` with usage of a `WeakSet`.
@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

No clue why this is failing.

I'm going to open up individual PRs for this, perhaps that will help

@AbhiPrasad
AbhiPrasadforce-pushed the abhi-remove-addNonEnumerableProperty-from-span-utils branch from a87a0de to a416137CompareMarch 24, 2025 17:15
@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Seems like #15811 is causing the issue. Reverting changes in packages/core/src/tracing/utils.ts.

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

nvm 😢

@AbhiPrasad
AbhiPrasad deleted the abhi-remove-addNonEnumerableProperty-from-span-utils branch March 24, 2025 19:02
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

@AbhiPrasad@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' perf(core): Remove usage of addNonEnumerableProperty from span utils by AbhiPrasad · Pull Request #15765 · getsentry/sentry-javascript · GitHub
Skip to content

perf(core): Remove usage of addNonEnumerableProperty from span utils - #15765

Closed
AbhiPrasad wants to merge 4 commits into
developfrom
abhi-remove-addNonEnumerableProperty-from-span-utils
Closed

perf(core): Remove usage of addNonEnumerableProperty from span utils#15765
AbhiPrasad wants to merge 4 commits into
developfrom
abhi-remove-addNonEnumerableProperty-from-span-utils

Conversation

@AbhiPrasad

Copy link
Copy Markdown
Contributor

ref #15725 (comment)

addNonEnumerableProperty is pretty expensive because of Object.defineProperty, so this changes usage of span utils (which are called frequently) to avoid usage of addNonEnumerableProperty.

addNonEnumerableProperty is replaced with weak maps, which has the added benefit of being more GC friendly (addNonEnumerableProperty causes hard references to be created between the objects).

The only downside of switching to this approach is that we lose the try catch built into addNonEnumerableProperty, but I think thats fine given the nature of the changed methods.

@AbhiPrasad
AbhiPrasad requested review from a team and mydeaMarch 21, 2025 01:18
@AbhiPrasadAbhiPrasad self-assigned this Mar 21, 2025
@AbhiPrasad
AbhiPrasad requested review from andreiborza and removed request for a teamMarch 21, 2025 01:18
@github-actions

github-actionsBot commented Mar 21, 2025

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/browser23.2 KB-0.04%-8 B 🔽
@sentry/browser - with treeshaking flags23.01 KB-0.03%-6 B 🔽
@sentry/browser (incl. Tracing)36.6 KB-0.04%-12 B 🔽
@sentry/browser (incl. Tracing, Replay)73.77 KB-0.03%-19 B 🔽
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags67.09 KB-0.04%-21 B 🔽
@sentry/browser (incl. Tracing, Replay with Canvas)78.4 KB-0.03%-20 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)90.98 KB-0.02%-18 B 🔽
@sentry/browser (incl. Feedback)40.33 KB-0.03%-10 B 🔽
@sentry/browser (incl. sendFeedback)27.84 KB-0.04%-9 B 🔽
@sentry/browser (incl. FeedbackAsync)32.62 KB-0.04%-12 B 🔽
@sentry/react24.99 KB-0.03%-7 B 🔽
@sentry/react (incl. Tracing)38.49 KB-0.06%-21 B 🔽
@sentry/vue27.42 KB-0.07%-18 B 🔽
@sentry/vue (incl. Tracing)38.28 KB-0.04%-15 B 🔽
@sentry/svelte23.23 KB-0.04%-8 B 🔽
CDN Bundle24.42 KB-0.06%-14 B 🔽
CDN Bundle (incl. Tracing)36.59 KB-0.09%-33 B 🔽
CDN Bundle (incl. Tracing, Replay)71.58 KB-0.04%-29 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback)76.79 KB-0.04%-30 B 🔽
CDN Bundle - uncompressed71.39 KB+0.01%+5 B 🔺
CDN Bundle (incl. Tracing) - uncompressed108.59 KB+0.01%+11 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed219.84 KB+0.01%+11 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed232.41 KB+0.01%+11 B 🔺
@sentry/nextjs (client)39.79 KB-0.05%-20 B 🔽
@sentry/sveltekit (client)37.01 KB-0.04%-15 B 🔽
@sentry/node142.58 KB-0.02%-24 B 🔽
@sentry/node - without tracing95.96 KB-0.03%-27 B 🔽
@sentry/aws-serverless120.32 KB-0.02%-24 B 🔽

View base workflow run

@andreiborzaandreiborza left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

AbhiPrasad added a commit that referenced this pull request Mar 21, 2025
ref
#15725 (comment)
Similar to the work done in
#15765 we can avoid
usage of `addNonEnumerableProperty` with usage of a `WeakSet`.
@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

No clue why this is failing.

I'm going to open up individual PRs for this, perhaps that will help

@AbhiPrasad
AbhiPrasadforce-pushed the abhi-remove-addNonEnumerableProperty-from-span-utils branch from a87a0de to a416137CompareMarch 24, 2025 17:15
@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Seems like #15811 is causing the issue. Reverting changes in packages/core/src/tracing/utils.ts.

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

nvm 😢

@AbhiPrasad
AbhiPrasad deleted the abhi-remove-addNonEnumerableProperty-from-span-utils branch March 24, 2025 19:02
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

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

perf(core): Remove usage of addNonEnumerableProperty from span utils - #15765

Closed
AbhiPrasad wants to merge 4 commits into
developfrom
abhi-remove-addNonEnumerableProperty-from-span-utils
Closed

perf(core): Remove usage of addNonEnumerableProperty from span utils#15765
AbhiPrasad wants to merge 4 commits into
developfrom
abhi-remove-addNonEnumerableProperty-from-span-utils

Conversation

@AbhiPrasad

Copy link
Copy Markdown
Contributor

ref #15725 (comment)

addNonEnumerableProperty is pretty expensive because of Object.defineProperty, so this changes usage of span utils (which are called frequently) to avoid usage of addNonEnumerableProperty.

addNonEnumerableProperty is replaced with weak maps, which has the added benefit of being more GC friendly (addNonEnumerableProperty causes hard references to be created between the objects).

The only downside of switching to this approach is that we lose the try catch built into addNonEnumerableProperty, but I think thats fine given the nature of the changed methods.

@AbhiPrasad
AbhiPrasad requested review from a team and mydeaMarch 21, 2025 01:18
@AbhiPrasadAbhiPrasad self-assigned this Mar 21, 2025
@AbhiPrasad
AbhiPrasad requested review from andreiborza and removed request for a teamMarch 21, 2025 01:18
@github-actions

github-actionsBot commented Mar 21, 2025

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/browser23.2 KB-0.04%-8 B 🔽
@sentry/browser - with treeshaking flags23.01 KB-0.03%-6 B 🔽
@sentry/browser (incl. Tracing)36.6 KB-0.04%-12 B 🔽
@sentry/browser (incl. Tracing, Replay)73.77 KB-0.03%-19 B 🔽
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags67.09 KB-0.04%-21 B 🔽
@sentry/browser (incl. Tracing, Replay with Canvas)78.4 KB-0.03%-20 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)90.98 KB-0.02%-18 B 🔽
@sentry/browser (incl. Feedback)40.33 KB-0.03%-10 B 🔽
@sentry/browser (incl. sendFeedback)27.84 KB-0.04%-9 B 🔽
@sentry/browser (incl. FeedbackAsync)32.62 KB-0.04%-12 B 🔽
@sentry/react24.99 KB-0.03%-7 B 🔽
@sentry/react (incl. Tracing)38.49 KB-0.06%-21 B 🔽
@sentry/vue27.42 KB-0.07%-18 B 🔽
@sentry/vue (incl. Tracing)38.28 KB-0.04%-15 B 🔽
@sentry/svelte23.23 KB-0.04%-8 B 🔽
CDN Bundle24.42 KB-0.06%-14 B 🔽
CDN Bundle (incl. Tracing)36.59 KB-0.09%-33 B 🔽
CDN Bundle (incl. Tracing, Replay)71.58 KB-0.04%-29 B 🔽
CDN Bundle (incl. Tracing, Replay, Feedback)76.79 KB-0.04%-30 B 🔽
CDN Bundle - uncompressed71.39 KB+0.01%+5 B 🔺
CDN Bundle (incl. Tracing) - uncompressed108.59 KB+0.01%+11 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed219.84 KB+0.01%+11 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed232.41 KB+0.01%+11 B 🔺
@sentry/nextjs (client)39.79 KB-0.05%-20 B 🔽
@sentry/sveltekit (client)37.01 KB-0.04%-15 B 🔽
@sentry/node142.58 KB-0.02%-24 B 🔽
@sentry/node - without tracing95.96 KB-0.03%-27 B 🔽
@sentry/aws-serverless120.32 KB-0.02%-24 B 🔽

View base workflow run

@andreiborzaandreiborza left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

AbhiPrasad added a commit that referenced this pull request Mar 21, 2025
ref
#15725 (comment)
Similar to the work done in
#15765 we can avoid
usage of `addNonEnumerableProperty` with usage of a `WeakSet`.
@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

No clue why this is failing.

I'm going to open up individual PRs for this, perhaps that will help

@AbhiPrasad
AbhiPrasadforce-pushed the abhi-remove-addNonEnumerableProperty-from-span-utils branch from a87a0de to a416137CompareMarch 24, 2025 17:15
@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Seems like #15811 is causing the issue. Reverting changes in packages/core/src/tracing/utils.ts.

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

nvm 😢

@AbhiPrasad
AbhiPrasad deleted the abhi-remove-addNonEnumerableProperty-from-span-utils branch March 24, 2025 19:02
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

@AbhiPrasad@andreiborza