对网络工作者的任何需求



我正在使用HTML5 Files API等上传一个大的(许多GB)块二进制文件到服务器。

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

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

基本上有什么"次优"(pusdo code):

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);

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

应该是这样的工作没有发生在主浏览器线程上。

。引用你所链接的文章:

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

在某些情况下,对于某些任务,同步API要干净得多。更少的回调是不错的,而且肯定会使内容更可读。

当然,启动和维护异步也需要一些工作,你可以把它加载到WebWorker中。然而,繁重的工作(读取文件,处理网络请求)总是在后台完成的。

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

最新更新