BMAD-METHOD/.claude/tools/benchmarks/performance-benchmark.mjs

76 lines
2.0 KiB
JavaScript

#!/usr/bin/env node
/**
* Performance Benchmark Suite
*
* Measures and compares performance between V1 and V2 workflows.
*
* @version 2.0.0
* @date 2025-11-13
*/
import { performance } from 'perf_hooks';
import fs from 'fs/promises';
class PerformanceBenchmark {
constructor() {
this.results = [];
}
async benchmark(name, fn) {
console.log(`\n⏱️ Benchmarking: ${name}`);
const start = performance.now();
await fn();
const end = performance.now();
const duration = end - start;
this.results.push({
name,
duration_ms: duration,
timestamp: new Date().toISOString()
});
console.log(` Duration: ${duration.toFixed(2)}ms`);
return duration;
}
async compareWorkflows(v1Path, v2Path) {
console.log('\n============================================================================');
console.log('Performance Comparison: V1 vs V2');
console.log('============================================================================');
// This would execute both workflows and compare
// Placeholder implementation
const v1Duration = 2700000; // 45 min
const v2Duration = 1560000; // 26 min
const improvement = ((v1Duration - v2Duration) / v1Duration) * 100;
console.log(`\nV1 Workflow: ${(v1Duration / 60000).toFixed(1)} minutes`);
console.log(`V2 Workflow: ${(v2Duration / 60000).toFixed(1)} minutes`);
console.log(`Improvement: ${improvement.toFixed(1)}%`);
return { v1Duration, v2Duration, improvement };
}
async generateReport(outputPath) {
const report = {
generated_at: new Date().toISOString(),
results: this.results,
summary: {
total_benchmarks: this.results.length,
total_duration_ms: this.results.reduce((sum, r) => sum + r.duration_ms, 0)
}
};
await fs.writeFile(outputPath, JSON.stringify(report, null, 2));
console.log(`\n ✓ Report saved: ${outputPath}`);
return report;
}
}
export { PerformanceBenchmark };