Firefox/优化

出自 ArchWiki

本文档或章节可能需要与Firefox#技巧与窍门合并

注意: 也与 Firefox#配置 重叠;决定某个特定主题应该放在这里还是主页面是任意的。“优化”是与 Firefox 相关内容的主干,因此它们应该直接放在主页面上。如果结果太长,故障排除部分可以拆分为子页面。(在 Talk:Firefox/Tweaks 中讨论)

本页面包含高级 Firefox 配置选项和性能优化。

性能

提高 Firefox 性能分为两种参数:一种是在运行 Firefox 时输入或以开发者预期的方式修改其配置的参数,另一种是涉及外部程序或脚本的高级过程。

注意: 列出的选项可能仅适用于最新版本的 Firefox。

本节包含用于性能调整的高级 Firefox 选项。有关更多信息,请参阅 这些 MozillaZine 文章

更改性能设置

Firefox 会根据计算机的硬件规格自动使用设置 [1]

可以在首选项中完成这些设置的调整,或者通过在 about:config 中手动将 dom.ipc.processCount 值更改为 1-8,并将 browser.preferences.defaultPerformanceSettings.enabled 更改为 false

但是,您可能需要手动调整此设置,以进一步提高性能,或者降低低端设备上的内存使用率。

在这种情况下,当前 用户内容进程限制已增加到 4

$ ps -e | grep 'Web Content'
13991 tty1     00:00:04 Web Content
14027 tty1     00:00:09 Web Content
14031 tty1     00:00:20 Web Content
14040 tty1     00:00:26 Web Content

WebRender

WebRender 是一个高性能、GPU 加速的 2D 渲染引擎,用 Rust 编写。它是 Firefox 和 Servo 浏览器引擎项目的合成器。截至 Firefox 93,它默认对所有用户启用,并且如果运行它的硬件 至少支持 OpenGL 3.0 或 OpenGL ES 3.0(截至 2021-04) 并且 满足最低驱动程序要求,则默认使用硬件渲染。如果您的系统不满足这些要求,它将回退到使用 Software Webrender 的软件渲染。

如果您在机器上使用最新的驱动程序时遇到渲染问题,您可以通过在 about:config 中将 gfx.webrender.software 首选项设置为 true 来强制启用 Software Webrender。

警告: 由于 稳定性、渲染输出和性能方面的严重问题,WebRender 硬件渲染在许多 GPU 和驱动程序上被禁用。如果它在您的硬件上被禁用,则不建议强制硬件渲染。

关闭磁盘缓存

每个加载的对象(html 页面、jpeg 图像、css 样式表、gif 横幅)都保存在 Firefox 缓存中,以便将来使用,而无需再次下载。据估计,只有一小部分对象会被重用,通常约为 30%。这是因为对象过期时间非常短、更新或仅仅是用户行为(加载新页面而不是返回已访问的页面)。Firefox 缓存分为内存缓存和磁盘缓存,后者会导致频繁的磁盘写入:新加载的对象被写入内存,而较旧的对象被删除。

另一种方法是使用 about:config 设置

  • browser.cache.disk.enable 设置为 false
  • 验证 browser.cache.memory.enable 是否设置为 true,有关此选项的更多信息可以在 browser.cache.memory Mozilla 文章中找到
  • 添加条目 browser.cache.memory.capacity 并将其设置为您想要节省的 KB 量,或者设置为 -1 以进行 自动 缓存大小选择(跳过此步骤的效果与将值设置为 -1 相同)
    • “自动”大小选择基于一个十年前的表格,该表格仅包含针对系统内存为 8GB 或更低的系统的设置。以下公式非常接近地逼近此表格,可用于更动态地设置 Firefox 缓存:41297 - (41606 / (1 + ((RAM / 1.16) ^ 0.75))),其中 RAM 以 GB 为单位,结果以 KB 为单位。

此方法有一些缺点

  • 如果浏览器崩溃或重启后,当前浏览的网页内容将丢失,可以使用 anything-sync-daemon 或任何类似的定期同步脚本来避免这种情况,以便缓存定期复制到驱动器
  • 需要为每个用户单独配置设置

将磁盘缓存移动到 RAM

