ChromeWorker写了一个巨大的文件

时间:2015-10-12 09:25:37

标签: firefox-addon firefox-addon-sdk

在我的扩展程序中,我需要在磁盘上写一个巨大的文件(比如大约20演出)。目前我在主线程中这样做,但文件创建是非常昂贵的操作。我打算将整个文件创建过程移至ChromeWorker,但基于https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Functions_and_classes_available_to_workers,我无法从ChromeWorker访问nsiFile。

所以我的问题是: 1.是否可以从ChromeWorker中访问Cc,Ci和Cu? 2.如果不是,那么在Firefox中创建和填充大文件的最有效方法是什么。请注意,我需要根据段和偏移(Ci.nsISeekableStream)编写文件。

1 个答案:

答案 0 :(得分:1)

无法从ChromeWorker访问nsIFile。但nsIFile是一种可怕的同步选项。

使用OS.File:https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/OSFile.jsm

在该页面上,转到有关工人使用的链接:https://developer.mozilla.org/docs/Mozilla/JavaScript_code_modules/OSFile.jsm/OS.File_for_workers

在mainthread上,os.file返回promises。

在工人中他们是同步的。使用try-catch将os.file函数包装在worker中,就像发生错误一样(如os.file.remove,ignoreAbsent选项设置为false),catch将保存OS.File.Error对象。

很高兴ChromeWorker顺便说一下!我是ChromeWorkers的忠实粉丝。我在这里使用chromeworker写了一个简单的jsm示例:https://github.com/Noitidart/jpm-chromeworker

对于段,您必须使用OS.File.open,然后在返回值上执行.setPosition(),然后您可以从该位置读取特定数量的字节,或者写入,或者其他任何内容。它真棒的东西。 OS.File是执行文件操作的新方法和推荐方法。它现在已经有一段时间了,但就像Firefox 29或之前一样。