Skip to content

perf: optimize V8 engine by eliminating redundant instantiation - #70

Merged
ammario merged 13 commits into
mainfrom
bench
Sep 24, 2025
Merged

perf: optimize V8 engine by eliminating redundant instantiation#70
ammario merged 13 commits into
mainfrom
bench

Conversation

@ammario

@ammarioammario commented Sep 24, 2025

Copy link
Copy Markdown
Member

Summary

Optimize V8 JavaScript rule engine performance by eliminating redundant engine instantiation, achieving ~61% performance improvement.

Changes

Performance Optimization

  • Eliminated duplicate V8JsRuleEngine creation in the evaluate() method
  • Reused existing engine instance via cloning instead of creating new instances
  • Removed redundant script compilation during validation
  • Kept isolate creation per-request for simplicity and stability (avoiding thread-local complexity)

Code Improvements

  • Extracted execute_with_isolate() as a static method for cleaner separation
  • Simplified the evaluate flow by reusing the existing engine instance
  • Maintained all existing functionality and test coverage

Performance Results

EngineBeforeAfterImprovement
V8 JS~1.2ms~550µs61% faster
Shell~1.6ms~1.6ms(unchanged)
Proc~70µs~70µs(unchanged)

The V8 engine is now 2.7x faster than the shell engine, though proc remains the performance leader.

Test Plan

  • All existing V8 tests pass
  • No stability issues or panics
  • Benchmarks show 61% performance improvement
  • No clippy warnings
  • Code formatted with cargo fmt

Implementation Notes

This is a minimal, safe optimization that avoids the complexity of thread-local storage or isolate pooling. The previous attempt with thread-local caching was reverted due to cleanup issues. This approach is simpler and achieves most of the performance benefit by just eliminating unnecessary work in the hot path.

🤖 Generated with Claude Code

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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.

Codex Review: Here are some suggestions.

Reply with @codex fix comments to fix any unresolved comments.

About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you open a pull request for review, mark a draft as ready, or comment "@codex review". If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex fix this CI failure" or "@codex address that feedback".

Comment threadsrc/rules/v8_js.rs
Comment thread.github/workflows/benchmark.yml Outdated
ammarioand others added 2 commits September 23, 2025 21:23
- Reverted thread-local isolate caching that caused test failures
- Kept the original simpler V8 implementation for better stability
- Added comprehensive test coverage from the refactor attempt
- All benchmarks still work with the original implementation
Removed duplicate V8JsRuleEngine creation in evaluate() method to reuse
the existing instance, resulting in ~61% performance improvement (from
~1.2ms to ~550µs per evaluation).
- Reuse existing engine instance via cloning in evaluate()
- Eliminate redundant script compilation during validation
- Keep isolate creation per-request for simplicity and stability
- Extract execute_with_isolate() as a static method for cleaner code
Performance improvements:
- V8 engine: 61% faster (1.2ms → 550µs)
- Now 2.7x faster than shell engine
- All tests passing with no stability issues
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
@ammarioammario changed the title perf: add benchmarks and optimize V8 rule engine with isolate cachingperf: optimize V8 engine by eliminating redundant instantiationSep 24, 2025
- Add Rust cache sharing with other Linux workflows using shared-key
- Use same runner (ubuntu-latest-8-cores) as test workflows for cache reuse
- Switch to dtolnay/rust-toolchain for consistency with other workflows
- Add build step to warm cache before running benchmarks
- Enable cache-targets and cache-all-crates for comprehensive caching
This allows the benchmark workflow to reuse cached dependencies from test
runs and vice versa, significantly reducing CI build times.
- Update per-request latency based on actual benchmark measurements
- JavaScript (V8): 550µs-1.3ms (previously ~100µs)
- Shell Script: 700µs-1.6ms (previously ~1-3ms)
- Line Processor: 70-90µs (previously ~100µs)
- Add performance note explaining V8 isolate creation overhead
- Clean up formatting in code examples
@ammario
ammario merged commit 179633b into mainSep 24, 2025
7 checks passed
@ammario
ammario deleted the bench branch September 24, 2025 17:51
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.

1 participant

@ammario
, '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: optimize V8 engine by eliminating redundant instantiation by ammario · Pull Request #70 · coder/httpjail · GitHub
Skip to content