另一种选择是将“磁盘”缓存移动到 RAM 磁盘,为您提供介于上述两者之间的解决方案。缓存现在将在 Firefox 运行之间(包括 Firefox 崩溃恢复)保留,但将在重启时(包括操作系统崩溃)丢弃。

要执行此操作,请转到 about:config 并将 browser.cache.disk.parent_directory 设置为 /run/user/UID/firefox,其中 UID 是您的用户 ID,可以通过运行 id -u 获取。

打开 about:cache 以验证新的磁盘缓存位置。

延长会话信息记录间隔

Firefox 定期将当前会话状态(打开的 url、cookies、历史记录和表单数据)存储到磁盘。它用于在崩溃时恢复先前的会话。默认设置是每 15 秒保存一次会话,导致频繁的磁盘访问。

要将保存间隔增加到 10 分钟(600000 毫秒),例如,在 about:config 中将 browser.sessionstore.interval 的设置更改为 600000

要完全禁用此功能,请将 browser.sessionstore.resume_from_crash 更改为 false

整理配置文件的 SQLite 数据库碎片

警告: 此过程可能会损坏数据库,导致会话无法正确保存。

Firefox 将书签、历史记录、密码保存在 SQLite 数据库中。SQLite 数据库会随着时间的推移变得碎片化,并且到处都会出现空白空间。但是,由于没有管理进程检查和优化数据库,这些因素最终会导致性能下降。改进启动和一些其他与书签和历史记录相关的任务的一个好方法是从这些数据库中整理碎片并修剪未使用的空间。

您可以使用 profile-cleaner 来执行此操作,同时 运行 Firefox

profile-cleaner 用法示例
SQLite 数据库 优化前大小 优化后大小 % 变化
urlclassifier3.sqlite 37 M 30 M 19 %
places.sqlite 16 M 2.4 M 85 %

Firefox 提供了一个工具来整理碎片并优化 places 数据库,这是大多数减速和配置文件损坏的根源。要访问此工具,请打开 about:support 页面,搜索 Places Database,然后单击 Verify Integrity 按钮。

通过 tmpfs 将整个配置文件缓存到 RAM 中

如果系统有剩余内存,可以使用 tmpfs缓存整个配置文件目录,这可能会提高 Firefox 的响应速度。

禁用 Pocket

如果您不使用 Pocket 服务,您可能希望通过在 about:config 中将 extensions.pocket.enabled 设置为 false 来禁用它。

外观

字体

请参阅主文章:字体配置

配置 DPI 值

如果系统的 DPI 低于 96,修改以下值可以帮助改善字体在 Firefox 中的外观。默认情况下,Firefox 使用 96,并且仅当系统 DPI 值较高时才使用系统 DPI。要强制使用系统 DPI,而不管其值如何,请在地址栏中键入 about:config 并将 layout.css.dpi 设置为 0

请注意,上述方法仅影响 Firefox 用户界面的 DPI 设置。网页内容仍然使用 96 的 DPI 值,这可能看起来很丑陋,或者在高分辨率显示器的情况下,可能渲染得太小而无法阅读。一种解决方案是将 layout.css.devPixelsPerPx 更改为系统 DPI 除以 96。例如,如果您的系统 DPI 为 144,则要添加的值为 144/96 = 1.5。将 layout.css.devPixelsPerPx 更改为 1.5 会使网页内容使用 144 的 DPI,这看起来要好得多。

如果这导致 Firefox 103 之后的版本中字体过大,请将 browser.display.os-zoom-behavior 更改为零。然后,在 about:config 搜索栏中键入 ui.textScaleFactor,选择“数字”旁边的圆圈,单击加号按钮以添加设置键,并将其值编辑为您 layout.css.devPixelsPerPx 值的 100 倍。例如,如果设置为 1.25,则 ui.textScaleFactor 应设置为 125。

另请参阅 HiDPI#Firefox 以获取有关 HiDPI 显示器的信息,并参阅 [2] 以计算 DPI。

来自 Microsoft Windows 的默认字体设置

以下是 Firefox 安装在 Microsoft Windows 中时的默认字体首选项。许多网站使用 Microsoft 字体。

Proportional: Serif Size (pixels): 16
Serif: Times New Roman
Sans-serif: Arial
Monospace: Courier New Size (pixels): 13

