Chromium 的 Configuration 系统
2025-04-17
千人前面。
深处 Z 时代,每个人都有自己的喜好和品味。
Chromium 作为一个客户端软件,如何满足个性化需要?
这就要求它是可定制化的。
这种定制,可以来自用户,来自开发者,甚至来自系统管理员。
Chromium 提供了一整套 Configuration(配置)方案。
1. 概述
提过很多次,Chromium 很复杂,就连它的配置体系,都采用了多种不同方案。
这与服务端程序很不一样,因为服务端通常只需要一个配置文件。
针对不同场景,不同角色的需要,Chromium 将配置分成 5 类:
- Prefs(偏好)
- Settings(设置)
- Features(特性)
- Switches(开关)
- Flags(标识)
普通用户通常接触到的是 Settings,可以查看 chrome://settings/
。
进阶用户会用 Features、Switches 和 Flags 实现更精细地控制,具体可看 chrome://flags
。
开发者则会借助 Features 做一些 A/B 测试的实验。
系统管理员一般用 Prefs 实现企业级的控制策略,详情可查询 chrome://policy
。
2. 分类
简单对比五个配置方案:
名称 | 生命周期 | 用户可修改 | 支持运行时动态变更 | 用途示例 |
---|---|---|---|---|
Prefs | 持久化到磁盘 | ✅ | ✅(部分) | 用户设置,如主页、默认搜索引擎 |
Settings | 用户或设备策略 | ✅(受限) | ✅(通常由企业策略控制) | 企业设置、同步开关等 |
Features | 编译期 + 启动时注册 | ❌(默认) | ❌(需 Flags 配合) | 新功能的开关控制 |
Switches | 启动参数(命令行) | ✅(启动时) | ❌ | 启动模式,如 --headless |
Flags | 实验性设置(UI 入口) | ✅(via chrome://flags) | ✅(需重启) | 实验性功能启用,如 QUIC、Dark Mode |
2.1 Prefs
Prefs 全称是 Preferences,翻译过来可叫偏好,或者首选项。
它的特点有两个,一是会持久化到磁盘上,重启依然有效;二是登陆用户的 Prefs 会跨端同步,即 Sync,也是我目前在做的一个方向。
Prefs 的内容存储在磁盘上,格式是 JSON,在 Chrome 里可以通过 chrome://prefs-internals/
看到。
简单理解,Prefs 就是浏览器的配置文件。
2.2 Settings
Settings 是用户最熟悉的。
因为这是暴露给用户最直接的一种定制化需求的途径。

Settings 的修改,实际都会同步到 Prefs。
2.3 Features
Features 是一个比较有趣的功能。
普通用户可以在命令行里以 “—enable-features” 的方式启动,不过这是一条鲜有人走的路。
因为这个工具,是给开发者用的。
Chrome 每个月发布一个大版本,每次更新都会携带很多不同的新功能。
如何保证,新功能不会影响新版本的稳定性,不降低用户体验?
之前文章讲述过 如何发布一个客户端🔗,这里的原理类似,也是灰度发布。
新的功能会伴随版本而发布,但默认不打开,开启要借助云端控制,精细筛选版本、通道、比例,甚至地区。
由 A/B 测试,支撑下一步的决策。
内部管这个过程叫“飞实验”,飞到实验的部分用户叫“灰度用户”。
这是客户端的常见做法,像微信等移动端 App 也都会用。
有时同样版本的软件,使用起来却有所差异,很有可能是实验所致。
2.4 Switches
普通用户在启动浏览器时加上类似 “—incognito” 的命令,可以显示开启 “incognito”。
使用不多,因为完全可以通过 Features 的方式实现。
2.5 Flags
Flags 具有名称和描述,并显示在 chrome://flags 中。
Flags 一般用于实验,有过期机制,到期后将从上述用户界面中隐藏并禁用,之后被移除。这说明 Flags 往往是临时的,仅供调试。
3. 启示
我认为,关于 Configuration,Chromium 的这篇 文档🔗 文档得并不好,组织有些混乱。
虽然提到了五种配置手段,但它们不是正交(Orthogonality)的。比如,Settings 更像是一个用户界面,底层依赖 Prefs 生效。
实际上,配置生效可以发生在两个阶段:
- 编译时
- 运行时
编译时意味着在代码里固定参数,灵活性差,在不需要灵活性的地方可以使用。
运行时生效无疑更灵活,同样更复杂,需要很好地承接不同用户的不同需求。大致来说,Chromium 提供了两种方式,
- 本地生效,持久化方案,即 Prefs
- 云端生效,灰度方案,即 Features
4. 总结
平时跟朋友聊天,他们会问我,开发工作究竟是做什么?
他们好奇,一个“简单”的软件,真的需要那么多开发者冒着秃头的风险,夜以继日吗?
这是局外人和局内人最大的不同。
有些人看到的只是结果,有些人了解过程。不能把结果简单地理解为过程。
《置身事内》里讲到:
站在岸边只看到波澜壮阔,看不见暗潮汹涌。
把复杂留给自己,简单留给别人。
无论是开发,还是做人,我想都应该如此。
(完)
参考
- 本文作者:Plantree
- 本文链接:https://plantree.me/blog/2025/chromium-configuration/
- 版权声明:所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
最后更新于: 2025-04-17T06:30:42+08:00