crapifyme
Version:
Ultra-fast developer productivity CLI tools - remove comments, logs, and more
111 lines • 4.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OptimizedStringBuilder = exports.PerformanceMonitor = void 0;
const logger_1 = require("./logger");
class PerformanceMonitor {
constructor(logger) {
this.startTime = 0;
this.startMemory = null;
this.logger = logger || new logger_1.Logger(false, false, false);
}
startMonitoring() {
if (global.gc) {
global.gc();
}
this.startTime = performance.now();
this.startMemory = process.memoryUsage();
}
stopMonitoring(tokensProcessed, fileSize) {
const endTime = performance.now();
const endMemory = process.memoryUsage();
const processingTime = endTime - this.startTime;
const throughput = tokensProcessed / processingTime;
const metrics = {
processingTime,
memoryUsage: {
heapUsed: endMemory.heapUsed,
heapTotal: endMemory.heapTotal,
external: endMemory.external,
rss: endMemory.rss
},
tokensProcessed,
fileSize,
throughput
};
return metrics;
}
getMemoryUsage() {
return process.memoryUsage();
}
static compareBenchmarks(baseline, optimized) {
const processingTimeReduction = ((baseline.processingTime - optimized.processingTime) / baseline.processingTime) * 100;
const memoryReduction = ((baseline.memoryUsage.heapUsed - optimized.memoryUsage.heapUsed) /
baseline.memoryUsage.heapUsed) *
100;
const throughputIncrease = ((optimized.throughput - baseline.throughput) / baseline.throughput) * 100;
return {
baseline,
optimized,
improvement: {
processingTimeReduction,
memoryReduction,
throughputIncrease
}
};
}
logMetrics(metrics) {
this.logger.info(`Performance Metrics:
Processing Time: ${metrics.processingTime.toFixed(2)}ms
Memory Usage: ${(metrics.memoryUsage.heapUsed / 1024 / 1024).toFixed(2)}MB
Tokens Processed: ${metrics.tokensProcessed}
File Size: ${(metrics.fileSize / 1024).toFixed(2)}KB
Throughput: ${metrics.throughput.toFixed(2)} tokens/ms`);
}
static generateReport(benchmarks) {
const report = ['Performance Optimization Report', '='.repeat(40)];
benchmarks.forEach((benchmark, index) => {
report.push(`\nBenchmark ${index + 1}:`);
report.push(` Processing Time: ${benchmark.baseline.processingTime.toFixed(2)}ms → ${benchmark.optimized.processingTime.toFixed(2)}ms (${benchmark.improvement.processingTimeReduction.toFixed(1)}% improvement)`);
report.push(` Memory Usage: ${(benchmark.baseline.memoryUsage.heapUsed / 1024 / 1024).toFixed(2)}MB → ${(benchmark.optimized.memoryUsage.heapUsed / 1024 / 1024).toFixed(2)}MB (${benchmark.improvement.memoryReduction.toFixed(1)}% improvement)`);
report.push(` Throughput: ${benchmark.baseline.throughput.toFixed(2)} → ${benchmark.optimized.throughput.toFixed(2)} tokens/ms (${benchmark.improvement.throughputIncrease.toFixed(1)}% improvement)`);
});
return report.join('\n');
}
}
exports.PerformanceMonitor = PerformanceMonitor;
class OptimizedStringBuilder {
constructor(chunkSizeLimit = 64 * 1024) {
this.chunks = [];
this.totalLength = 0;
this.chunkSizeLimit = chunkSizeLimit;
}
append(content) {
this.chunks.push(content);
this.totalLength += content.length;
if (this.chunks.length > 1000) {
this.consolidate();
}
}
toString() {
if (this.chunks.length === 0)
return '';
if (this.chunks.length === 1)
return this.chunks[0];
return this.chunks.join('');
}
get length() {
return this.totalLength;
}
clear() {
this.chunks = [];
this.totalLength = 0;
}
consolidate() {
if (this.chunks.length <= 1)
return;
const consolidated = this.chunks.join('');
this.chunks = [consolidated];
}
}
exports.OptimizedStringBuilder = OptimizedStringBuilder;
//# sourceMappingURL=performance-monitor.js.map