通用用户界面 CSS 设置

可以通过编辑 ~/.mozilla/firefox/profile/chrome/ 中的 userChrome.cssuserContent.css 文件来修改 Firefox 的用户界面(profile_dir 的形式为 hash.name,其中 hash 是一个 8 个字符的看似随机的字符串,配置文件 name 通常是 default)。您可以通过在 URL 栏中键入 about:support,并在 Firefox 文档中描述的 Application Basics 部分下搜索 Profile Directory 字段来找出确切的名称。

注意
  • chrome/ 文件夹和 userChrome.css/userContent.css 文件可能不一定存在,因此可能需要创建它们。
  • 必须在 about:config 中启用 toolkit.legacyUserProfileCustomizations.stylesheets

本节仅处理修改 Firefox 用户界面的 userChrome.css 文件,而不处理网页。

更改界面字体

此设置有效地覆盖了全局 GTK 字体首选项,并且不影响网页,仅影响用户界面本身

~/.mozilla/firefox/profile/chrome/userChrome.css
* {
    font-family: "FONT_NAME";
}

隐藏按钮图标

启用仅文本按钮

~/.mozilla/firefox/profile/chrome/userChrome.css
.button-box .button-icon {
    display: none;
}

隐藏各种标签页按钮

这些设置隐藏了出现在标签栏水平边缘的箭头、切换“所有标签页”下拉列表的按钮以及创建新标签页的加号按钮。

~/.mozilla/firefox/profile/chrome/userChrome.css
/* Tab bar */

toolbarbutton#scrollbutton-up, toolbarbutton#scrollbutton-down {
    /* Hide tab scroll buttons */
    display: none;
}

.browser-toolbar > * #alltabs-button {
    /* Hide tab drop-down list */
    display: none;
}

.browser-toolbar > * #new-tab-button {
    /* Hide new-tab button */
    display: none;
}

垂直/树状标签页

要将标签栏放置在侧边栏/树状结构中,请使用以下插件之一

Firefox 插件无法通过其扩展 API 隐藏原生标签栏 - 要做到这一点,请按照您的插件的设置/高级说明进行操作。

隐藏标题栏和窗口边框

要用标签栏替换标题栏,请在 about:config 中将 browser.tabs.inTitlebar 设置为 1

或者转到“更多工具”,然后转到“自定义工具栏”,然后在左下角找到名为“标题栏”的复选框。取消选中它。如果缺少复选框,请确保 XDG_CURRENT_DESKTOP 环境变量已正确设置,和/或 MOZ_GTK_TITLEBAR_DECORATION 环境变量设置为“client”。

自动隐藏书签工具栏

~/.mozilla/firefox/profile/chrome/userChrome.css
#PersonalToolbar {
    visibility: collapse !important;
}

#navigator-toolbox:hover > #PersonalToolbar {
    visibility: visible !important;
}

移除侧边栏宽度限制

~/.mozilla/firefox/profile/chrome/userChrome.css
/* remove maximum/minimum  width restriction of sidebar */
#sidebar {
    max-width: none !important;
    min-width: 0px !important;
}

使用深色 GTK 主题时输入字段不可读

当使用深色 GTK 主题时,可能会遇到输入和文本字段在 Internet 页面上不可读的情况(例如,白色背景上的白色文本输入字段,或深色背景上的黑色文本)。这可能是因为网站仅设置了背景色或文本颜色,而 Firefox 从主题中获取了另一个。要防止 Firefox 分别在网页中使用主题颜色和深色主题,请确认 about:config 中的 browser.display.use_system_colorswidget.content.allow-gtk-dark-theme 设置为 false

否则,如果之前的修改没有解决问题,则可以通过在 about:config 中添加名为 widget.content.gtk-theme-override 的新字符串并将其设置为浅色主题(如 Breeze:lightAdwaita:light)来使用浅色 GTK 主题启动 Firefox。

使用 CSS 覆盖输入字段颜色
注意: 相关错误已从 68 开始解决。 [3]

扩展程序 Text Contrast for Dark Themes 根据需要设置另一种颜色以保持对比度。

