AgentSkillsCN

code-performance-analyzer

通过 cloud-init 与 systemd 配置 Ubuntu 服务器。当编写 cloud-init YAML、配置 systemd 服务、搭建 nginx,或排查虚拟机配置问题时,可使用此技能。

SKILL.md
--- frontmatter
name: "code-performance-analyzer"
description: "识别代码性能瓶颈,分析时间复杂度和空间复杂度,并提供优化建议。当用户要求分析代码性能、查找瓶颈或提供优化建议时调用。"

Code Performance Analyzer

Description

Code Performance Analyzer 是一个用于识别代码性能瓶颈并提供优化建议的技能。它能够分析多种编程语言的代码,识别潜在的性能问题,并给出具体的优化方案。

When to Use

调用此技能当:

  • 用户要求分析代码性能
  • 用户想要查找代码中的性能瓶颈
  • 用户需要优化代码运行速度
  • 用户想要减少代码内存占用
  • 用户需要改进算法效率
  • 用户要求对特定代码片段或文件进行性能分析

Supported Programming Languages

  • JavaScript
  • Python
  • Java
  • C++
  • C#
  • Go
  • Ruby

Performance Analysis Dimensions

  1. 时间复杂度分析

    • 识别算法的时间复杂度(O(1), O(n), O(log n), O(n²), O(n³), 等)
    • 分析循环嵌套和递归调用
    • 识别耗时的函数调用和操作
  2. 空间复杂度分析

    • 分析内存使用情况
    • 识别内存泄漏风险
    • 评估数据结构的空间效率
  3. 算法效率分析

    • 评估算法的设计合理性
    • 识别可以优化的算法步骤
    • 提供更高效的算法替代方案
  4. 代码结构分析

    • 分析循环效率
    • 评估条件判断的合理性
    • 识别重复计算和冗余代码
  5. 数据结构分析

    • 评估数据结构的选择合理性
    • 提供更适合的数据结构建议
    • 分析数据访问模式的效率

Optimization Suggestion Types

  1. 算法优化

    • 替换低效算法
    • 优化递归实现
    • 减少不必要的计算
  2. 数据结构优化

    • 选择更适合的数据结构
    • 优化数据访问方式
    • 减少数据复制和转换
  3. 循环优化

    • 减少循环嵌套层级
    • 优化循环条件
    • 使用更高效的循环结构
  4. 内存管理优化

    • 减少内存分配和释放
    • 优化对象生命周期
    • 避免内存泄漏
  5. 并行化建议

    • 识别可并行化的代码段
    • 提供并行化实现建议
  6. 编译/解释优化

    • 提供编译选项建议
    • 优化解释执行代码

Usage

1. 分析代码片段

code
请分析以下代码的性能瓶颈并提供优化建议:

function fibonacci(n) {
  if (n <= 1) return n;
  return fibonacci(n - 1) + fibonacci(n - 2);
}

2. 分析指定文件

code
请分析文件 /path/to/file.js 的性能瓶颈并提供优化建议。

3. 分析特定函数

code
请分析文件 /path/to/file.py 中名为 process_data 的函数的性能瓶颈。

Analysis Report Format

code
# 代码性能分析报告

## 1. 基本信息
- 文件:example.js
- 语言:JavaScript
- 代码行数:50

## 2. 性能瓶颈识别

### 2.1 主要瓶颈
- **位置**:第 25-30 行,循环嵌套
- **问题**:时间复杂度 O(n²)
- **影响**:大数据集下运行缓慢

### 2.2 次要瓶颈
- **位置**:第 10 行,重复计算
- **问题**:每次调用都重新计算相同值
- **影响**:增加不必要的计算开销

## 3. 优化建议