perf: optimize V8 engine by eliminating redundant instantiation - #70

Merged
ammario merged 13 commits into
mainfrom
bench
Sep 24, 2025
Merged

perf: optimize V8 engine by eliminating redundant instantiation#70
ammario merged 13 commits into
mainfrom
bench

Conversation

@ammario

@ammarioammario commented Sep 24, 2025

Copy link
Copy Markdown
Member

Summary

Optimize V8 JavaScript rule engine performance by eliminating redundant engine instantiation, achieving ~61% performance improvement.

Changes

Performance Optimization

  • Eliminated duplicate V8JsRuleEngine creation in the evaluate() method
  • Reused existing engine instance via cloning instead of creating new instances
  • Removed redundant script compilation during validation
  • Kept isolate creation per-request for simplicity and stability (avoiding thread-local complexity)

Code Improvements

  • Extracted execute_with_isolate() as a static method for cleaner separation
  • Simplified the evaluate flow by reusing the existing engine instance
  • Maintained all existing functionality and test coverage

Performance Results

EngineBeforeAfterImprovement
V8 JS~1.2ms~550µs61% faster
Shell~1.6ms~1.6ms(unchanged)
Proc~70µs~70µs(unchanged)

The V8 engine is now 2.7x faster than the shell engine, though proc remains the performance leader.

Test Plan

  • All existing V8 tests pass
  • No stability issues or panics
  • Benchmarks show 61% performance improvement
  • No clippy warnings
  • Code formatted with cargo fmt

Implementation Notes

This is a minimal, safe optimization that avoids the complexity of thread-local storage or isolate pooling. The previous attempt with thread-local caching was reverted due to cleanup issues. This approach is simpler and achieves most of the performance benefit by just eliminating unnecessary work in the hot path.

🤖 Generated with Claude Code

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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.

Codex Review: Here are some suggestions.

Reply with @codex fix comments to fix any unresolved comments.

About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you open a pull request for review, mark a draft as ready, or comment "@codex review". If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex fix this CI failure" or "@codex address that feedback".

Comment threadsrc/rules/v8_js.rs
Comment thread.github/workflows/benchmark.yml Outdated
ammarioand others added 2 commits September 23, 2025 21:23
- Reverted thread-local isolate caching that caused test failures
- Kept the original simpler V8 implementation for better stability
- Added comprehensive test coverage from the refactor attempt
- All benchmarks still work with the original implementation
Removed duplicate V8JsRuleEngine creation in evaluate() method to reuse
the existing instance, resulting in ~61% performance improvement (from
~1.2ms to ~550µs per evaluation).
- Reuse existing engine instance via cloning in evaluate()
- Eliminate redundant script compilation during validation
- Keep isolate creation per-request for simplicity and stability
- Extract execute_with_isolate() as a static method for cleaner code
Performance improvements:
- V8 engine: 61% faster (1.2ms → 550µs)
- Now 2.7x faster than shell engine
- All tests passing with no stability issues
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
@ammarioammario changed the title perf: add benchmarks and optimize V8 rule engine with isolate cachingperf: optimize V8 engine by eliminating redundant instantiationSep 24, 2025
- Add Rust cache sharing with other Linux workflows using shared-key
- Use same runner (ubuntu-latest-8-cores) as test workflows for cache reuse
- Switch to dtolnay/rust-toolchain for consistency with other workflows
- Add build step to warm cache before running benchmarks
- Enable cache-targets and cache-all-crates for comprehensive caching
This allows the benchmark workflow to reuse cached dependencies from test
runs and vice versa, significantly reducing CI build times.
- Update per-request latency based on actual benchmark measurements
- JavaScript (V8): 550µs-1.3ms (previously ~100µs)
- Shell Script: 700µs-1.6ms (previously ~1-3ms)
- Line Processor: 70-90µs (previously ~100µs)
- Add performance note explaining V8 isolate creation overhead
- Clean up formatting in code examples
@ammario
ammario merged commit 179633b into mainSep 24, 2025
7 checks passed
@ammario
ammario deleted the bench branch September 24, 2025 17:51
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.

1 participant

@ammario
, '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: optimize V8 engine by eliminating redundant instantiation by ammario · Pull Request #70 · coder/httpjail · GitHub
Skip to content

