【问题标题】:XPCOM using Web Workers from a Firefox ExtensionXPCOM 使用来自 Firefox 扩展的 Web Workers
【发布时间】:2014-01-14 08:09:45
【问题描述】:

我的 Firefox 扩展正在解析大量数据。我通常会使用 WebWorkers 来执行此操作,但是在 XPCOM 中我似乎不是一个选项。 ChromeWorker,https://developer.mozilla.org/en-US/docs/Web/API/ChromeWorker,似乎已经过时并且“在新项目中不受欢迎”。

是否有任何选项可以在 Firefox 扩展中使用工作人员?

【问题讨论】:

    标签: firefox firefox-addon web-worker xpcom


    【解决方案1】:

    短版:不,您不能从不同的线程访问 XPCOM。但这并不意味着你不能使用 chrome workers。

    长版:Firefox 曾经允许从其他线程访问 XPCOM,例如通过ChromeWorker。这导致了各种问题,例如奇怪的崩溃或简单的不一致行为。最后,Mozilla 认为支持多线程 XPCOM 访问过于复杂且容易出错,就像记录其局限性并阻止人们自爆一样。

    在当前的 Firefox 版本中,无法再从 ChromeWorker 访问 XPCOM。 ChromeWorker 本身并没有被弃用,尽管 MDN 评论很容易被误读为一般弃用声明。这个想法是您可以将ChromeWorkerjs-ctypes 结合使用,这将允许您在不同的线程上使用本机库(操作系统提供的库、Firefox 中包含的库(如 NSS)以及随您的扩展分发的库) .

    根据您要达到的目标,这可能对您有用。例如,如果您需要 XPCOM 进行文件访问,那么您甚至不需要直接使用 js-ctypes - OS.File API 会为您做到这一点。但是,XPCOM 访问仅限于主线程。

    【讨论】:

    • 感谢您的回答。该应用程序获取 css 文件并通过使用 string.charCodeAt() 获取每个字符来解析它们。这可能很昂贵。想把它从主线程中拿出来,不确定 OS.file 在这种情况下是否有帮助。谢谢。
    • @Mircea:如果 CSS 文件在磁​​盘上 - 是的,当然。如果 CSS 文件在网络上的某个地方,那么您仍然必须在主线程上获取它(例如通过异步 XMLHttpRequest),然后将数据传递给工作人员。
    • 假设我已经在 J​​avascript 对象/字符串中有 CSS 内容,我可以使用 OS.File 传递它的内容并用我的 js 解析器从主线程解析它吗?抱歉,对此我有些疑惑。
    • 不,OS.File 用于读取/写入文件。为了在主线程和工作线程之间进行通信,您使用消息...
    猜你喜欢
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多