通过引用将提交的文件传递给Web Worker,并且开销尽可能小

Tom*_*ica 4 javascript web-worker fileapi transferable

我将有一个网络工作者来解析巨大的文本文件(200000行,尽管语法简单)。我希望用户通过拖放即可提交该文件,否则将获得一个File对象:

   var work = new Worker("parser.js")
   document.addEventListener("drop", function(e) {
       e.preventDefault();
       var dt    = e.dataTransfer;
       var files = dt.files;
       if(files.length>0) {
         var firstFile = files[0]
         var reader = new FileReader();
         //SEND FILE TO WORKER?
       }
   });
Run Code Online (Sandbox Code Playgroud)

我听说了可转让的对象。有没有办法文件传输到Worker?以某种方式,GUI线程不会因读取文件而变慢?

Dar*_*con 6

一些浏览器(找不到兼容性表)支持通过FileWeb Worker 传递对象,postMessage因为它们现在使用结构化克隆算法来处理消息参数。对于那些支持它的浏览器来说,这可能是最有效的方法。

进一步的研究似乎表明结构化克隆应该适用于:Chrome 13 +,Firefox 8 +,IE10 +,Opera 11.5 +,Safari 5.1+

  • 这基本上意味着文件在打开之前就已经通过了,对吧? (3认同)