Camofox Browser
Camofox 源码分析:快照分窗与确定性提取的边界案例
通过直接测试的两个小型辅助模块,理解字符分页、尾部导航保留、x-ref 提取及数字转换。
你将学会
- 快照偏移计量 JavaScript 字符串单元,不是 token。
- x-ref 读取引用名称,支持的是有限模式子集。
- 数字转换可能改变格式化数值的含义。
开始前需要
- 基础 HTTP 与 JSON 知识
- 隔离服务与自有或获准测试页面
解释本章真实服务边界,并核验建议的观察或生命周期样例。
先看结论
- 快照偏移计量 JavaScript 字符串单元,不是 token。
- x-ref 读取引用名称,支持的是有限模式子集。
- 数字转换可能改变格式化数值的含义。
快照分页是字符串窗口操作
lib/snapshot.js 使用名义 80000 字符上限,并保留最后 5000 字符用于导航。预留标记空间后,主体预算为 74800。大快照返回窗口、尾部和分页元数据,小输入原样通过。这里使用 JavaScript 字符串长度,不是 UTF-8 字节数,也不是实际模型 token。
对所查辅助函数输入 100000 个 ASCII 字符的独立调用,返回 totalChars 100000、nextOffset 74800 和 hasMore true,该样例的响应文本长度为 79915。这是纯函数观察,不是浏览器基准测试。后续窗口可能与追加尾部重叠,因此不能拼接每个响应就假设重建了无重复原文。
x-ref 把字段映射到名称,而非任意页面含义
lib/extract.js 验证一小部分模式结构,再把每个属性的 x-ref 映射到引用表中的 name。缺失可选引用得到 null,缺失必需值则抛错。路由要求已有非空引用表,否则提示需要快照。它不是会自动推断你想要哪个页面字段的大模型。
验证器检查顶层对象、properties 和允许的属性类型集合,不是完整 JSON Schema 实现。不能因端点使用 schema 术语,就推断支持递归校验、任意约束或数组。即使确定性提取成功,应用层仍需针对预期字段、单位和文档版本进行验证。
数字转换需要按地区格式验收
所查整数转换先移除数字和负号以外的字符再解析。原始名称为 12.5 时,辅助函数返回 125,而不是舍入或截断后的十二。number 转换保留小数点却移除逗号,输入 €1.234,56 返回 1.23456。本次已运行这两个纯函数调用,说明带格式的金额或数量必须明确规范化规则。
下面样例只复现这两项转换,不执行浏览器、路由处理器或完整提取会话。当地区格式和单位重要时,宜先提取原始字符串,再采用明确选择的解析器,并拒绝含糊输入。将原始文本与规范值并列保留,方便审查者看清哪些信息发生了变化。
实施步骤
- 1
阅读 windowSnapshot 的主体预算与追加尾部。
- 2
比较短、长及多字节字符串样例。
- 3
检查可选值为空与必需值报错。
- 4
保留原始数字文本并独立验证规范化。
可复制示例
// 独立转换样例,不是浏览器会话。
const integer = raw => Number.parseInt(raw.replace(/[^0-9-]/g, ""), 10);
const number = raw => Number.parseFloat(raw.replace(/[^0-9.eE+-]/g, ""));
console.log(integer("12.5"));
console.log(number("€1.234,56"));常见问题
快照上限表示 token 预算吗?
不是。辅助函数使用 JavaScript 字符串长度,token 与 UTF-8 大小应另行测量。
确定性提取保证数字正确吗?
不能。已测试案例会以意外方式改变格式化数值,应保留原文并验证地区格式与单位。
资料来源
- README.md来源核查 2026-09-08
- package.json来源核查 2026-09-08
- Dockerfile来源核查 2026-09-08
- lib/auth.js来源核查 2026-09-08
- lib/snapshot.js来源核查 2026-09-08
- lib/extract.js来源核查 2026-09-08
- lib/config.js来源核查 2026-09-08
- lib/reporter.js来源核查 2026-09-08
- lib/page-lease.js来源核查 2026-09-08
- server.js来源核查 2026-09-08
- tests/unit/snapshot.test.js来源核查 2026-09-08
- tests/unit/auth.test.js来源核查 2026-09-08