影响文件上传Waiting(TTFB)时间长的因素以及解决办法
背景
前段时间前端同事在调后台文件上传接口的时候反应文件上传接口很慢。通过查看后台日志,发现文件上传接口的实际请求与响应在1秒以内,但是前端调用接口的请求与响应在5秒以上,通过Chrome调试,返现问题出在Waiting(TTFB)时间过长。
什么是 Waiting (TTFB)
TTFB: 是“最初的网络请求被发起”到“从服务器接收到第一个字节前”所花费的毫秒数。
影响的因素
- 服务器阻塞
浏览器对同一个主机域名的并发连接数有限制,因此如果当前的连接数已经超过上限,那么其余请求就会被阻塞,等待新的可用连接;此外脚本也会阻塞其他组件的加载。 - 域名解析
请求某域名下的资源,浏览器需要先通过DNS解析器得到该域名服务器的IP地址。在DNS查找完成之前,浏览器不能从主机名那里加载到任何东西。 - TCP建立
http连接的建立需要经过三次握手的时间,而https会在此基础上增加SSL时间。 - 带宽限制
以 2M 带宽为例:
2M 的ADSL 理论上下载速度是 2048/8=256 bytes/s(字节每秒)但实际上最高也就每秒240、250字节左右;
上传速度一般是下载速度的1/4 也就是512K ,512/8=64 bytes/s 实际在每秒50字节左右
测试
知道了影响因素,加上实际场景,服务器阻塞的情况不会遇到,所以不做测试。
以上传2.04M的图片为例:
-
域名解析:
localhost:Waiting(TTFB)耗时3.12秒
本地IP 127.0.0.1:Waiting(TTFB)耗时1.84秒 -
带宽限制:
本地局域网:Waiting(TTFB)耗时3.12秒
阿里云服务器(1M带宽):Waiting(TTFB)耗时23.63秒
总结
项目部署的云服务器的带宽只有1M,带宽不足是造成Waiting(TTFB)的主要原因,所以适当的提升带宽就可以解决此问题。