Skip to main content
 首页 » 编程设计

firefox之Firefox 扩展中的并发和多线程

2024年08月14日7198°冷暖

我正在使用附加构建器和附加 SDK 编写 Firefox 扩展。到目前为止,我已经能够解决任何限制,而无需迁移到 XUL。但是,我遇到了障碍。

我的扩展程序有一个长时间运行的进程,可能会阻塞,因此我需要将此处理与主 UI 线程分开。我已阅读问题here ,但它并不能完全回答我的问题。 Web Workers 还不够,因为长时间运行的进程需要访问 js-ctypes 和 native 代码。所以,看起来 ChromeWorker可能会成功。但是,我不知道如何从附加构建器访问它。此外,线程管理器只能通过 C++ 代码访问。我怎样才能:

  1. 访问并实例化 Chrome Workers(或)
  2. 创建线程(或)
  3. 假并发(以某种方式)

避免阻塞 UI 线程。或者,我可以在 native 代码中推出自己的代码(我试图避免这种情况)。

请您参考如下方法:

您应该使用 Chrome Worker,它们专门用于在不同线程上使用 js-ctypes。线程管理器存在问题,并且出于某种原因不允许从 JavaScript 使用它。然而,主要问题是 ChromeWorker 构造函数未在附加 SDK 模块中公开。但你可以从 chrome 伪模块获取它:

var self = require("sdk/self"); 
var {ChromeWorker} = require("chrome"); 
var worker = new ChromeWorker(self.data.url("worker.js")); 

这仅适用于 Firefox 8,在早期版本中,您会 use the worker factory 。但我想您不需要这个 - 新的附加 SDK 版本无论如何都不支持 Firefox 9 以下的任何版本。

注意:如果您的附加组件被禁用或卸载(例如使用 unload module ),您应该确保关闭此工作器,它不会自动发生。

编辑:Matthew Ruttley 在他的 detailed blog post 中描述了一种导入 chrome 工作人员的更简单方法。 ,我相应地更新了这个答案。