Firefox 76:音频工作线程和其他技巧

注意:本文亦提供以下语言版本:简体中文 (Chinese (Simplified))繁體中文 (Chinese (Traditional))Español (Spanish).

大家好,希望大家一切安好,保持安全。

您最喜欢的浏览器的全新版本总是值得期待,现在 Firefox 76 来了!此版本中,Web 平台支持增加了许多新功能,例如在 JavaScript 方面有 音频工作线程Intl 方面的改进。此外,我们还为 Firefox 开发者工具添加了许多不错的改进,使开发变得更加容易快捷。

与往常一样,请继续阅读以了解亮点,或在以下文章中查找完整的添加列表

开发者工具新增功能

此版本中每个面板都包含有趣的开发者工具更新。您可以现在在 Firefox 开发版 中预览即将推出的功能。

更多 JavaScript 生产力技巧

Firefox JavaScript 调试变得更加出色。

在调试器中忽略整个文件夹

通常,调试工作只关注可能包含罪魁祸首的特定文件。使用“黑盒化”,您可以告诉 调试器 忽略不需要调试的文件。

现在,由于 Stepan Stava 在调试器的源代码面板中添加了新的上下文菜单,因此更容易对文件夹执行此操作。您可以将“忽略”限制为选定文件夹内或外部的文件。将此与“设置目录根目录”结合使用,获得更精准的调试体验。

Animation showing how we've combined ignoring files in folders and with directory root for focused debugging.

为较大的控制台代码段折叠输出

控制台多行编辑器模式 非常适合对较长的代码段进行迭代。早期反馈表明,用户不希望在控制台输出中重复代码,以避免混乱。由于 thelehhman 的贡献,具有多行的代码段会整齐地折叠起来,并可以根据需要展开。

Animation showing how to iterate on long script expressions with Console's multi-line input mode.

在调用堆栈中复制完整 URL

在调试器中复制堆栈可以使您在逐步执行时共享快照。这有助于您提交更完善的错误报告,并促进与同事的交接。为了为协作者提供错误的完整上下文,调用堆栈面板 的“复制堆栈跟踪”菜单现在会复制完整 URL,而不仅仅是文件名。

screenshot of 'copy stack trace' in action in the Debugger

在 Firefox 的 JSON 预览中始终提供“全部展开”

针对 JSON 文件的内置预览功能可以轻松地搜索响应和探索 API 端点。这对大型文件也很有效,其中数据可以根据需要展开。由于 zacnomore 的贡献,“全部展开”选项现在始终可见。

更多网络检查技巧

Firefox 76 通过 网络监视器 提供了更轻松地访问网络信息的方式。

在 WebSocket 检查中支持 Action Cable

WebSocket 库使用各种格式来编码其消息。我们希望确保正确解析和格式化它们的有效负载,以便您可以阅读它们。在过去的发行版中,我们添加了对 Socket.IO、SignalR 和 WAMP WebSocket 消息检查 的支持。由于贡献者 Uday Mewada,Action Cable 消息现在也得到了很好的格式化。

action cable websocket message formatting in devtools

隐藏 WebSocket 控制帧

WebSocket 控制帧由服务器和浏览器用于管理实时连接,但它们不包含任何数据。贡献者 kishlaya.j 加入进来,默认情况下隐藏控制帧,从调试中剔除了一些额外的噪音。如果您需要查看它们,可以在发送/接收下拉列表中启用它们。

调整网络表列大小以适合内容

当您从扫描实时更新转向关注特定数据点时,网络请求和响应数据可能会不堪重负。自定义可见的网络面板列可以让您根据当前任务调整输出。以前,这需要大量的拖动和调整大小。由于 Farooq AR,您现在可以双击表格的调整大小手柄,以将列的宽度按比例缩放以适合其内容,就像在现代数据表格中一样。

Animation showing how to double-click column headers for quickly fitting column sized to their content

更好的网络响应详细信息和复制

我们收到了反馈,应该更轻松地复制网络数据的某些部分以供进一步分析。

现在,网络详细信息的“响应”部分已实现现代化,通过更快的渲染速度和更高的可靠性,使其更易于检查和复制。在不久的将来,我们将为网络分析添加更多易用性改进,感谢您的反馈

社区贡献

开发版新功能:CSS 兼容性面板

开发版 是 Firefox 的预发行版渠道,提供对工具和平台功能的抢先体验。其设置默认情况下为开发者提供了更多功能。我们希望尽快将新功能引入开发版,以便收集您的反馈,包括以下亮点。

首先,在开发版 77 的发行版中,我们正在寻求对新的兼容性面板的意见。此面板将告知您哪些 CSS 属性可能不受其他浏览器支持,并且可以从检查器访问。

Compatibility panel summarizing 2 issues for the current element

请试用它,并使用内置的“反馈”链接报告它的工作效果,以及我们如何进一步改进它。

Web 平台更新

让我们探索 Firefox 76 在 Web 平台更新方面带来了什么。

音频工作线程

音频工作线程提供了一种有用的方法来运行自定义 JavaScript 音频处理代码。音频工作线程与其前身——ScriptProcessorNode——之间的区别在于工作线程以类似于 Web 工作线程的方式在主线程之外运行,解决了以前遇到的性能问题。

基本思路是这样的:您定义一个自定义的 AudioWorkletProcessor,它将处理音频处理。接下来,注册它。

