文件批量上传ZIP方案调研

简介: 利用HTML5的新接口例如ArrayBuffer、Blob等可以在前端进行zip操作并且可以将zip后的文件上传到服务器。本调研主要关注zip方案的zip效率以及整体上传效率。

介绍

利用HTML5的新接口例如ArrayBufferBlob等可以在前端进行zip操作并且可以将zip后的文件上传到服务器。本调研主要关注zip方案的zip效率以及整体上传效率。


工具


维度

  • 网络环境:2G & 3G & wifi
  • 图片大小:50K & 100K & 300K
  • 并发数:1 & 3(仅针对NOZIP方案)
  • 图片数量:30


方案

ZIP方案:上传前采用前端ZIP方法将所有文件打包成一个文件后使用AJAX上传,需记录打包时间和上传时间;

NOZIP方案:采用并行1或3个AJAX请求的方式批量上传所有的图片;


数据

2G

使用Network Link Conditioner模拟2G环境,上传速度在15K/S左右,每个请求建立连接的时间在1s左右;

方案 50K 100K 300K
ZIP 82285 146951 498930
NOZIP1 168294 236620 592867
NOZIP3 96198 156123 499195

image.png

2G网络中只保持1个请求的情况下,ZIP方案具有绝对的优势,尤其在图片大小小于100K时。

2G网络中同时开启3个请求的情况下,当图片大小小于100K时ZIP方案有比较明显的优势,但是随着图片尺寸的增加这种优势逐渐消失。

ZIP方案的优势在于将N个请求合并成1个,因此有效减少了每个请求中除去上传数据之外的额外时间,例如连接建立等。

对于非ZIP方案而言,在图片尺寸较小时,每个请求中非图片上传的时间占更大的比例,因此ZIP方案的优势得以突显,而随着图片尺寸的增加,每个请求中非图片上传时间的比例也在下降,因此ZIP方案没有明显优势。

此外,与串行请求相比,在2G环境中使用并行请求仍然能获得优势,例如在串行时NOZIP方案上传30张50K图片耗时约181878ms,与3个请求并行相比慢了约1倍。原因在于并行时请求建立连接以及服务器端的处理都是并发的,而不像串行时所有前端和后端的处理均为线性。

请求数据:

通过Chrome开发者工具看到的每个请求包括:

  • DNS Lookup: Time spent performing the DNS lookup. You want to minimize DNS look ups.
  • Connecting: Time it took to establish a connection, including TCP handshakes/retries, DNS lookup, and time connecting to a proxy or negotiating a secure-socket layer (SSL).
  • Sending: Time spent sending the request.
  • Waiting: Time spent waiting for the initial response.
  • Receiving: Time spent receiving the response data.

以上的解释似乎都理所应当,但查看实际的数据时仍然会有令人困惑之处,主要集中在SendingWaiting

例如以下是一个2G环境中上传50K图片时的请求数据:

  • DNS Lookup:0
  • Connecting:850ms
  • Sending:0
  • Waiting:5.54s
  • Receiving:0

例如以下是一个2G环境中上传1.2M图片时的请求数据:

  • DNS Lookup:0
  • Connecting:846ms
  • Sending:47.3s
  • Waiting:5.54s
  • Receiving:0

例如以下是一个wif环境中上传50K图片时的请求数据:

  • DNS Lookup:0
  • Connecting:5ms
  • Sending:0
  • Waiting:24ms
  • Receiving:0

例如以下是一个wif环境中上传300K图片时的请求数据:

  • DNS Lookup:0
  • Connecting:4ms
  • Sending:189ms
  • Waiting:22ms
  • Receiving:0

从数据可以看出,Waiting并不是纯服务器端处理时间,它与网速有直接关系,wifi下的Waiting时间是接近真实的服务器端处理时间的。

但同时Waiting时间与文件大小是无关的,无论50K还是1.2M都基本一致。

初步猜想Waiting包括一部分浏览器处理文件上传的时间,否则在15K/S的上传速度下,50K文件的Sending时间不应该是0。

此外,Sending时间与AJAX中progress监控的时间保持一致。

