Skip to content

perf: cache available localizations in static let for L10n (#10)#25

Merged
ShadyUnderLight merged 1 commit intomainfrom
fix/issue10-l10n-static-cache
Apr 20, 2026
Merged

perf: cache available localizations in static let for L10n (#10)#25
ShadyUnderLight merged 1 commit intomainfrom
fix/issue10-l10n-static-cache

Conversation

@ShadyUnderLight
Copy link
Copy Markdown
Owner

修复内容

问题L10n.localizationCandidates(for:) 每次 string() / format() 调用都重新创建 cachedAvailableLocalizations(从 Bundle.module.localizations 构造 Set<String>),而 Localization 在 app 生命周期内永远不会变化,这部分计算完全没必要重复。

修复:将 available 提升为 private static let cachedAvailableLocalizations — 在 L10n enum 首次初始化时计算一次,后续 string() / format() 调用直接读取缓存值,不再重复构造 Set

// 修复前:每次调用 string() / format() 都重新构造
let available = Set(moduleBundle.localizations.map { $0.lowercased() })

// 修复后:只计算一次
private static let cachedAvailableLocalizations: Set<String> = {
    Set(Bundle.module.localizations.map { $0.lowercased() })
}()

影响范围

  • 性能优化,不影响功能正确性
  • 行为不变,仅减少 redundant 计算

@ShadyUnderLight ShadyUnderLight merged commit 8606c72 into main Apr 20, 2026
2 checks passed
@ShadyUnderLight ShadyUnderLight deleted the fix/issue10-l10n-static-cache branch April 20, 2026 09:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant