Firefox 76:音频工作线程和其他更新

大家好,希望你们一切安好,身体健康。

你们一直在期待最喜欢的浏览器发布新版本,现在 Firefox 76 来了!在这个新版本中,我们添加了一些很棒的功能来支持 Web 平台,例如 JavaScript 中的 音频工作线程Intl 优化。此外,我们在 Firefox DevTools 中添加了许多新工具,让开发过程更容易和更顺畅。

和往常一样,请继续阅读下面的亮点,或者在下面的文章中查看所有新增功能的完整列表:

新增开发人员工具

在这个版本中,DevTools 的各个领域都有有趣的更新。你可以在 Firefox 开发者版本 中抢先体验即将发布的新功能。

提高 JavaScript 生产力的技巧

Firefox 的 JavaScript 调试功能更上一层楼。

在调试工具中忽略特定文件

调试工作通常集中在可能包含错误根源的特定文件上。通过使用“Blackbox”功能,你可以告诉 调试工具忽略你不希望调试的文件。

现在,多亏了 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

提升网络响应细节和复制功能

我们收到反馈,表明复制部分网络数据以供分析应该更加容易。

除了加快渲染速度并提高可靠性之外,网络详细信息的“响应”方面现在也更加现代化,使检查和复制变得更加容易。我们将在不久的将来使网络分析更容易使用。 感谢你的反馈!

社区贡献

  • Laurențiu Nicola 通过将 --globoff 添加到生成的命令中,使网络请求的 Copy as cURL 菜单更加可靠。
  • Patricia Lee 在控制台中添加了“在检查器中显示”上下文菜单选项,提供了一种从记录 DOM 元素跳转到 DOM 树中其位置的另一种方法。
  • sankalp.sans 改进了 检查器“更改”面板 中的复制格式。现在,只需在规则之间插入空行即可“复制 CSS 规则”,使在编辑器中重复使用更加容易。
  • Basavaraj 修复了一个导致无法显示包含“+”的 网络查询参数 的问题。
  • Aarushivij 改进了 网络性能分析 的呈现方式,提高了对小尺寸的响应能力。

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

开发者版本 是 Firefox 的预发布渠道,可以让你抢先体验编程和平台功能。它在默认模式下为开发者提供了更多功能。我们希望尽快在开发者版本中添加新功能并收集不同的反馈。以下是重点:

最重要的是,在开发者版本 77 中,我们正在积极开发一个新的兼容性面板。除了通知你所有可能不被其他浏览器支持的 CSS 属性之外,你还可以通过检查器浏览它们。

Compatibility panel summarizing 2 issues for the current element

欢迎你在体验之后利用内置的“反馈”链接来反馈它的运行情况,并告诉我们我们可以进一步改进的地方。

网络平台更新

让我们来看看 Firefox 77 在 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>

对于值是循环的控件类型,当 min 的值大于 max 时,HTML <input> 元素中的 minmax 可以正常工作。(循环值以固定的时间间隔重复,从结尾又重新开始重复。)例如,对于 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 Profiler 是一种工具,可帮助你分析和改进网站在 Firefox 中的性能。它将显示当网络请求因附加工具的 阻止 webRequest 处理程序 而被暂停时的标记。这对于开发阻止内容的附加工具的开发者特别有用,他们将能够确保 Firefox 保持最佳速度。

以下是 Firefox Profiler 运行时的屏幕截图:

Firefox profiler extension UI

结论

这就是最新版的 Firefox,希望你喜欢这些新功能!和往常一样,欢迎随时提供反馈,并在评论区中提出问题。

关于 Chris Mills

Chris Mills 是 Mozilla 的高级技术作家,他撰写有关开放式 Web 应用程序、HTML/CSS/JavaScript、A11y、WebAssembly 等方面的文档和演示。他喜欢玩弄 Web 技术,并在会议和大学偶尔发表技术演讲。他曾为 Opera 和 W3C 工作过,喜欢演奏重金属鼓和喝好啤酒。他与他的妻子和三个可爱的孩子住在英国曼彻斯特附近。

Chris Mills 的更多文章……

关于 Harald Kirschner (digitarald)

Harald "digitarald" Kirschner 是 Firefox 开发人员体验和工具的产品经理,他致力于为开发者提供赋能,让他们能够编写、设计和维护一个对所有人开放和可访问的 Web。在他在 Mozilla 的 8 年中,他在性能、Web API、移动、可安装 Web 应用程序、数据可视化和开发者推广项目方面不断提升自己的技能。

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