或者,在 userContent.css 中或使用 stylus 插件 为所有网页显式设置标准颜色。样式表通常位于您的配置文件文件夹中(访问 about:profiles 获取路径),在 chrome/userContent.css 中,如果没有,您可以在那里创建它。

以下将输入字段设置为标准黑色文本/白色背景;两者都可以被显示的网站覆盖,以便颜色按预期显示

注意: 如果您希望 urlbarsearchbarwhite,请删除前两个 :not css 选择器。
input:not(.urlbar-input):not(.textbox-input):not(.form-control):not([type='checkbox']):not([type='radio']), textarea, select {
    -moz-appearance: none !important;
    background-color: white;
    color: black;
}

#downloads-indicator-counter {
    color: white;
}
更改 GTK 主题

要强制 Firefox 对 Web 内容和 UI 都使用浅色主题(例如 Adwaita),请参阅 GTK#主题

仅为内容进程更改 GTK 主题

要强制 Firefox 仅对 Web 内容使用浅色主题(例如 Adwaita)

  1. 在地址栏中打开 about:config
  2. 创建一个新的 widget.content.gtk-theme-override 字符串类型条目(鼠标右键 > 新建 > 字符串)。
  3. 将值设置为用于渲染目的的浅色主题(例如 Adwaita:light)。
  4. 重启 Firefox。

Web 内容 CSS 设置

本节介绍 userContent.css 文件,您可以在其中为 Web 内容添加自定义 CSS 规则。对此文件的更改将在浏览器重启后生效。

此文件可用于进行小修复或将个人样式应用于经常访问的网站。来自 userstyles.org 等来源提供了流行网站的自定义样式表。您可以安装一个插件,例如 superUserContent[死链接 2020-03-29 ⓘ] 来管理主题。此插件创建目录 chrome/userContent.css.d,并在页面刷新时将更改应用于其中的 CSS 文件。

导入其他 CSS 文件

~/.mozilla/firefox/profile/chrome/userContent.css
@import url("./imports/some_file.css");

阻止域的某些部分

~/.mozilla/firefox/profile/chrome/userContent.css
@-moz-document domain(example.com) {
    div#header {
        background-image: none !important;
    } 
}

在 PDF 文件链接后添加 [pdf]

~/.mozilla/firefox/profile/chrome/userContent.css
/* add '[pdf]' next to links to PDF files */
a[href$=".pdf"]:after {
    font-size: smaller;
    content: " [pdf]";
}

鼠标和键盘

鼠标滚轮滚动速度

要修改鼠标滚轮滚动速度的默认值(即加速),请转到 about:config 并搜索 mousewheel.acceleration。这将显示可用选项,修改以下内容

  • mousewheel.acceleration.start 设置为 1
  • mousewheel.acceleration.factor 设置为所需的数字(1020 是常用值)。

或者,要使用系统值(如 Chromium 中的滚动工作方式),请将 mousewheel.system_scroll_override.enabled 设置为 false