### 3.1 针对主要瓶颈
- **建议**:将嵌套循环改为单次循环,使用哈希表优化查找
- **预期改进**:时间复杂度从 O(n²) 降至 O(n)
- **优化后代码**:
  ```javascript
  // 优化前
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
      // 比较操作
    }
  }
  
  // 优化后
  const map = new Map();
  for (let i = 0; i < n; i++) {
    map.set(arr[i], i);
  }
  for (let i = 0; i < n; i++) {
    // 直接查找
    if (map.has(target - arr[i])) {
      // 处理逻辑
    }
  }

3.2 针对次要瓶颈

  • 建议:使用记忆化缓存计算结果
  • 预期改进:减少重复计算,提高函数调用效率
  • 优化后代码
    javascript
    // 优化前
    function expensiveCalculation(n) {
      // 复杂计算
    }
    
    // 优化后
    const cache = new Map();
    function expensiveCalculation(n) {
      if (cache.has(n)) return cache.get(n);
      const result = /* 复杂计算 */;
      cache.set(n, result);
      return result;
    }
    

4. 优化前后对比

指标优化前优化后改进幅度
时间复杂度O(n²)O(n)显著提高
内存复杂度O(1)O(n)略有增加
预期运行时间1000ms100ms10倍提升

5. 结论与建议

  • 优先实施主要瓶颈的优化建议,可获得最大性能提升
  • 次要瓶颈的优化可作为后续改进
  • 建议在优化后进行性能测试,验证改进效果
  • 考虑在生产环境中监控关键指标,确保优化效果持久
code

## Examples

### Example 1: JavaScript 斐波那契数列优化

**输入**:

请分析以下斐波那契数列实现的性能瓶颈:

function fibonacci(n) { if (n <= 1) return n; return fibonacci(n - 1) + fibonacci(n - 2); }

code

**输出**:

代码性能分析报告

1. 基本信息

  • 语言:JavaScript
  • 代码类型:函数
  • 函数名:fibonacci

2. 性能瓶颈识别

2.1 主要瓶颈

  • 位置:函数 fibonacci 的递归实现
  • 问题:时间复杂度 O(2ⁿ),存在大量重复计算
  • 影响:当 n 较大时,计算时间呈指数增长

3. 优化建议

3.1 动态规划优化

  • 建议:使用动态规划(迭代)替代递归,避免重复计算
  • 预期改进:时间复杂度从 O(2ⁿ) 降至 O(n)
  • 优化后代码
    javascript
    function fibonacci(n) {
      if (n <= 1) return n;
      let a = 0, b = 1;
      for (let i = 2; i <= n; i++) {
        let temp = a + b;
        a = b;
        b = temp;
      }
      return b;
    }
    

3.2 记忆化优化

  • 建议:如果必须使用递归,添加记忆化缓存
  • 预期改进:时间复杂度从 O(2ⁿ) 降至 O(n)
  • 优化后代码
    javascript
    const cache = new Map();
    function fibonacci(n) {
      if (n <= 1) return n;
      if (cache.has(n)) return cache.get(n);
      const result = fibonacci(n - 1) + fibonacci(n - 2);
      cache.set(n, result);
      return result;
    }
    

4. 优化前后对比

指标优化前优化后
时间复杂度O(2ⁿ)O(n)
空间复杂度(动态规划)O(n)O(1)
空间复杂度(记忆化)O(n)O(n)
计算 fib(40) 耗时约 1 秒约 0.1 毫秒

5. 结论与建议

  • 对于斐波那契数列计算,动态规划是最优解决方案
  • 避免使用未优化的递归实现,尤其是对于大数值
  • 记忆化是递归实现的有效优化手段
code

### Example 2: Python 列表操作优化

**输入**:

请分析以下 Python 代码的性能瓶颈:

def find_duplicates(nums): duplicates = [] for i in range(len(nums)): for j in range(i + 1, len(nums)): if nums[i] == nums[j] and nums[i] not in duplicates: duplicates.append(nums[i]) return duplicates

code

**输出**:

代码性能分析报告

1. 基本信息

  • 语言:Python
  • 代码类型:函数
  • 函数名:find_duplicates

2. 性能瓶颈识别

2.1 主要瓶颈

  • 位置:双重循环(第 4-7 行)
  • 问题:时间复杂度 O(n²)
  • 影响:大数据集下运行缓慢

2.2 次要瓶颈

  • 位置nums[i] not in duplicates 检查(第 6 行)
  • 问题:每次检查都是 O(k),其中 k 是当前 duplicates 长度
  • 影响:进一步增加时间复杂度

3. 优化建议

3.1 使用哈希集合优化

  • 建议:使用哈希集合(set)替代双重循环和列表检查
  • 预期改进:时间复杂度从 O(n²) 降至 O(n)
  • 优化后代码
    python
    def find_duplicates(nums):
        seen = set()
        duplicates = set()
        for num in nums:
            if num in seen:
                duplicates.add(num)
            else:
                seen.add(num)
        return list(duplicates)
    

4. 优化前后对比

指标优化前优化后
时间复杂度O(n²)O(n)
空间复杂度O(k)(k 为重复元素数量)O(n)
运行效率

5. 结论与建议

  • 哈希集合是解决重复元素问题的高效数据结构
  • 避免使用嵌套循环进行元素比较
  • 列表的 in 操作在大型列表上效率较低,优先使用集合
code

## Analysis Process

1. **代码解析**:理解代码结构和功能
2. **复杂度分析**:计算时间和空间复杂度
3. **瓶颈识别**:找出性能问题所在
4. **优化方案设计**:提出具体的优化建议
5. **代码优化**:提供优化后的代码示例
6. **效果评估**:分析优化前后的性能对比
7. **结论与建议**:给出最终结论和实施建议

## Benefits

- **提高代码运行速度**:减少执行时间,提升用户体验
- **降低资源消耗**:减少CPU和内存使用
- **改进算法效率**:优化算法设计,提高可扩展性
- **增强代码可维护性**:优化后的代码通常更简洁、易读
- **降低运营成本**:减少服务器资源消耗,降低成本

## Limitations

- 该技能基于静态分析,可能无法捕获所有运行时性能问题
- 对于某些复杂系统,可能需要结合动态性能分析工具
- 优化建议可能需要根据具体业务场景进行调整
- 某些优化可能需要权衡性能和代码可读性

## Best Practices for Performance Optimization

1. **先测量,后优化**:使用性能测试工具确认瓶颈
2. **优先优化热点代码**:专注于执行频率最高的代码
3. **考虑算法复杂度**:选择合适的算法和数据结构
4. **避免过早优化**:先确保代码功能正确,再进行优化
5. **测试优化效果**:优化后进行性能测试,验证改进
6. **保持代码可读性**:不要牺牲可读性换取微小的性能提升
7. **考虑硬件和环境**:优化应适应目标运行环境

## Conclusion

Code Performance Analyzer 是一个强大的工具,可以帮助开发者识别和解决代码中的性能问题。通过使用这个技能,开发者可以编写更高效、更可靠的代码,提高应用程序的性能和用户体验。