// white-noise-processor.js
class WhiteNoiseProcessor extends AudioWorkletProcessor {
  process (inputs, outputs, parameters) {
    const output = outputs[0]
    output.forEach(channel => {
      for (let i = 0; i < channel.length; i++) {
        channel[i] = Math.random() * 2 - 1
      }
    })
    return true
  }
}

registerProcessor('white-noise-processor', WhiteNoiseProcessor)

在您的主脚本中,您随后加载处理器,创建 AudioWorkletNode 的实例,并将处理器名称传递给它。最后,将该节点连接到音频图。

async function createAudioProcessor() {
  const audioContext = new AudioContext()
  await audioContext.audioWorklet.addModule('white-noise-processor.js')
  const whiteNoiseNode = new AudioWorkletNode(audioContext, 'white-noise-processor')
  whiteNoiseNode.connect(audioContext.destination)
}

阅读我们的 使用 AudioWorklet 进行背景音频处理 指南以获取更多信息。

其他更新

除了工作线程,我们还添加了一些其他 Web 平台功能。

HTML <input>

HTML <input> 元素的 minmax 属性现在在 min 的值大于 max 的值时工作正常,适用于值是周期性的控制类型。(周期性值以规律的间隔重复,从末尾绕回开头。)这对于 datetime 输入特别有用,例如,您可能希望指定一个时间范围为晚上 11 点到凌晨 2 点。

Intl 改进

Intl.NumberFormatIntl.DateTimeFormatIntl.RelativeTimeFormat 构造函数的 numberingSystemcalendar 选项现在默认启用。

尝试以下示例

const number = 123456.789;
console.log(new Intl.NumberFormat('en-US', { numberingSystem: 'latn' }).format(number));
console.log(new Intl.NumberFormat('en-US', { numberingSystem: 'arab' }).format(number));
console.log(new Intl.NumberFormat('en-US', { numberingSystem: 'thai' }).format(number));

var date = Date.now();
console.log(new Intl.DateTimeFormat('th', { calendar: 'buddhist' }).format(date));
console.log(new Intl.DateTimeFormat('th', { calendar: 'gregory' }).format(date));
console.log(new Intl.DateTimeFormat('th', { calendar: 'chinese' }).format(date));

交叉观察器

IntersectionObserver() 构造函数现在接受 DocumentElement 对象作为其根节点。在这种情况下,根节点是其边界框被视为观察目的的视窗的区域。

浏览器扩展

Firefox 分析器 是一种工具,可帮助分析和改进您的网站在 Firefox 中的性能。现在,它将在扩展的 阻止 webRequest 处理程序 暂停网络请求时显示标记。这对内容阻止扩展的开发者特别有用,使他们能够确保 Firefox 保持最快的速度。

以下是对 Firefox 分析器运行时的屏幕截图

Firefox profiler extension UI

总结

这就是 Firefox 最新版本的所有内容,希望你喜欢新功能!与往常一样,欢迎在评论中提出反馈和问题。

关于 Chris Mills

Chris Mills 是 Mozilla 的高级技术作家,负责撰写有关开放式网络应用程序、HTML/CSS/JavaScript、A11y、WebAssembly 等的文档和演示。他热衷于使用网络技术,并在会议和大学偶尔发表技术演讲。他曾在 Opera 和 W3C 工作过,喜欢演奏重金属鼓和喝好啤酒。他住在英国曼彻斯特附近,与他的妻子和三个可爱的女儿一起生活。

Chris Mills 的更多文章……

关于 Harald Kirschner (digitarald)

Harald "digitarald" Kirschner 是 Firefox 开发人员体验和工具的产品经理,致力于赋予创作者力量,让他们编码、设计和维护一个对所有人开放且可访问的网络。在他在 Mozilla 的 8 年时间里,他不断提升自己的技能,涉及性能、网络 API、移动、可安装 Web 应用程序、数据可视化和开发人员推广项目。

Harald Kirschner (digitarald) 的更多文章……


5条评论

  1. Rob Lewis

    自从将 macOS 更新到 10.15.4 之后,我在 Firefox 上遇到了一个问题,上下文菜单经常不会出现(使用双指轻触或 Ctrl-单击调用)。还有其他人遇到过这种情况吗?(我已经报告了这个问题。)

    2020 年 5 月 6 日 下午 09:15

    1. Konstantin Paul

      您好,Rob Lewis,

      据我所知,上下文菜单已从规范中删除。
      更准确地说是在 HTML v5.2 中。请查看规范:(查看“menu”和“menuitem”元素)
      https://www.w3.org/TR/html52/changes.html#features-removed
      或者直接在 caniuse.com 上查看
      https://caniuse.cn/#search=menu

      问候,
      Konstantin

      2020 年 5 月 8 日 上午 00:38

  2. Mike Starr

    很棒的更新,伙计们!效率提升了很多!非常感谢你们为网络所做的一切。

    干杯。

    2020 年 5 月 7 日 下午 11:36

  3. Albatrosul Verde

    Firefox 一直是这个行业的一盏明灯,我对你们所有人的工作都深表感谢,伙计们。

    我一直是 Firefox 的用户,从 2008 年开始,尽管我在遇到问题时会发誓,但你们出色地完成了工作,并开发了这款顶级的浏览器。谢谢你们!

    2020 年 5 月 7 日 下午 14:07

    1. Gagik

      自 2009 年 Netscape 停产后,我就转用 Firefox。现在我已经使用它作为我的主要浏览器 11 年了,作为一名专业开发人员和用户。从未想过更换其他浏览器。

      2020 年 5 月 17 日 上午 05:28

本文的评论已关闭。