perf: optimize V8 engine by eliminating redundant instantiation - #70

Merged
ammario merged 13 commits into
mainfrom
bench
Sep 24, 2025
Merged

perf: optimize V8 engine by eliminating redundant instantiation#70
ammario merged 13 commits into
mainfrom
bench

Conversation

@ammario

@ammarioammario commented Sep 24, 2025

Copy link
Copy Markdown
Member

Summary

Optimize V8 JavaScript rule engine performance by eliminating redundant engine instantiation, achieving ~61% performance improvement.

Changes

Performance Optimization

  • Eliminated duplicate V8JsRuleEngine creation in the evaluate() method
  • Reused existing engine instance via cloning instead of creating new instances
  • Removed redundant script compilation during validation
  • Kept isolate creation per-request for simplicity and stability (avoiding thread-local complexity)

Code Improvements

  • Extracted execute_with_isolate() as a static method for cleaner separation
  • Simplified the evaluate flow by reusing the existing engine instance
  • Maintained all existing functionality and test coverage

Performance Results

EngineBeforeAfterImprovement
V8 JS~1.2ms~550µs61% faster
Shell~1.6ms~1.6ms(unchanged)
Proc~70µs~70µs(unchanged)

The V8 engine is now 2.7x faster than the shell engine, though proc remains the performance leader.

Test Plan

  • All existing V8 tests pass
  • No stability issues or panics
  • Benchmarks show 61% performance improvement
  • No clippy warnings
  • Code formatted with cargo fmt

Implementation Notes

This is a minimal, safe optimization that avoids the complexity of thread-local storage or isolate pooling. The previous attempt with thread-local caching was reverted due to cleanup issues. This approach is simpler and achieves most of the performance benefit by just eliminating unnecessary work in the hot path.

🤖 Generated with Claude Code

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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.

Codex Review: Here are some suggestions.

Reply with @codex fix comments to fix any unresolved comments.

About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you open a pull request for review, mark a draft as ready, or comment "@codex review". If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex fix this CI failure" or "@codex address that feedback".

Comment threadsrc/rules/v8_js.rs
Comment thread.github/workflows/benchmark.yml Outdated
ammarioand others added 2 commits September 23, 2025 21:23
- Reverted thread-local isolate caching that caused test failures
- Kept the original simpler V8 implementation for better stability
- Added comprehensive test coverage from the refactor attempt
- All benchmarks still work with the original implementation
Removed duplicate V8JsRuleEngine creation in evaluate() method to reuse
the existing instance, resulting in ~61% performance improvement (from
~1.2ms to ~550µs per evaluation).
- Reuse existing engine instance via cloning in evaluate()
- Eliminate redundant script compilation during validation
- Keep isolate creation per-request for simplicity and stability
- Extract execute_with_isolate() as a static method for cleaner code
Performance improvements:
- V8 engine: 61% faster (1.2ms → 550µs)
- Now 2.7x faster than shell engine
- All tests passing with no stability issues
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
@ammarioammario changed the title perf: add benchmarks and optimize V8 rule engine with isolate cachingperf: optimize V8 engine by eliminating redundant instantiationSep 24, 2025
- Add Rust cache sharing with other Linux workflows using shared-key
- Use same runner (ubuntu-latest-8-cores) as test workflows for cache reuse
- Switch to dtolnay/rust-toolchain for consistency with other workflows
- Add build step to warm cache before running benchmarks
- Enable cache-targets and cache-all-crates for comprehensive caching
This allows the benchmark workflow to reuse cached dependencies from test
runs and vice versa, significantly reducing CI build times.
- Update per-request latency based on actual benchmark measurements
- JavaScript (V8): 550µs-1.3ms (previously ~100µs)
- Shell Script: 700µs-1.6ms (previously ~1-3ms)
- Line Processor: 70-90µs (previously ~100µs)
- Add performance note explaining V8 isolate creation overhead
- Clean up formatting in code examples
@ammario
ammario merged commit 179633b into mainSep 24, 2025
7 checks passed
@ammario
ammario deleted the bench branch September 24, 2025 17:51
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.

1 participant

@ammario
, '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: optimize V8 engine by eliminating redundant instantiation by ammario · Pull Request #70 · coder/httpjail · GitHub
Skip to content