Mozilla 增加鼠标滚轮滚动速度的建议是

  • mousewheel.default.delta_multiplier_y 设置为 200500 之间(默认值:100

像素级精确触控板滚动

要启用一对一的触控板滚动(如在 Nautilus 等 GTK3 应用程序中看到的那样),请在启动 Firefox 之前设置 MOZ_USE_XINPUT2=1 环境变量

如果滚动不流畅,请尝试在首选项 > 常规 > 浏览下启用 Firefox 的使用平滑滚动选项。

启用触摸屏手势

Wayland 上,默认启用触摸屏手势。

在 X11 上,确保 dom.w3c_touch_events.enabled 设置为 1(启用)或 2(默认,自动检测),并设置 MOZ_USE_XINPUT2=1 环境变量

在某些设备上,可能需要通过运行以下命令禁用 xinput 的触摸屏手势

$ xsetwacom --set device Gesture off

鼠标点击 URL 栏的行为

在旧版本的 Firefox 中,可以在 about:config 中调整地址栏的行为,但这已在 2020 年 3 月移除

为了例如禁用首次点击时选择地址栏内容的行为,或者允许双击 URL 以完整选择它,请参阅用户贡献的脚本,例如 https://github.com/SebastianSimon/firefox-omni-tweaks

平滑滚动

为了在 Firefox 中获得平滑的基于物理的滚动,可以更改 general.smoothScroll.msdPhysics 配置以模拟与其他 Web 浏览器中类似的更快的行为。对于更快的配置,请将以下内容附加到 ~/.mozilla/firefox/your-profile/user.js(需要重启)

user_pref("general.smoothScroll.lines.durationMaxMS", 125);
user_pref("general.smoothScroll.lines.durationMinMS", 125);
user_pref("general.smoothScroll.mouseWheel.durationMaxMS", 200);
user_pref("general.smoothScroll.mouseWheel.durationMinMS", 100);
user_pref("general.smoothScroll.msdPhysics.enabled", true);
user_pref("general.smoothScroll.other.durationMaxMS", 125);
user_pref("general.smoothScroll.other.durationMinMS", 125);
user_pref("general.smoothScroll.pages.durationMaxMS", 125);
user_pref("general.smoothScroll.pages.durationMinMS", 125);

此外,还必须更改鼠标滚轮滚动设置,以平滑方式做出反应

user_pref("mousewheel.min_line_scroll_amount", 30);
user_pref("mousewheel.system_scroll_override_on_root_content.enabled", true);
user_pref("mousewheel.system_scroll_override_on_root_content.horizontal.factor", 175);
user_pref("mousewheel.system_scroll_override_on_root_content.vertical.factor", 175);
user_pref("toolkit.scrollbox.horizontalScrollDistance", 6);
user_pref("toolkit.scrollbox.verticalScrollDistance", 2);

如果您在性能各异的机器上遇到问题,请尝试修改 mousewheel.min_line_scroll_amount 直到感觉足够快为止。

有关修改质量-弹簧-阻尼器参数的更高级配置,请参阅 AveYo 的自然平滑滚动配置

注意: 由于 https://bugzilla.mozilla.org/show_bug.cgi?id=1568722,在 Wayland 上,动量滚动感觉松散,可以通过转到 about:config 并关闭 apz.gtk.kinetic_scroll.enabled 来关闭它。但是,这将使滚动到长页面的开头和结尾变得更加困难。

设置退格键的行为

请参阅 Firefox#退格键无法用作“后退”按钮

禁用鼠标中键粘贴剪贴板内容

请参阅 Firefox#鼠标中键行为

Emacs 快捷键绑定

要在文本字段中激活 Emacs/Readline 样式的快捷键绑定,请参阅 GTK#Emacs 快捷键绑定

杂项

强制启用硬件视频解码

尽管默认情况下启用了 media.hardware-video-decoding.enabled,但可能需要通过将 media.hardware-video-decoding.force-enabled 设置为 true 来强制启用硬件视频解码。

移除全屏警告

可以通过在 about:config 中将 full-screen-api.warning.timeout 设置为 0 来禁用全屏模式下显示的视频警告(… 现在是全屏)。

更改 Firefox 搜索栏中搜索引擎的顺序

要更改搜索引擎在其中显示的顺序

  • 打开搜索引擎的下拉列表,然后单击管理搜索引擎...条目。
  • 突出显示要移动的引擎,然后使用上移下移来移动它。或者,您可以使用拖放。

“手气不错”模式

一些搜索引擎具有“手气不错”功能。例如,Google 具有“手气不错”。

要激活它们,请在 about:config 中搜索 keyword.url 并修改其值(如果有)为搜索引擎的 URL。

对于 Google,将其设置为

https://www.google.com/search?btnI=I%27m+Feeling+Lucky&q=

使用 DNSSEC 验证器的安全 DNS

您可以启用 DNSSEC 支持以获得更安全的浏览。

使用 DNS over HTTPS 的安全 DNS

请参阅 域名解析#应用层 DNS

添加 magnet 协议关联

about:config 中,将 network.protocol-handler.expose.magnet 设置为 false。如果它不存在,则需要创建它,右键单击空白区域并选择新建 > 布尔值,输入 network.protocol-handler.expose.magnet 并将其设置为 false

下次您打开 magnet 链接时,系统将提示您显示启动应用程序对话框。从那里,只需选择您选择的 BitTorrent 客户端。此技术也可以与其他协议一起使用:network.protocol-handler.expose.<protocol>

防止意外关闭

有不同的方法来处理这个问题

可以通过在 about:config 中将 browser.quitShortcut.disabled 属性设置为 true 来禁用此行为

另一种方法是在您的窗口管理器配置文件中添加规则。例如,在 Openbox 中添加

 <keybind key="C-q">
   <action name="Execute">
     <execute>false</execute>
   </action>
 </keybind>

在您的 ~/.config/openbox/rc.xml 文件的 <keyboard> 部分中。

注意: 这对于在图形服务器下使用的每个应用程序都有效。

可以安装 Disable Ctrl-Q and Cmd-Q 扩展程序以防止意外关闭浏览器。

注意: 由于 错误,此扩展程序在 Linux 上不再有效。

滚动不流畅或卡顿

Firefox 中的滚动可能会感觉“不流畅”或“卡顿”。MozillaZine 上的帖子给出了在 Gentoo 上有效的设置,但据报道在 Arch Linux 上也有效

  1. mousewheel.min_line_scroll_amount 设置为 40
  2. general.smoothScrollgeneral.smoothScroll.pages 设置为 false
  3. image.mem.min_discard_timeout_ms 设置为一个非常大的值,例如 2100000000,但不超过 2140000000。高于该数字,Firefox 将不接受您的条目并报错,错误代码为:“您输入的文本不是数字。”
  4. image.mem.max_decoded_image_kb 设置为至少 512K

现在滚动应该流畅了。

在 nspawn 容器内运行 Firefox

请参阅 systemd-nspawn#运行 Firefox

禁用 WebRTC 音频后处理

如果您正在使用 PulseAudio PulseAudio#麦克风回声/噪声消除,您可能不希望 Firefox 进行额外的音频后处理。

要禁用音频后处理,请将以下首选项的值更改为 false

  • media.getusermedia.aec_enabled(声学回声消除)
  • media.getusermedia.agc_enabled(自动增益控制)
  • media.getusermedia.noise_enabled(噪声抑制)
  • media.getusermedia.hpf_enabled(高通滤波器)

Fido U2F 身份验证

Firefox 支持 Fido U2F 身份验证协议。安装 libfido2 以获取所需的 udev 规则。

恢复 ALSA 工作

只要 Arch 继续使用 ac_add_options --enable-alsa 构建 Firefox,那么 Firefox 就可以在系统上正常工作,而无需脉冲音频,无需任何特殊配置,也无需 apulse(除非在系统上使用脉冲音频并希望 Firefox 避免使用它)。过去,人们必须允许 ioctl 系统调用,默认情况下 Firefox 沙箱阻止了该调用,并且 ALSA 设置 security.sandbox.content.syscall_whitelistabout:config 中需要该调用,对于 x86-64 为正确的 ioctl 系统调用编号 16,对于 x86-32 为 54,但现在不再需要。有关参考,请参见

[4] [5]

强制启用 WebGL

在某些平台上,即使使用者希望使用 WebGL,WebGL 也可能被 禁用。要强制启用 WebGL,请将 webgl.force-enabled 设置为 true,要同时强制启用 WebGL 抗锯齿,请将 webgl.msaa-force 设置为 true

如果您收到类似于此的错误

libGL error: MESA-LOADER: failed to retrieve device information
libGL error: image driver extension not found
libGL error: failed to load driver: i915
libGL error: MESA-LOADER: failed to retrieve device information
...

那么您可以尝试 Firefox bug 1480755 中解释的解决方案 [6]

security.sandbox.content.read_path_whitelist 设置为 /sys/

启用 Pocket 推荐

如果您没有看到“Pocket 推荐”(首选项 > 主页 > Firefox 主页内容 - 在“热门站点”和“亮点”之间),您可以通过在 about:config 中将 browser.newtabpage.activity-stream.feeds.section.topstoriesbrowser.newtabpage.activity-stream.feeds.system.topstories 设置为 true 来启用它。尽管该选项仍然不会显示在“首选项”中,但新打开的标签页/窗口(如果设置为 Firefox 主页)现在应该显示 Pocket 推荐。

阻止下载面板自动打开

从 Firefox 98 开始,每当下载开始时,下载面板(包含正在进行/最近的下载)始终会打开。

您可以通过在 about:config 中将 browser.download.alwaysOpenPanel 首选项设置为 false 来禁用此行为。

参见