agentsqripts
Version:
Comprehensive static code analysis toolkit for identifying technical debt, security vulnerabilities, performance issues, and code quality problems
115 lines (102 loc) • 3.46 kB
JavaScript
/**
* @file Performance recommendation generator
* @description Generates performance recommendations based on analysis
*/
/**
* Generate performance recommendations
* @param {Array} issues - Array of performance issues
* @param {number} totalEffort - Total effort required
* @param {number} analysisTime - Time taken for analysis
* @returns {Array} Array of recommendations
*/
function generatePerformanceRecommendations(issues, totalEffort = 0, analysisTime = 0) {
const recommendations = [];
// Sort issues by priority (HIGH severity first, then by impact)
const sortedIssues = [...issues].sort((a, b) => {
const severityOrder = { 'HIGH': 3, 'MEDIUM': 2, 'LOW': 1 };
const aSeverity = severityOrder[a.severity] || 1;
const bSeverity = severityOrder[b.severity] || 1;
if (aSeverity !== bSeverity) return bSeverity - aSeverity;
return (b.impact || 0) - (a.impact || 0);
});
// Generate structured recommendations for each category
const categories = {};
for (const issue of issues) {
if (!categories[issue.category]) categories[issue.category] = [];
categories[issue.category].push(issue);
}
// High-priority recommendations
const highSeverityIssues = issues.filter(i => i.severity === 'HIGH');
if (highSeverityIssues.length > 0) {
recommendations.push({
priority: 'HIGH',
optimization: `Address ${highSeverityIssues.length} critical performance bottlenecks`,
expectedImpact: 'Major performance improvement (50-80%)',
category: 'Critical',
effort: 'High'
});
}
// Algorithm-specific recommendations
if (categories['Algorithm']) {
recommendations.push({
priority: 'HIGH',
optimization: 'Replace O(n²) algorithms with more efficient alternatives',
expectedImpact: 'Significant scalability improvement',
category: 'Algorithm',
effort: 'Medium'
});
}
// I/O optimizations
if (categories['I/O']) {
recommendations.push({
priority: 'MEDIUM',
optimization: 'Convert synchronous I/O operations to asynchronous',
expectedImpact: 'Better throughput and responsiveness',
category: 'I/O',
effort: 'Low'
});
}
// String optimizations
if (categories['String']) {
recommendations.push({
priority: 'MEDIUM',
optimization: 'Use array.join() instead of string concatenation in loops',
expectedImpact: 'Reduced memory allocation and faster execution',
category: 'String',
effort: 'Low'
});
}
// DOM optimizations
if (categories['DOM']) {
recommendations.push({
priority: 'MEDIUM',
optimization: 'Cache DOM queries and use batch operations',
expectedImpact: 'Smoother UI interactions',
category: 'DOM',
effort: 'Medium'
});
}
// React optimizations
if (categories['React']) {
recommendations.push({
priority: 'MEDIUM',
optimization: 'Implement React.memo and optimize re-renders',
expectedImpact: 'Faster component updates',
category: 'React',
effort: 'Medium'
});
}
if (recommendations.length === 0) {
recommendations.push({
priority: 'LOW',
optimization: 'Code shows good performance patterns',
expectedImpact: 'No major optimizations needed',
category: 'General',
effort: 'None'
});
}
return recommendations;
}
module.exports = {
generatePerformanceRecommendations
};