perf: optimize V8 engine by eliminating redundant instantiation - #70

Merged
ammario merged 13 commits into
mainfrom
bench
Sep 24, 2025
Merged

perf: optimize V8 engine by eliminating redundant instantiation#70
ammario merged 13 commits into
mainfrom
bench

Conversation

@ammario

@ammarioammario commented Sep 24, 2025

Copy link
Copy Markdown
Member

Summary

Optimize V8 JavaScript rule engine performance by eliminating redundant engine instantiation, achieving ~61% performance improvement.

Changes

Performance Optimization

  • Eliminated duplicate V8JsRuleEngine creation in the evaluate() method
  • Reused existing engine instance via cloning instead of creating new instances
  • Removed redundant script compilation during validation
  • Kept isolate creation per-request for simplicity and stability (avoiding thread-local complexity)

Code Improvements

  • Extracted execute_with_isolate() as a static method for cleaner separation
  • Simplified the evaluate flow by reusing the existing engine instance
  • Maintained all existing functionality and test coverage

Performance Results

EngineBeforeAfterImprovement
V8 JS~1.2ms~550µs61% faster
Shell~1.6ms~1.6ms(unchanged)
Proc~70µs~70µs(unchanged)

The V8 engine is now 2.7x faster than the shell engine, though proc remains the performance leader.

Test Plan

  • All existing V8 tests pass
  • No stability issues or panics
  • Benchmarks show 61% performance improvement
  • No clippy warnings
  • Code formatted with cargo fmt

Implementation Notes

This is a minimal, safe optimization that avoids the complexity of thread-local storage or isolate pooling. The previous attempt with thread-local caching was reverted due to cleanup issues. This approach is simpler and achieves most of the performance benefit by just eliminating unnecessary work in the hot path.

🤖 Generated with Claude Code

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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.

Codex Review: Here are some suggestions.

Reply with @codex fix comments to fix any unresolved comments.

About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you open a pull request for review, mark a draft as ready, or comment "@codex review". If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex fix this CI failure" or "@codex address that feedback".

Comment threadsrc/rules/v8_js.rs
Comment thread.github/workflows/benchmark.yml Outdated
ammarioand others added 2 commits September 23, 2025 21:23
- Reverted thread-local isolate caching that caused test failures
- Kept the original simpler V8 implementation for better stability
- Added comprehensive test coverage from the refactor attempt
- All benchmarks still work with the original implementation
Removed duplicate V8JsRuleEngine creation in evaluate() method to reuse
the existing instance, resulting in ~61% performance improvement (from
~1.2ms to ~550µs per evaluation).
- Reuse existing engine instance via cloning in evaluate()
- Eliminate redundant script compilation during validation
- Keep isolate creation per-request for simplicity and stability
- Extract execute_with_isolate() as a static method for cleaner code
Performance improvements:
- V8 engine: 61% faster (1.2ms → 550µs)
- Now 2.7x faster than shell engine
- All tests passing with no stability issues
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
@ammarioammario changed the title perf: add benchmarks and optimize V8 rule engine with isolate cachingperf: optimize V8 engine by eliminating redundant instantiationSep 24, 2025
- Add Rust cache sharing with other Linux workflows using shared-key
- Use same runner (ubuntu-latest-8-cores) as test workflows for cache reuse
- Switch to dtolnay/rust-toolchain for consistency with other workflows
- Add build step to warm cache before running benchmarks
- Enable cache-targets and cache-all-crates for comprehensive caching
This allows the benchmark workflow to reuse cached dependencies from test
runs and vice versa, significantly reducing CI build times.
- Update per-request latency based on actual benchmark measurements
- JavaScript (V8): 550µs-1.3ms (previously ~100µs)
- Shell Script: 700µs-1.6ms (previously ~1-3ms)
- Line Processor: 70-90µs (previously ~100µs)
- Add performance note explaining V8 isolate creation overhead
- Clean up formatting in code examples
@ammario
ammario merged commit 179633b into mainSep 24, 2025
7 checks passed
@ammario
ammario deleted the bench branch September 24, 2025 17:51
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.

1 participant

