Firefox 76:音频 Worklet 和其他技巧

大家好,希望大家一切安好。

对于深受用户喜爱的浏览器来说,新版本必定值得期待,我们的 Firefox 76 终于面世了!Web 平台支持在此版本中新增了许多精彩功能,例如 AudioWorklet 和 JavaScript 的 Intl改进。另外,Firefox DevTools 中也添加了诸多改进,让开发变得更加轻松快捷。

与往常一样,请继续阅读来了解重点内容,或从以下文章中查找所有新增功能的完整列表:

开发人员工具补充

在这个发行版本中,DevTools 的每个面板都有值得关注的更新。另外,也可通过 Firefox Dev Edition 预览即将推出的功能。

更多 JavaScript 效率技巧

Firefox JavaScript 调试又上一个新台阶。

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

许多时候,调试的重点仅放在那些存在纰漏的文件上。通过“放进黑箱”,您可以告诉 调试器 忽略不需要调试的文件。

现在对于文件夹也能轻松办到,而这要归功于 Stepan Stava 在调试器的“Sources”面板中加入的上下文菜单。“忽略”的对象可被限制为选定文件夹里面或外面的文件。结合使用“Set directory root”,就能实现精准调试体验。

演示如何将忽略文件夹内文件和设定目录根相结合以实现精准调试的动画。

折叠较长的 Console 代码片段输出

Console多行编辑器模式 完美适合迭代较长的代码片段。根据我们之前收到的反馈,用户不希望 Console 输出中看到重复的代码,以便能避免凌乱不堪。感谢 thelehhman 的贡献,现在能轻松折叠含有多行代码的代码片段,并可在需要时展开。

演示如何通过Console多行输入模式迭代较长脚本表达式的动画。

复制调用堆栈中的完整 URL

在调试器中复制堆栈,轻松共享分步执行的快照。如此一来,提交 Bug 错误更加便捷,移交给同事也很方便。为了让合作者们获得 Bug 错误的完整上下文信息,调用堆栈面板 的“Copy stack trace”菜单现在可以复制完整的 URL,而不仅仅是文件名。

Debugger中“Copy stack trace”实际操作截图

Firefox 的 JSON 预览中始终提供“Expand All”选项

通过内置的 JSON 文件预览功能,轻松搜索响应和探索 API 端点。这也适用于大文件,随时根据需要展开其中的数据。感谢 zacnomore 的贡献,“Expand All”选项现在始终可见。

更多网络检查技巧

Firefox 76 中的 Network Monitor 让用户能够更加轻松地访问网络信息。

WebSocket 检查中支持 Action Cable

WebSocket 库使用许多不同的格式来编码其消息。我们希望正确解析和格式化它们的有效负载,从而方便您阅读。在以前的发行版中,我们添加了对 Socket.IO、SignalR 和 WAMP WebSocket 消息检查 的支持。感谢 Uday Mewada 的贡献,Action Cable 消息现在也能妥当地格式化。

Devtools中Action Cable Websocket消息格式化

隐藏 WebSocket 控制帧

WebSocket 控制帧供服务器和浏览器用于管理实时连接,但它们不含任何数据。kishlaya.j 贡献了一个新思路,通过默认隐藏控制帧来为您的调试再减少一些干扰。当您需要查看时,也可在已发送/已接收下拉菜单中启用。

调整 Network 表格列宽度来适配内容

在从浏览实时更新转向关注特定数据点时,网络请求与响应数据可能会令您烦恼不已。通过自定可见的 Network 面板列,您可以根据手边的问题来调整输出。这在过去需要许多拖放与大小调整操作才能实现。感谢 Farooq AR 的贡献,现在可以通过双击表格的大小调整手柄,像现代数据表中一样将列宽度调整为与内容匹配。

演示如何通过双击列标题使列宽度快速适配列内容的动画

更好的 Network 响应细节和复制

我们收到了反馈,用户希望能更加轻松地复制网络数据部分作进一步分析。

现在,Network 详细信息中的“Response”部分得到了现代化,通过加快渲染速度并提高可靠性,使检查和复制变得更加轻松。因为有 大家的贡献,我们很快会给 Network 分析添加更多易用性改进。

社区贡献

Dev Edition 新增功能:CSS 兼容性面板

Developer Edition 是 Firefox 的预发布渠道,可以抢先体验各种工具和平台功能。该版本的默认设置中为开发人员开启了更多功能。我们乐于将新功能快速引入 Developer Edition,以便收集反馈信息,重点包括以下内容。

首先,我们期盼大家对 Dev Edition 77 中新兼容性面板谏言纳策。此面板会告知可能在其他浏览器中不受支持的 CSS 属性,可以通过 Inspector 来访问。

兼容性面板中概述了当前元素的2个问题

您不妨试验一下,并使用“Feedback”链接分享它给您的体验,告诉我们如何能进一步改进。

Web 平台更新

我们来看看 Firefox 77 在网络平台更新方面带来了什么。

Audio Worklet

Audio Worklet 提供了一种运行 JavaScript 音频处理代码的实用方法。Audio Worklet 与其前代 ScriptProcessorNode 的区别在于,Worklet 通过与 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 进行后台音频处理 的指南。

其他更新

除了 Worklet 外,我们还添加了一些 Web 平台功能。

HTML <input>

对于值为期间的控制类型,HTML <input> 元素的 minmax 属性在 min 值大于 max 值时现在也能正常运作。(期间值以固定间隔重复,达到终点时轮回到起点。)这对于 datetime 输入特别有用;例如,指定一个从 11 PM 到 2 AM 的时间范围。

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 函数

IntersectionObserver() 构造函数现在接受 DocumentElement 对象作为其根。在这个语境中,根是指边界框被视为观察视口的区域。

浏览器扩展

Firefox Profiler 是一款可用于分析和改进网站在 Firefox 中性能的工具。现在,它可以在网络请求被 webRequest 拦截处理程序 暂挂时显示标记。这对于内容拦截扩展开发人员而言特别有用,方便他们确保 Firefox 保持快速运行。

下图是 Firefox Profiler 实际运行的一个截图:

Firefox Profiler扩展UI

总结

以上就是 Firefox 的最新版本,希望您能喜欢这些新功能!与过去一样,欢迎您随时留言反馈并提出疑问。

结束。

摘录:

关于 Chris Mills

Chris Mills 是 Mozilla 的资深技术作家,他编写有关开放式网络应用程序、HTML/CSS/JavaScript、A11y、WebAssembly 等等方面的文档和演示。他喜欢使用 Web 技术,并在会议和大学里偶尔做技术演讲。他曾为 Opera 和 W3C 工作,喜欢演奏重金属鼓和喝好啤酒。他和他的爱人以及三个美丽的孩子住在英国曼彻斯特附近。

更多 Chris Mills 的文章…

关于 Harald Kirschner (digitarald)

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

更多 Harald Kirschner (digitarald) 的文章…