关于 about:config 的十大奥秘
由 Mozilla 基金会及其朋友们构建的 Firefox 网页浏览器,是一项复杂的技术——如果您有兴趣深入了解的话。找到引擎盖的开关并不容易,因为 Firefox 的表面(其用户界面)经过精心打磨,旨在吸引普通的、非技术终端用户。本文让您一窥引擎的内部运作。它解释了 Mozilla about:config URL 如何打开一个充满晦涩偏好的世界,这些偏好可用于调整默认设置。它们是一个不太可能的集合,如果您是一位热衷于摆弄汽车引擎的人,或者其他技术人员,那么这就是 Firefox 的魅力所在。最后,您会对 Firefox 有更多的了解,但只够您“玩火自焚”的程度。
像任何对 Linux 友好的软件一样,Firefox 响应预设的环境变量。例如,您可以在启动之前设置 MOZILLA_FIVE_HOME 或 MOZ_PLUGIN_PATH 变量。它们的工作方式都类似于标准的 PATH,所以没有什么意外之处。然而,每个进程可用的环境变量空间是有限的,并且属性-值对的简单文本连接是一种相当不灵活的数据存储方式。Firefox 拥有大量的运行时配置选项,而环境不是一个合适的存储区域。
Firefox 配置存储在一个名为偏好设置系统的小型属性-类型-值数据库中。您可以在 ~/.mozilla/firefox/*/prefs.js 文件中看到此数据集的增量。该文件仅保存用户选择的非默认值。其余的偏好设置要么未声明,要么在作为标准安装一部分的安装文件中声明。对我来说,它们在 /local/install/firefox/defaults/pref 中,因为 /local 是我选择的试验场。
对于技术人员来说,这个系统有点问题,因为完整的偏好设置列表不会出现在磁盘上的任何地方,而更改这些偏好设置的标准方法是使用 Firefox 用户界面,但它也是不完整的。该界面仅为最基本的可用偏好设置提供 GUI 元素(按钮、字段和复选框)。毕竟,Firefox 并没有试图成为 Emacs。其余的偏好设置必须从其他地方挖掘出来。
那个“其他地方”就是特殊的字符串 about:config,可以在 Firefox 的地址栏(输入网址的地方)中输入。简要回顾一下 W3C 地址的分类:URI(通用资源标识符)是 IRI(国际资源标识符)的特例。URI 可以是 URL(统一资源定位符)或 URN(统一资源名称)。我们一直看到的是 URL。它们由方案(通常是 http)、冒号 (:) 和地址 (x.org) 组成。
您可以定义自己的方案。Mozilla 对“about”方案就是这样做的,它用于访问内部浏览器资源。例如,尝试 about:cache。config 资源是偏好设置系统的一个钩子。当您输入 about:config 时,您正在导航到一个本地资源,就像您导航到基于 HTTP 的网页的 Web 资源一样。图 1 显示了加载 about:config 资源的结果。
此偏好设置列表也是一种表单。右键单击任何偏好设置以修改它或声明一个新的偏好设置。如果需要,在“过滤器”框中输入一些文本来缩短显示。许多 Firefox 扩展可以为 about:config 提供备用界面。请随意尝试它们。
唉,没有什么是完美的;about:config 仅显示已经设置或在任何地方指定的偏好设置。它不显示具有有意义用途的偏好设置,这些偏好设置在 about:config 列表中任何地方都没有出现。要为未出现的新偏好设置添加值,只需在主窗口中的任何位置右键单击,然后从上下文菜单中选择“新建”,然后选择偏好设置的类型:字符串、整数或布尔值。
事不宜迟,下面是 Firefox UI 不允许您访问的偏好设置巡览。有些可以通过 about:config 找到,有些则不行。它们都相对安全,可以进行实验。如果您遇到麻烦,请返回 about:config 并取消设置偏好设置,或者,在最坏的情况下,关闭 Firefox 并删除前面提到的 prefs.js 文件。到目前为止所说的一切也适用于其他 Mozilla 产品:Mozilla 应用程序套件、Thunderbird 等等。删除 Thunderbird prefs.js 文件之前请三思。它包含指向您的电子邮件的重要指针。
这是一个简单的偏好设置,让我们从它开始。您可以显式设置 Firefox Web 缓存的内存部分的大小。这是偏好设置,它的类型是整数
browser.cache.memory.capacity
将其设置为您希望作为最大值的 KB(千字节)整数。默认情况下,此偏好设置未声明,默认值为 -1,这意味着“根据需要扩展以填充可用内存”。这有点像 Linux 磁盘缓冲区缓存。如果您同时运行 OpenOffice.org 和 Firefox 并且都在努力工作,您可能不希望这样。如果您确实更改了此偏好设置,您将走上 Mac OS 9 及更低版本的道路,其中每个应用程序都获得显式的内存分配。如果您在这方面做得太过分,这可能会成为一个调整负担。
Mozilla Web 缓存(内存和磁盘)类似于 Squid 等服务器的功能。也就是说,两种类型的缓存都对 HTTP 标头的使用进行缓存目的的智能处理。如果您控制本地 Web 代理,那么一个巨大的 Squid 缓存可能比一个真正大的本地磁盘缓存更有价值。但是,更大的 Firefox 缓存仍然可以提供一些性能提升。您可以通过整数偏好设置来更改缓存使用
browser.cache.check_doc_frequency
此偏好设置影响 Firefox 何时访问缓存,而不是缓存本身的工作方式。缓存会在每次机会都缓存 Web 内容,但如果 Firefox 未能检查它,则这种机会将很少出现。将偏好设置设置为 0 表示每个 Firefox Web 冲浪会话每个 URL 资源检查一次,1 表示始终使用缓存,2 表示从不使用缓存,3(默认值)表示当 HTTP 缓存规则认为缓存是个好主意时使用缓存。
网页有可能对浏览器用户实施拒绝服务攻击。您只需要一个在无限繁忙循环中运行大量 JavaScript 的网页即可。当进行如此密集的处理时,Firefox 无法接受用户输入。如果脚本执行时间过长,此整数偏好设置会导致脚本执行停止。单位是秒,默认值为 5
dom.max_script_run_time
您可能已将 Firefox 设置为执行一些棘手的 Web 爬网。您可能让它充当机器人或作为无人值守的控制台连续运行。在任何这些情况下,将此偏好设置设置为 -1,Web 页面脚本将永远不受干扰地运行。
各种异步机制(例如 setTimeout())的使用支持普通网页中的长脚本时间线。无需更改偏好设置来支持这些内容。
在 Firefox 浏览器中,选项卡标题、地址栏 URL 或显示的书签可以获取一个小图像(图标),该图像显示在其左侧。通常,它包含当前显示的网页站点的品牌标志。您可能不希望发生这种情况。它会使您的书签文件更大,并且(尤其是在您使用拨号上网时)会在首次访问页面时导致额外的 HTTP 请求。该请求会获取图标以进行显示。这两个布尔偏好设置(默认值均为 true)可以设置为 false 以禁用这些获取和随后的图标显示
browser.chrome.site_icons browser.chrome.favicons
将其中任何一个设置为 false,这些图标将被忽略。书签会获得标准的书签图标,而在其他地方则不会显示任何图标。
您可能会问,“为什么有两个偏好设置?” 部分原因是这些图标可以通过两种方式指定。您可以将一个 16x16 像素的 Microsoft Windows ICO 格式图标放在此 URL:http://www.example.com/favicon.ico。
该图标将适用于该站点上的所有页面,并且正式地是一个收藏夹图标或 favicon,使用 Microsoft 的术语。或者,您可以为每个页面添加一个图标,使用 <link> 标签和任何 16x16 ICO URL,如下所示
<link rel="SHORTCUT ICON" href="/images/mybrand.ico" />
由于某些历史原因,每个页面的使用称为网站图标。
两个偏好设置的另一个原因与 Mozilla 项目中的并行开发流、书签文件格式的混乱以及用于琐碎清理任务的时间短缺有关。记住,我们正在查看引擎盖下面。
如果您有一点图形编程的血统,您可能会对 L. David Baron、Robert O'Callahan 及其公司——Firefox 内部 Gecko 渲染引擎的核心开发人员——产生一丝善意。显示网页是标准、性能和主观用户感知之间的一种极其困难的折衷方案。网页施加的最困难的约束之一是需要增量显示。在我收到网页时显示它,而不是全部在最后一次性显示。这意味着不断地重新排列显示的元素,这些元素可能会以无序的方式传递(这是文字处理器没有的问题)。更糟糕的是,此类文档几乎总是通过网络传递,并且定时不可靠。
要了解这项工作的难度,请访问图像密集型网站,例如 gamespot.com。在宽带上,加载页面会以布局更新的痛苦跳来跳去,而笨重的内容会以不特定的顺序转储到浏览器中。在拨号上网时,该过程较慢且更熟悉,但布局工作量甚至更大,因为有更多时间来调整每个接收到的页面片段。图 2 显示了图像繁重的 GameSpot 站点,在图像仍在传入时进行渲染。
考虑到这种问题,您可以想象,如果您知道在哪里可以找到它们,那么各种隐藏的调整偏好设置都是可用的。这不是一个调整研讨会,所以这里有两个更有趣的偏好设置。
很少有人希望降低 Firefox 的性能。(您应该为您的好母亲购买一台更好的电脑。)更有可能的是,您拥有大量的 CPU 和视频能力,并且希望使用它。您可能每天单击鼠标超过 2,000 次。理论上,您可以通过此整数偏好设置将响应时间缩短四分之一秒——那是一天额外的咖啡休息时间
nglayout.initialpaint.delay
将其设置为 0(零)毫秒。默认设置为 250。当网页开始涓涓细流地进入浏览器时,Firefox 通常会在内存中组织好页面片段后等待一会儿。在尝试显示它们之前,将最初的几个内容位捆绑在一起是有意义的。但是,如果您有一双快眼,您可以使其立即显示它已准备好的内容。
同样,Firefox 会缓冲传入的原始网络内容,然后再费心将这些字节分解为可供显示的内容。这是另一个分块过程,可以节省 CPU,但会在快速机器上减慢输出速度。将此整数偏好设置设置为例如 5,000(微秒),传入的网络字节会更快地推送到显示系统
content.notify.interval
但是,这样做会使 Firefox 非常努力地安排更新,以响应每个内容滴。如果您将此值降低得太低,那么额外的工作只会导致传入的数据在数据流中进一步缓冲——可能在内核中的套接字后面——而 Firefox 却在忙乱地尝试为出现的每个微不足道的文本字符完成整个显示更新。每次稍微降低偏好设置一点,并使用 top(1) 监视 CPU,也许。
长期以来,Firefox、Mozilla 以及之前的 Netscape 4.x 都支持此隐藏的布尔偏好设置
signed.applets.codebase_principle_support
通常,它设置为 false——如果您愿意,可以将其设置为 true。这是一个鲜为人知的偏好设置,因此这里有一个解释。首先,名称与 UNIX 的 /etc 相关性几乎相同——它深深地植根于历史,以至于基本上是错误的。没有小程序在工作;没有 Java 在工作。Mozilla 与 Java 保持着友好的分离,而 Netscape 4.x 却深深地与该技术结合在一起。Mozilla 现在以 C/C++ 代码原生处理其自身的安全性。它应该被称为 signed.content.codebase_principle_support——也许有一天会这样。
此偏好设置用于协助开发人员处理数字签名内容。它与 SSL 或 PGP/GPG 无关。签名内容的一个示例是一个网站或 Web 应用程序,它捆绑到 JAR 格式中并在该格式中进行数字签名。
粗略地说,如果数字签名内容到达 Firefox,则会执行两次检查。首先,针对 Firefox 已知证书颁发机构 (CA) 列表检查内容随附的数字证书。如果到目前为止一切正常,则该内容的制作者被认为是真实的。然后,Firefox 允许内容请求额外的权限,这些权限可以克服正常的浏览器限制,例如访问本地磁盘。通常,这是通过 JavaScript 完成的。
当发出这些请求时,Firefox 会向用户弹出对话框。这是进行第二次检查的时候——它由用户手动完成。如果用户同意,则内容可以在安全限制被取消的情况下运行,并且您的计算机将暴露,或者至少当前登录的 Linux 帐户将暴露。
对于开发人员来说,这些检查很麻烦。购买(用真金白银)用于签署内容的合适证书并设置基础设施需要额外的努力。只有当站点上线时才应该这样做。
与其使用真正的数字证书来签署正在开发的内容,不如假设您使用一个虚拟证书——一个不真实的证书。您可以使用 SignTool 工具制作虚拟证书,该工具可在 ftp.mozilla.org/pub/mozilla.org/security/nss/releases 获得。接下来,您告诉浏览器可以接受这样的虚拟证书。这就是上述偏好设置的作用。
设置此偏好设置仅削弱了第一次安全检查。您始终必须执行基于用户的检查——至少 Firefox 提供了在第一次之后记住您所说内容的功能。设置此偏好设置意味着 Firefox 接受来自任何网站的虚拟证书,因此仅在隔离的测试设备上使用它。
最后,这里有一个从 Firefox 设置 Thunderbird 访问的简单方法。将此布尔偏好设置设置为 true 以启用 mailto: URL 方案——该方案出现在网页“联系我”链接中
network.protocol-handler.external.mailto
mailto: URL 的一个示例是 mailto:nrm@kingtide.com.au。其次,将此字符串偏好设置设置为 Thunderbird 可执行文件的路径,或任何合适的可执行文件或 shell 脚本的路径
network.protocol-handler.app.mailto
挖掘隐藏的偏好设置有点像寻宝。许多都在 Firefox 友好的网页上进行了记录,但最终的权威是源代码。偏好设置名称是简单的字符串,您可以创建自己的偏好设置。可以添加到 Firefox 的许多扩展程序会将额外的偏好设置转储到偏好设置系统中。只要扩展程序记住检查和维护这些偏好设置,它们就具有与对标准 Firefox 安装有意义的偏好设置相同的一流地位。
请记住,在对 about:config 进行实验性会话之前,您始终可以保存 prefs.js 文件的副本,并且如果事情变得太奇怪,可以恢复保存的副本。祝您配置破解愉快!
本文的资源: /article/8139。
Nigel McFarlane (www.nigelmcfarlane.com) 是 Mozilla 社区的定期和不定期的技术评论员,专注于教育、分析和一些范围狭窄的错误。Nigel 是 Firefox Hacks (O'Reilly Media) 和 使用 Mozilla 进行快速应用程序开发 (Prentice Hall PTR) 的作者。