@ammario
, '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: optimize V8 engine by eliminating redundant instantiation by ammario · Pull Request #70 · coder/httpjail · GitHub
Skip to content

perf: optimize V8 engine by eliminating redundant instantiation - #70

Merged
ammario merged 13 commits into
mainfrom
bench
Sep 24, 2025
Merged

perf: optimize V8 engine by eliminating redundant instantiation#70
ammario merged 13 commits into
mainfrom
bench

Conversation

@ammario

@ammarioammario commented Sep 24, 2025

Copy link
Copy Markdown
Member

Summary

Optimize V8 JavaScript rule engine performance by eliminating redundant engine instantiation, achieving ~61% performance improvement.

Changes

Performance Optimization

  • Eliminated duplicate V8JsRuleEngine creation in the evaluate() method
  • Reused existing engine instance via cloning instead of creating new instances
  • Removed redundant script compilation during validation
  • Kept isolate creation per-request for simplicity and stability (avoiding thread-local complexity)

Code Improvements

  • Extracted execute_with_isolate() as a static method for cleaner separation
  • Simplified the evaluate flow by reusing the existing engine instance
  • Maintained all existing functionality and test coverage

Performance Results

EngineBeforeAfterImprovement
V8 JS~1.2ms~550µs61% faster
Shell~1.6ms~1.6ms(unchanged)
Proc~70µs~70µs(unchanged)

The V8 engine is now 2.7x faster than the shell engine, though proc remains the performance leader.

Test Plan

  • All existing V8 tests pass
  • No stability issues or panics
  • Benchmarks show 61% performance improvement
  • No clippy warnings
  • Code formatted with cargo fmt

Implementation Notes

This is a minimal, safe optimization that avoids the complexity of thread-local storage or isolate pooling. The previous attempt with thread-local caching was reverted due to cleanup issues. This approach is simpler and achieves most of the performance benefit by just eliminating unnecessary work in the hot path.

🤖 Generated with Claude Code

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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.

Codex Review: Here are some suggestions.

Reply with @codex fix comments to fix any unresolved comments.

About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you open a pull request for review, mark a draft as ready, or comment "@codex review". If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex fix this CI failure" or "@codex address that feedback".

Comment threadsrc/rules/v8_js.rs
Comment thread.github/workflows/benchmark.yml Outdated
ammarioand others added 2 commits September 23, 2025 21:23
- Reverted thread-local isolate caching that caused test failures
- Kept the original simpler V8 implementation for better stability
- Added comprehensive test coverage from the refactor attempt
- All benchmarks still work with the original implementation
Removed duplicate V8JsRuleEngine creation in evaluate() method to reuse
the existing instance, resulting in ~61% performance improvement (from
~1.2ms to ~550µs per evaluation).
- Reuse existing engine instance via cloning in evaluate()
- Eliminate redundant script compilation during validation
- Keep isolate creation per-request for simplicity and stability
- Extract execute_with_isolate() as a static method for cleaner code
Performance improvements:
- V8 engine: 61% faster (1.2ms → 550µs)
- Now 2.7x faster than shell engine
- All tests passing with no stability issues
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
@ammarioammario changed the title perf: add benchmarks and optimize V8 rule engine with isolate cachingperf: optimize V8 engine by eliminating redundant instantiationSep 24, 2025
- Add Rust cache sharing with other Linux workflows using shared-key
- Use same runner (ubuntu-latest-8-cores) as test workflows for cache reuse
- Switch to dtolnay/rust-toolchain for consistency with other workflows
- Add build step to warm cache before running benchmarks
- Enable cache-targets and cache-all-crates for comprehensive caching
This allows the benchmark workflow to reuse cached dependencies from test
runs and vice versa, significantly reducing CI build times.
- Update per-request latency based on actual benchmark measurements
- JavaScript (V8): 550µs-1.3ms (previously ~100µs)
- Shell Script: 700µs-1.6ms (previously ~1-3ms)
- Line Processor: 70-90µs (previously ~100µs)
- Add performance note explaining V8 isolate creation overhead
- Clean up formatting in code examples
@ammario
ammario merged commit 179633b into mainSep 24, 2025
7 checks passed
@ammario
ammario deleted the bench branch September 24, 2025 17:51
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.

1 participant

