名称: ruby-优化 描述: Ruby性能优化指南。此技能应在编写、审查或重构Ruby代码时使用,以确保最佳性能模式。触发任务涉及对象分配、集合处理、ActiveRecord查询、字符串处理、并发或Ruby运行时配置。
社区Ruby最佳实践
Ruby应用程序的全面性能优化指南,由社区维护。包含42条规则,跨越8个类别,按影响优先级排序,以指导自动重构和代码生成。
何时应用
在以下情况下参考这些指南:
- 编写新的Ruby代码或gem
- 优化ActiveRecord查询和数据库访问模式
- 处理大型集合或构建数据管道
- 审查代码以查找内存膨胀和GC压力
- 配置生产环境的Ruby运行时设置
规则类别按优先级
| 优先级 | 类别 | 影响 | 前缀 |
|---|---|---|---|
| 1 | 对象分配 | 关键 | alloc- |
| 2 | 集合与枚举 | 关键 | enum- |
| 3 | I/O与数据库 | 高 | io- |
| 4 | 字符串处理 | 高 | str- |
| 5 | 方法与调度 | 中高 | meth- |
| 6 | 数据结构 | 中 | ds- |
| 7 | 并发 | 中 | conc- |
| 8 | 运行时与配置 | 低中 | runtime- |
快速参考
1. 对象分配(关键)
alloc-avoid-unnecessary-dup- 避免不必要的对象重复alloc-freeze-constants- 冻结常量集合alloc-lazy-initialization- 使用懒初始化处理昂贵对象alloc-avoid-temp-arrays- 避免临时数组创建alloc-reuse-buffers- 在循环中重用缓冲区alloc-avoid-implicit-conversions- 避免在热点路径中重复计算
2. 集合与枚举(关键)
enum-single-pass- 使用单次传递的集合变换enum-lazy-large-collections- 对大型集合使用懒枚举器enum-flat-map- 使用 flat_map 而不是 map.flattenenum-each-with-object- 使用 each_with_object 而不是 inject 来构建集合enum-avoid-count-in-loops- 避免在条件中重新计算集合大小enum-chunk-batch-processing- 使用 each_slice 进行批处理
3. I/O与数据库(高)
io-eager-load-associations- 预加载ActiveRecord关联io-select-only-needed-columns- 只选择需要的列io-batch-find-each- 对大型记录集使用 find_eachio-avoid-queries-in-loops- 避免在循环内进行数据库查询io-stream-large-files- 逐行流式处理大文件io-connection-pool-sizing- 调整连接池大小以匹配线程数io-cache-expensive-queries- 缓存昂贵的数据库结果
4. 字符串处理(高)
str-frozen-literals- 启用冻结字符串字面量str-shovel-over-plus- 使用shovel运算符进行字符串构建str-interpolation-over-concatenation- 使用字符串插值而不是连接str-avoid-repeated-gsub- 将多个gsub调用链成一个单一的替换str-symbol-for-identifiers- 对标识符和哈希键使用符号
5. 方法与调度(中高)
meth-avoid-method-missing-hot-paths- 避免在热点路径中使用method_missingmeth-cache-method-references- 对重复调用缓存方法引用meth-block-vs-proc- 直接传递块而不是转换为Procmeth-avoid-dynamic-send- 避免在性能关键代码中使用动态sendmeth-reduce-method-chain-depth- 减少热点循环中的方法链深度
6. 数据结构(中)
ds-set-for-membership- 使用Set进行成员测试ds-struct-over-openstruct- 使用Struct而不是OpenStructds-sort-by-over-sort- 使用sort_by而不是带块的sortds-array-preallocation- 当大小已知时预分配数组ds-hash-default-value- 使用哈希默认值而不是条件赋值
7. 并发(中)
conc-fiber-for-io- 对I/O密集型并发使用Fiberconc-thread-pool-sizing- 调整线程池大小以匹配工作负载conc-ractor-cpu-bound- 对CPU密集型并行使用Ractorconc-avoid-shared-mutable-state- 避免线程间共享可变状态
8. 运行时与配置(低中)
runtime-enable-yjit- 为生产启用YJITruntime-tune-gc-parameters- 根据工作负载调整GC参数runtime-frozen-string-literal-default- 将冻结字符串字面量设置为项目默认runtime-optimize-require- 优化require加载顺序
如何使用
阅读个别参考文件以获取详细解释和代码示例:
参考文件
| 文件 | 描述 |
|---|---|
| references/_sections.md | 类别定义和排序 |
| assets/templates/_template.md | 新规则的模板 |
| metadata.json | 版本和参考信息 |