综上所述,2G环境下基本可以将Sending + Waiting视为总的前端上传时间,服务器端真实处理时间基本在ms级别。


3G

方案 50K 100K 300K
ZIP 48273 85866 -
NOZIP1 66510 102841 -
NOZIP3 56889 85837 -

image.png

与2G类型,3G网络环境下,ZIP方案依旧在批量小图片的上传中保持一定的优势,包括多请求并发方案。但是一旦图片大小达到100K左右就不再具有优势。

WIFI

方案 50K 100K 300K
ZIP 2091 2663 5821
NOZIP1 1499 1871 4271
NOZIP3 641 1418 3061

image.png

WIFI环境下ZIP不具备优势,相反,当文件增大时打包时间的比例会很大,因此整体速度反而变慢。

结论

  • ZIP方案适用于网络速度较低(例如2G/3G)以及文件较小(小于100K)时的批量上传场景;
  • 2G/3G环境下并发请求仍然能获得比较大的上传优势;(在2G/3G环境下可以结合ZIP以及并发请求来进一步提供上传速度)
相关文章
|
数据中心
网络之脉:深入解析CAT-5与CAT-5e
【4月更文挑战第21天】
2037 0
|
4月前
|
运维 网络协议 Linux
CentOS下Bind服务的安装与故障排查
通过以上的步骤,您应该能够在CentOS系统上安装并配置BIND DNS服务,并进行基本的故障排查。
426 0
|
5月前
|
机器学习/深度学习 人工智能 运维
阿里云PAI人工智能平台介绍、优势及收费标准,手动整理
阿里云人工智能平台PAI是面向开发者和企业的机器学习与深度学习工程平台,提供数据标注、模型构建、训练、部署及推理优化等全链路服务。内置140+优化算法,支持PyTorch、TensorFlow等多种框架,具备高性能训练与推理能力,适用于自动驾驶、金融风控、智能推荐、智慧医疗等多个行业场景。PAI提供零代码开发、可视化建模、大模型一键部署等功能,助力企业快速构建AI应用。支持多种购买方式,如按量付费、预付费等,满足不同业务需求。
|
Linux API C++
【C++ 17 新特性 文件管理】探索C++ Filesystem库:文件和目录操作的全面指南(一)
【C++ 17 新特性 文件管理】探索C++ Filesystem库:文件和目录操作的全面指南
3260 3
|
缓存 Prometheus 监控
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
332 3
|
人工智能 机器人 API
一键打造你的专属钉钉AI助手
【8月更文挑战第7天】一键打造你的专属钉钉AI助手
903 15
一键打造你的专属钉钉AI助手
|
监控 网络协议 数据安全/隐私保护
​邮件发送失败DMARC报错问题排查解决有什么理想方法
在邮件营销中,DMARC(域消息验证)报错常见。DMARC基于SPF和DKIM,指定如何处理未认证邮件。排查DMARC问题需检查SPF记录,验证DKIM签名,配置DMARC策略,使用AOKSend发送测试邮件。理想的解决方法包括:定期更新DNS记录,使用专业邮件服务如AOKSend简化配置,监控DMARC报告,逐步加强DMARC策略,并对员工进行培训。这将提高邮件发送成功率和安全性。
|
存储 供应链
解读ROI:ERP系统的成本与投资回报分析
解读ROI:ERP系统的成本与投资回报分析
1581 4
|
关系型数据库 MySQL Java
基于SpringBoot+Vue旅游管理系统【源码(完整源码请私聊)+论文+演示视频+包运行成功】
基于SpringBoot+Vue旅游管理系统【源码(完整源码请私聊)+论文+演示视频+包运行成功】
228 0
基于SpringBoot+Vue旅游管理系统【源码(完整源码请私聊)+论文+演示视频+包运行成功】
|
运维 监控 安全
云上智能监控:引领未来安防与运维的新纪元
通过智能视频分析技术自动识别违章行为(如闯红灯、超速等)并触发报警机制。同时结合交通流量监测和信号灯控制功能实现交通流量的优化和拥堵缓解。 智能零售监控:在零售行业中云上智能监控可以应用于店铺的客流统计和商品管理。