@ammario
, '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: optimize V8 engine by eliminating redundant instantiation by ammario · Pull Request #70 · coder/httpjail · GitHub
Skip to content

perf: optimize V8 engine by eliminating redundant instantiation - #70

Merged
ammario merged 13 commits into
mainfrom
bench
Sep 24, 2025
Merged

perf: optimize V8 engine by eliminating redundant instantiation#70
ammario merged 13 commits into
mainfrom
bench

Conversation

@ammario

@ammarioammario commented Sep 24, 2025

Copy link
Copy Markdown
Member

Summary

Optimize V8 JavaScript rule engine performance by eliminating redundant engine instantiation, achieving ~61% performance improvement.

Changes

Performance Optimization

  • Eliminated duplicate V8JsRuleEngine creation in the evaluate() method
  • Reused existing engine instance via cloning instead of creating new instances
  • Removed redundant script compilation during validation
  • Kept isolate creation per-request for simplicity and stability (avoiding thread-local complexity)

Code Improvements

  • Extracted execute_with_isolate() as a static method for cleaner separation
  • Simplified the evaluate flow by reusing the existing engine instance
  • Maintained all existing functionality and test coverage

Performance Results

EngineBeforeAfterImprovement
V8 JS~1.2ms~550µs61% faster
Shell~1.6ms~1.6ms(unchanged)
Proc~70µs~70µs(unchanged)

The V8 engine is now 2.7x faster than the shell engine, though proc remains the performance leader.

Test Plan

  • All existing V8 tests pass
  • No stability issues or panics
  • Benchmarks show 61% performance improvement
  • No clippy warnings
  • Code formatted with cargo fmt

Implementation Notes

This is a minimal, safe optimization that avoids the complexity of thread-local storage or isolate pooling. The previous attempt with thread-local caching was reverted due to cleanup issues. This approach is simpler and achieves most of the performance benefit by just eliminating unnecessary work in the hot path.

🤖 Generated with Claude Code

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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.

Codex Review: Here are some suggestions.

Reply with @codex fix comments to fix any unresolved comments.

About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you open a pull request for review, mark a draft as ready, or comment "@codex review". If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex fix this CI failure" or "@codex address that feedback".

Comment threadsrc/rules/v8_js.rs
Comment thread.github/workflows/benchmark.yml Outdated
ammarioand others added 2 commits September 23, 2025 21:23
- Reverted thread-local isolate caching that caused test failures
- Kept the original simpler V8 implementation for better stability
- Added comprehensive test coverage from the refactor attempt
- All benchmarks still work with the original implementation
Removed duplicate V8JsRuleEngine creation in evaluate() method to reuse
the existing instance, resulting in ~61% performance improvement (from
~1.2ms to ~550µs per evaluation).
- Reuse existing engine instance via cloning in evaluate()
- Eliminate redundant script compilation during validation
- Keep isolate creation per-request for simplicity and stability
- Extract execute_with_isolate() as a static method for cleaner code
Performance improvements:
- V8 engine: 61% faster (1.2ms → 550µs)
- Now 2.7x faster than shell engine
- All tests passing with no stability issues
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
@ammarioammario changed the title perf: add benchmarks and optimize V8 rule engine with isolate cachingperf: optimize V8 engine by eliminating redundant instantiationSep 24, 2025
- Add Rust cache sharing with other Linux workflows using shared-key
- Use same runner (ubuntu-latest-8-cores) as test workflows for cache reuse
- Switch to dtolnay/rust-toolchain for consistency with other workflows
- Add build step to warm cache before running benchmarks
- Enable cache-targets and cache-all-crates for comprehensive caching
This allows the benchmark workflow to reuse cached dependencies from test
runs and vice versa, significantly reducing CI build times.
- Update per-request latency based on actual benchmark measurements
- JavaScript (V8): 550µs-1.3ms (previously ~100µs)
- Shell Script: 700µs-1.6ms (previously ~1-3ms)
- Line Processor: 70-90µs (previously ~100µs)
- Add performance note explaining V8 isolate creation overhead
- Clean up formatting in code examples
@ammario
ammario merged commit 179633b into mainSep 24, 2025
7 checks passed
@ammario
ammario deleted the bench branch September 24, 2025 17:51
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.

1 participant

