Chromium 的 Configuration 系统

2025-04-17 pv

千人前面。

深处 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. 总结

平时跟朋友聊天,他们会问我,开发工作究竟是做什么?

他们好奇,一个“简单”的软件,真的需要那么多开发者冒着秃头的风险,夜以继日吗?

这是局外人和局内人最大的不同。

有些人看到的只是结果,有些人了解过程。不能把结果简单地理解为过程

《置身事内》里讲到:

站在岸边只看到波澜壮阔,看不见暗潮汹涌。

把复杂留给自己,简单留给别人。

无论是开发,还是做人,我想都应该如此。

(完)

参考

  1. Z 世代 - 维基百科,自由的百科全书🔗
  2. Chromium Docs - Configuration: Prefs, Settings, Features, Switches & Flags🔗
在 GitHub 上编辑本页面

最后更新于: 2025-04-17T06:30:42+08:00