1.8 KiB
1.8 KiB
width-measurement(子模块规范)
子模块名称
width-measurement(宽度测量与降级)
目标描述
提供统一的宽度测量接口与缓存策略,并定义“宽度不可用”时的确定性降级行为(approx mode),确保 APP 与 WIDGET 在测量能力差异下仍能:
- 保持搜索/评分流程可运行
- 输出可解释(meta 打点)
- 性能稳定(缓存与上限)
输入/输出定义
输入
context: 'APP' | 'WIDGET'fontSpec?: { fontSize: number; fontWeight?: string; fontFamily?: string }measureWidth?: (text: string, fontSpec) => number(可选注入)text: stringslice?: { start: number; end: number }(可选:段落切片测量)
输出
width: number | null- 当不可用/失败时返回
null(触发 approx mode)
- 当不可用/失败时返回
meta?: { isApprox: boolean; reason?: 'WIDTH_UNKNOWN' | 'MEASURE_FAILED' }
并提供缓存约定(逻辑输出):
- 字符串测量缓存 key:
(text, fontSpecKey, contextProfile) - 切片测量缓存 key:
(start, end, fontSpecKey, contextProfile)
验收标准(可验证)
- 测量一致:在 APP 注入
measureWidth时,同一输入重复测量命中缓存(不会重复计算) - 失败降级:
measureWidth缺失/抛错/返回 NaN 时:- 输出
width=null - meta 标记
isApprox=true且 reason 可追踪
- 输出
- approx mode 口径一致:
- EN:宽度近似值使用
wordCount - TC:宽度近似值使用
charCount(或 grapheme 数)
- EN:宽度近似值使用
- 确定性:相同输入在相同 contextProfile 下,测量与降级行为一致
依赖与关联
- 被依赖:
search-engine-app、search-engine-widget、overflow-fallback - 依赖:
core-contract(fontSpecKey 规范化、切片文本重组)