@ammario
, '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: optimize V8 engine by eliminating redundant instantiation by ammario · Pull Request #70 · coder/httpjail · GitHub
Skip to content

perf: optimize V8 engine by eliminating redundant instantiation - #70

Merged
ammario merged 13 commits into
mainfrom
bench
Sep 24, 2025
Merged

perf: optimize V8 engine by eliminating redundant instantiation#70
ammario merged 13 commits into
mainfrom
bench

Conversation

@ammario

@ammarioammario commented Sep 24, 2025

Copy link
Copy Markdown
Member

Summary

Optimize V8 JavaScript rule engine performance by eliminating redundant engine instantiation, achieving ~61% performance improvement.

Changes

Performance Optimization

  • Eliminated duplicate V8JsRuleEngine creation in the evaluate() method
  • Reused existing engine instance via cloning instead of creating new instances
  • Removed redundant script compilation during validation
  • Kept isolate creation per-request for simplicity and stability (avoiding thread-local complexity)

Code Improvements

  • Extracted execute_with_isolate() as a static method for cleaner separation
  • Simplified the evaluate flow by reusing the existing engine instance
  • Maintained all existing functionality and test coverage

Performance Results

EngineBeforeAfterImprovement
V8 JS~1.2ms~550µs61% faster
Shell~1.6ms~1.6ms(unchanged)
Proc~70µs~70µs(unchanged)

The V8 engine is now 2.7x faster than the shell engine, though proc remains the performance leader.

Test Plan

  • All existing V8 tests pass
  • No stability issues or panics
  • Benchmarks show 61% performance improvement
  • No clippy warnings
  • Code formatted with cargo fmt

Implementation Notes

This is a minimal, safe optimization that avoids the complexity of thread-local storage or isolate pooling. The previous attempt with thread-local caching was reverted due to cleanup issues. This approach is simpler and achieves most of the performance benefit by just eliminating unnecessary work in the hot path.

🤖 Generated with Claude Code

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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.

Codex Review: Here are some suggestions.

Reply with @codex fix comments to fix any unresolved comments.

About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you open a pull request for review, mark a draft as ready, or comment "@codex review". If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex fix this CI failure" or "@codex address that feedback".

Comment threadsrc/rules/v8_js.rs
Comment thread.github/workflows/benchmark.yml Outdated
ammarioand others added 2 commits September 23, 2025 21:23
- Reverted thread-local isolate caching that caused test failures
- Kept the original simpler V8 implementation for better stability
- Added comprehensive test coverage from the refactor attempt
- All benchmarks still work with the original implementation
Removed duplicate V8JsRuleEngine creation in evaluate() method to reuse
the existing instance, resulting in ~61% performance improvement (from
~1.2ms to ~550µs per evaluation).
- Reuse existing engine instance via cloning in evaluate()
- Eliminate redundant script compilation during validation
- Keep isolate creation per-request for simplicity and stability
- Extract execute_with_isolate() as a static method for cleaner code
Performance improvements:
- V8 engine: 61% faster (1.2ms → 550µs)
- Now 2.7x faster than shell engine
- All tests passing with no stability issues
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
@ammarioammario changed the title perf: add benchmarks and optimize V8 rule engine with isolate cachingperf: optimize V8 engine by eliminating redundant instantiationSep 24, 2025
- Add Rust cache sharing with other Linux workflows using shared-key
- Use same runner (ubuntu-latest-8-cores) as test workflows for cache reuse
- Switch to dtolnay/rust-toolchain for consistency with other workflows
- Add build step to warm cache before running benchmarks
- Enable cache-targets and cache-all-crates for comprehensive caching
This allows the benchmark workflow to reuse cached dependencies from test
runs and vice versa, significantly reducing CI build times.
- Update per-request latency based on actual benchmark measurements
- JavaScript (V8): 550µs-1.3ms (previously ~100µs)
- Shell Script: 700µs-1.6ms (previously ~1-3ms)
- Line Processor: 70-90µs (previously ~100µs)
- Add performance note explaining V8 isolate creation overhead
- Clean up formatting in code examples
@ammario
ammario merged commit 179633b into mainSep 24, 2025
7 checks passed
@ammario
ammario deleted the bench branch September 24, 2025 17:51
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.

1 participant

