介绍
service worker
# 前提
主要是看了一篇文章,大概就是借用流式api+service worker 实现下载超大文件,觉得挺好玩的,记一下
# 内容
其实下载大概就两种,一种是标准的a标签,一种是基于blob的下载,后者也有称为流式,但那个充其量是块级下载,一块一块下载然后拼一个大对象,如果是几十mb,可能没啥问题,但如果是gb级别的,意味着存在一个无法被释放的gb级别的对象,理想的状态是,下一点,处理一点,写入内存一点,而不是全部构成一个js大对象
# 关键点
为什么这个问题难搞(虽然并不是一个常见的需求),因为按照理想状态,是有一个专门的下载进程去处理(即a标签触发的模式),而不是主进程处理了再交给下载进程,而触发这个下载进程是源于一个响应头,其值为attach时触发下载,用a标签的时候,会自动将响应头更改为这个。更为麻烦的是,当下载的文件需要先进行某处理比如压缩时,一定需要js的参与,单独的下载进程做不了。即,js不能参与下载进程的行为,只依赖下载进程本身又不够
# 待续
用service worker,强行在前端和服务端加了一个中间层,更改响应头(触发下载进程),并执行js流式api(处理数据),