Skip to content

Conversation

@TimBeyer
Copy link
Owner

@TimBeyer TimBeyer commented Aug 8, 2025

Replace for...of loops with traditional for (let i = 0; ...) loops in performance-critical core algorithm files for better performance:

  • lib/core/data-structures.ts: capacity calculation loop
  • lib/core/problem-builder.ts: row constraint processing loop

…ithm

Replace for...of loops with traditional for (let i = 0; ...) loops in performance-critical core algorithm files for better performance:

- lib/core/data-structures.ts: capacity calculation loop
- lib/core/problem-builder.ts: row constraint processing loop

This optimization follows the performance-first approach outlined in CLAUDE.md and provides measurable performance improvements in benchmarks.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
@github-actions
Copy link
Contributor

github-actions bot commented Aug 8, 2025

🚀 Benchmark Results

Performance comparison against merge-base 10c4df9

Node.js 18

dancing-links@4.3.0 compare-benchmarks
npm run build:dev && node built/scripts/compare-benchmarks.js baseline-results-node18.json pr-results-node18.json

dancing-links@4.3.0 build:dev
npm run clean && tsc -p tsconfig.dev.json

dancing-links@4.3.0 clean
rimraf built

🚀 Benchmark Results

All solutions to the sudoku

Library Baseline (ops/sec) PR (ops/sec) Change Performance
dancing-links (binary) 2,608.127 ±0.25% 2,637.764 ±1.19% +1.14% ➡️ No significant change
dancing-links (sparse) 6,178.458 ±0.71% 6,339.068 ±0.46% +2.60% ✅ Improvement
dancing-links generator 6,203.498 ±0.39% 6,319.032 ±0.52% +1.86% ➡️ No significant change
dancing-links template 6,096.905 ±1.39% 6,239.891 ±0.89% +2.35% ✅ Improvement

Finding one pentomino tiling on a 6x10 field

Library Baseline (ops/sec) PR (ops/sec) Change Performance
dancing-links (binary) 145.03 ±0.32% 145.504 ±0.19% +0.33% ➡️ No significant change
dancing-links (sparse) 149.779 ±0.39% 150.64 ±0.25% +0.57% ➡️ No significant change
dancing-links generator 150.316 ±0.17% 151.059 ±0.29% +0.49% ➡️ No significant change
dancing-links template 150.098 ±0.41% 150.454 ±0.52% +0.24% ➡️ No significant change

Finding ten pentomino tilings on a 6x10 field

Library Baseline (ops/sec) PR (ops/sec) Change Performance
dancing-links (binary) 22.102 ±1.40% 22.245 ±0.42% +0.65% ➡️ No significant change
dancing-links (sparse) 22.265 ±1.13% 22.483 ±0.39% +0.98% ➡️ No significant change
dancing-links generator 22.41 ±0.44% 22.449 ±0.28% +0.18% ➡️ No significant change
dancing-links template 22.362 ±0.82% 22.38 ±0.70% +0.08% ➡️ No significant change

Finding one hundred pentomino tilings on a 6x10 field

Library Baseline (ops/sec) PR (ops/sec) Change Performance
dancing-links (binary) 3.152 ±0.54% 3.157 ±0.26% +0.17% ➡️ No significant change
dancing-links (sparse) 3.168 ±0.30% 3.149 ±1.61% -0.60% ➡️ No significant change
dancing-links generator 3.164 ±0.31% 3.143 ±0.64% -0.68% ➡️ No significant change
dancing-links template 3.163 ±0.34% 3.129 ±1.84% -1.08% ➡️ No significant change

Updated: 2025-08-08T01:28:59.264Z

Node.js 20

dancing-links@4.3.0 compare-benchmarks
npm run build:dev && node built/scripts/compare-benchmarks.js baseline-results-node20.json pr-results-node20.json

dancing-links@4.3.0 build:dev
npm run clean && tsc -p tsconfig.dev.json

dancing-links@4.3.0 clean
rimraf built

🚀 Benchmark Results

All solutions to the sudoku

Library Baseline (ops/sec) PR (ops/sec) Change Performance
dancing-links (binary) 2,328.487 ±0.41% 2,345.141 ±0.21% +0.72% ➡️ No significant change
dancing-links (sparse) 6,605.584 ±0.75% 6,732.065 ±0.69% +1.91% ➡️ No significant change
dancing-links generator 6,614.33 ±0.16% 6,754.665 ±0.14% +2.12% ✅ Improvement
dancing-links template 6,550.825 ±0.84% 6,705.168 ±0.82% +2.36% ✅ Improvement

Finding one pentomino tiling on a 6x10 field