@ammario
, '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: optimize V8 engine by eliminating redundant instantiation by ammario · Pull Request #70 · coder/httpjail · GitHub
Skip to content

perf: optimize V8 engine by eliminating redundant instantiation - #70

Merged
ammario merged 13 commits into
mainfrom
bench
Sep 24, 2025
Merged

perf: optimize V8 engine by eliminating redundant instantiation#70
ammario merged 13 commits into
mainfrom
bench

Conversation

@ammario

@ammarioammario commented Sep 24, 2025

Copy link
Copy Markdown
Member

Summary

Optimize V8 JavaScript rule engine performance by eliminating redundant engine instantiation, achieving ~61% performance improvement.

Changes

Performance Optimization

  • Eliminated duplicate V8JsRuleEngine creation in the evaluate() method
  • Reused existing engine instance via cloning instead of creating new instances
  • Removed redundant script compilation during validation
  • Kept isolate creation per-request for simplicity and stability (avoiding thread-local complexity)

Code Improvements

  • Extracted execute_with_isolate() as a static method for cleaner separation
  • Simplified the evaluate flow by reusing the existing engine instance
  • Maintained all existing functionality and test coverage

Performance Results

EngineBeforeAfterImprovement
V8 JS~1.2ms~550µs61% faster
Shell~1.6ms~1.6ms(unchanged)
Proc~70µs~70µs(unchanged)

The V8 engine is now 2.7x faster than the shell engine, though proc remains the performance leader.

Test Plan

  • All existing V8 tests pass
  • No stability issues or panics
  • Benchmarks show 61% performance improvement
  • No clippy warnings
  • Code formatted with cargo fmt

Implementation Notes

This is a minimal, safe optimization that avoids the complexity of thread-local storage or isolate pooling. The previous attempt with thread-local caching was reverted due to cleanup issues. This approach is simpler and achieves most of the performance benefit by just eliminating unnecessary work in the hot path.

🤖 Generated with Claude Code

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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.

Codex Review: Here are some suggestions.

Reply with @codex fix comments to fix any unresolved comments.

About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you open a pull request for review, mark a draft as ready, or comment "@codex review". If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex fix this CI failure" or "@codex address that feedback".

Comment threadsrc/rules/v8_js.rs
Comment thread.github/workflows/benchmark.yml Outdated
ammarioand others added 2 commits September 23, 2025 21:23
- Reverted thread-local isolate caching that caused test failures
- Kept the original simpler V8 implementation for better stability
- Added comprehensive test coverage from the refactor attempt
- All benchmarks still work with the original implementation
Removed duplicate V8JsRuleEngine creation in evaluate() method to reuse
the existing instance, resulting in ~61% performance improvement (from
~1.2ms to ~550µs per evaluation).
- Reuse existing engine instance via cloning in evaluate()
- Eliminate redundant script compilation during validation
- Keep isolate creation per-request for simplicity and stability
- Extract execute_with_isolate() as a static method for cleaner code
Performance improvements:
- V8 engine: 61% faster (1.2ms → 550µs)
- Now 2.7x faster than shell engine
- All tests passing with no stability issues
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
@ammarioammario changed the title perf: add benchmarks and optimize V8 rule engine with isolate cachingperf: optimize V8 engine by eliminating redundant instantiationSep 24, 2025
- Add Rust cache sharing with other Linux workflows using shared-key
- Use same runner (ubuntu-latest-8-cores) as test workflows for cache reuse
- Switch to dtolnay/rust-toolchain for consistency with other workflows
- Add build step to warm cache before running benchmarks
- Enable cache-targets and cache-all-crates for comprehensive caching
This allows the benchmark workflow to reuse cached dependencies from test
runs and vice versa, significantly reducing CI build times.
- Update per-request latency based on actual benchmark measurements
- JavaScript (V8): 550µs-1.3ms (previously ~100µs)
- Shell Script: 700µs-1.6ms (previously ~1-3ms)
- Line Processor: 70-90µs (previously ~100µs)
- Add performance note explaining V8 isolate creation overhead
- Clean up formatting in code examples
@ammario
ammario merged commit 179633b into mainSep 24, 2025
7 checks passed
@ammario
ammario deleted the bench branch September 24, 2025 17:51
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.

1 participant

@ammario