是否需要Web工作者?

时间:2014-06-03 03:40:58

标签: javascript ajax xmlhttprequest web-worker

我正在使用HTML5 Files API等将大量(多GB)分块二进制文件上传到服务器。

在很多地方,我已经看到迭代的块上传在一个单独的Web Worker中完成,据说这样就不会在主浏览器线程上进行工作。

这种方法是否真的有必要,因为XMLHttpRequest#send默认是异步的,因此无论如何都会在自己的线程中运行?或者这不是真正发生的事情,并且Web Worker是必要的吗?

基本上(pusdo代码)有什么“次优”:

var blob = file.slice(start, finish);
var request = new XMLHttpRequest();
request.open('POST', url);
request.onreadystatechange = function(e) {
   if (request.readyState === 4) {
      increment start etc
      sendChunk();
   }
};
request.send(blob);

2 个答案:

答案 0 :(得分:0)

非阻塞,异步请求可能意味着模拟并发的外观。确保并行执行的并发线程可以使用Web worker。

答案 1 :(得分:0)

  据推测,主要浏览器线程上的工作没有发生。

没有。引用您链接的the article

  

正如预期的那样,回调与同步FileReader一起消失了。这个   在读取文件时简化了回调嵌套的数量。代替,   readAs *方法返回读取文件。

     

在某些情况下,同步API对于某些任务来说更加清晰。   更少的回调是好的,当然会使事情更具可读性。

当然,启动和维护异步也是一些工作,您可以将其加载到WebWorker。但是,繁重的提升(读取文件,进行网络请求)总是在后台完成。

文章还提到WebWorkers会产生一些开销。您不仅需要实例化Worker,还需要复制它应该使用的所有数据。