Library Baseline (ops/sec) PR (ops/sec) Change Performance
dancing-links (binary) 146.244 ±0.28% 147.016 ±0.16% +0.53% ➡️ No significant change
dancing-links (sparse) 152.214 ±0.31% 153.206 ±0.21% +0.65% ➡️ No significant change
dancing-links generator 152.435 ±0.25% 152.481 ±0.49% +0.03% ➡️ No significant change
dancing-links template 152.376 ±0.38% 151.782 ±0.86% -0.39% ➡️ No significant change

Finding ten pentomino tilings on a 6x10 field

Library Baseline (ops/sec) PR (ops/sec) Change Performance
dancing-links (binary) 22.544 ±0.23% 22.458 ±0.55% -0.38% ➡️ No significant change
dancing-links (sparse) 22.263 ±3.03% 22.606 ±0.57% +1.54% ➡️ No significant change
dancing-links generator 22.633 ±0.32% 22.657 ±0.31% +0.11% ➡️ No significant change
dancing-links template 22.465 ±0.98% 22.652 ±0.47% +0.83% ➡️ No significant change

Finding one hundred pentomino tilings on a 6x10 field

Library Baseline (ops/sec) PR (ops/sec) Change Performance
dancing-links (binary) 3.175 ±0.58% 3.191 ±0.46% +0.49% ➡️ No significant change
dancing-links (sparse) 3.187 ±0.66% 3.179 ±1.73% -0.23% ➡️ No significant change
dancing-links generator 3.156 ±1.33% 3.178 ±0.87% +0.71% ➡️ No significant change
dancing-links template 3.185 ±0.62% 3.18 ±0.51% -0.17% ➡️ No significant change

Updated: 2025-08-08T01:28:59.698Z

Node.js 22

dancing-links@4.3.0 compare-benchmarks
npm run build:dev && node built/scripts/compare-benchmarks.js baseline-results-node22.json pr-results-node22.json

dancing-links@4.3.0 build:dev
npm run clean && tsc -p tsconfig.dev.json

dancing-links@4.3.0 clean
rimraf built

🚀 Benchmark Results

All solutions to the sudoku

Library Baseline (ops/sec) PR (ops/sec) Change Performance
dancing-links (binary) 2,175.585 ±1.09% 2,158.108 ±1.25% -0.80% ➡️ No significant change
dancing-links (sparse) 7,246.968 ±0.54% 7,201.353 ±0.51% -0.63% ➡️ No significant change
dancing-links generator 7,212.222 ±0.17% 7,201.079 ±0.18% -0.15% ➡️ No significant change
dancing-links template 7,569.043 ±0.45% 7,298.364 ±0.66% -3.58% ⚠️ Minor regression

Finding one pentomino tiling on a 6x10 field

Library Baseline (ops/sec) PR (ops/sec) Change Performance
dancing-links (binary) 175.75 ±0.18% 176.323 ±0.17% +0.33% ➡️ No significant change
dancing-links (sparse) 184.83 ±0.24% 185.586 ±0.20% +0.41% ➡️ No significant change
dancing-links generator 184.436 ±0.31% 184.074 ±0.62% -0.20% ➡️ No significant change
dancing-links template 184.317 ±0.62% 184.264 ±0.73% -0.03% ➡️ No significant change

Finding ten pentomino tilings on a 6x10 field

Library Baseline (ops/sec) PR (ops/sec) Change Performance
dancing-links (binary) 27.289 ±0.77% 27.515 ±0.27% +0.83% ➡️ No significant change
dancing-links (sparse) 27.358 ±0.95% 27.608 ±0.70% +0.91% ➡️ No significant change
dancing-links generator 27.655 ±0.20% 27.618 ±0.85% -0.13% ➡️ No significant change
dancing-links template 27.659 ±0.60% 27.74 ±0.17% +0.29% ➡️ No significant change

Finding one hundred pentomino tilings on a 6x10 field

Library Baseline (ops/sec) PR (ops/sec) Change Performance
dancing-links (binary) 3.885 ±0.27% 3.862 ±1.11% -0.58% ➡️ No significant change
dancing-links (sparse) 3.884 ±0.80% 3.863 ±1.58% -0.52% ➡️ No significant change
dancing-links generator 3.845 ±1.60% 3.899 ±0.43% +1.42% ➡️ No significant change
dancing-links template 3.877 ±0.26% 3.891 ±0.80% +0.34% ➡️ No significant change

Updated: 2025-08-08T01:29:09.030Z

ℹ️ Benchmark Details
  • Baseline: Merge-base commit 10c4df9 where this PR branched from master
  • Comparison: Current PR head 5f326a1
  • Timestamp: 2025-08-08 01:29:20 UTC

Sign up for free to 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