Module: Pod
- Defined in:
- lib/cocoapods-podgenerate/command.rb,
lib/cocoapods-podgenerate.rb,
lib/cocoapods-podgenerate/benchmark/profiler.rb,
lib/cocoapods-podgenerate/parallel/thread_pool.rb,
lib/cocoapods-podgenerate/patches/project_patch.rb,
lib/cocoapods-podgenerate/patches/analyzer_patch.rb,
lib/cocoapods-podgenerate/patches/installer_patch.rb,
lib/cocoapods-podgenerate/parallel/batch_processor.rb,
lib/cocoapods-podgenerate/patches/cache_analyzer_patch.rb,
lib/cocoapods-podgenerate/patches/project_writer_patch.rb,
lib/cocoapods-podgenerate/patches/user_integrator_patch.rb,
lib/cocoapods-podgenerate/patches/multi_project_generator_patch.rb
Overview
- cocoapods-podgenerate
-
Monkey-patches Pod::Project,将 pod_group 查找从 O(n) 优化为 O(1)。
优化原理:
原始 `pod_group(pod_name)` 每次调用都执行: pod_groups.find { |group| group.name == pod_name } 这是 O(n) 的线性扫描(n = pod 数量)。 在项目生成过程中,pod_group 被调用 3-5 次/pod(从 FileReferencesInstaller、PodTargetInstaller 的不同位置调用)。 对于 200+ pod 的项目,这意味着 600-1000 次线性扫描, 每次扫描 200 个元素 → ~120k-200k 次比较。修复策略:
1. 首次调用 pod_group 时,构建 Hash 缓存(O(n) 一次性成本) 2. 后续调用直接用 cached_hash[pod_name],O(1) 查找 3. 调用 add_pod_group(添加新 pod group)时,清除缓存强制下次重建 4. 使用 `||=` 懒初始化缓存(只有第一次调用时才构建)线程安全:
所有操作在主线程的 install! 流程中执行,无并发访问。参考:CocoaPods 源码 — lib/cocoapods/project.rb
Defined Under Namespace
Modules: PodGenerate Classes: Command