Web性能知识(一)
Web性能取决于:资源获取【网络I/O】 + 页面布局与渲染 【浏览器渲染原理】+ JavaScript执行【事件循环】
这是一篇讲解Web性能的文章,参考后续补上;内容都是自己的笔记
Web性能常识
延迟与带宽
延迟:分组从信息源发送到目的地所需的时间
带宽:逻辑或物理通信路径最大的吞吐量
延迟的构成
传播延迟:消息从发送端到接收端需要的时间(传播距离/速度)
传输延迟:把消息中的比特转移到链路中所需的时间(消息长度/链路速率)
处理延迟、排队延迟
TCP构成
TCP负责在不可靠的传输信道上提供可靠的抽象层
丢包重发、按序发送、拥塞控制、流量控制….
可靠:采用TCP数据流可以确保发送的所有字节能够完整地被接收到,到达客户端的顺序也一样。
三次握手
创建一个TCP连接成本比较高,所以如何复用连接是一个性能提升点
流量控制、拥塞控制
流量控制:接收端向发送端反馈自己的接受窗口大小(rwnd),避免发送端过多向接收端发送数据的机制
慢启动:以拥塞窗口大小(cwnd)来规定第一阶段向网络中发送数据的大小,避免一下子往网络中注入大量数据导致网络拥塞;cwnd的增长是以指数级增长。慢启动导致客户端和服务器之间经过几百ms才能接近最大速度,所以如何让客户端与服务器之间传输速度迅速达到最大
拥塞避免:当出现丢包时,cwnd减小1/2然后缓慢增长(倍减加增,AIMD;比例降速,PRR)
min(cwnd,rwnd)的值就是发送端与接收端之间在途未确认的最大数据量
如果在途数据量超过了未确认的最大数据量,必须停下来等待对方ACK某些分组才能继续,时间取决于往返时间。 BDP(带宽延迟积):数据链路的容量与其端到端延迟的乘积,这个结果就是任意时刻处于在途未确认状态的最大数据量
队首阻塞(HOL,Head Of Line)
发送端按顺序发送数据包到接收端,接收端可以不按顺序接受数据包,但是在进行处理数据包时必须是按顺序处理,所以如果队首数据包仍未被接受端接收到 那么就会阻塞所有分组的处理。
针对TCP的优化建议
优化 TCP 的最佳途径就是调整它感知当前网络状况的方式,根据它之上 或之下的抽象层的类型和需求来改变它的行为 见机行事???
TCP的影响
- 三次握手增加了整整一次RTT
- 慢启动被应用到每一个新连接
- 流量控制和拥塞控制影响所有连接吞吐量
- 吞吐量由当前拥塞窗口大小控制
解决方案
- 服务器配置调优
- 升级
- 增大TCP的初始拥塞窗口
- 适当考虑禁用慢启动
- 窗口缩放,增加最大接受窗口的大小
- TCP快速打开
- 应用程序行为调优
- 减少不必要的数据
- CDN,减少传输的距离
- 重用TCP连接
UDP的构成
分组:可以用来指代任何格式化的数据块
数据报:只用来秒速那些通过不可靠的服务传输的分组,既不保证送达也不会发送失败通知(例如UDP、IP)
WebRTC着眼于在浏览器中通过UDP实现原生的语音和视频实时通信,以及其他形式的P2P通信
UDP的无服务:
- 不保证消息交付
- 不保证交付顺序
- 不跟踪连接状态
- 不需要拥塞控制
UDP与网络地址转换器(NAT)
NAT:解决IP重用,每个NAT设备负责维护一个包含本地IP和端口到全球唯一IP和端口的映射的表。
传输层安全
SSL(Secure Sockets Layer,安全套接字层)
SSL与TLS的关系:SSL3.0是网景公司专用的,IETF负责标准化SSL协议 由此诞生了TLS(Transport Layer Secure)
加密:混淆数据
身份验证:验证身份标识有效性
完整性:检测消息是否被篡改或伪造
TLS握手
TLS会话恢复
在多个连接间共享协商后的安全密钥
无线网络性能
搞清楚影响无线网络性能的基本原理,进而解决其他问题。
无线网络类型
- 个人局域网(PAN):蓝牙、NFC、ZigBee
- 局域网(LAN):IEEE 802.11(Wi-Fi)
- 城域网(MAN):IEEE 802.15(WiMax)
- 广域网(WAN):蜂窝(UMTS、LTE等)
无线网络性能基础
信道容量即最大信息速率,与数据传输速度最直接相关的就是可用带宽与信号强度(信噪比)
香农定理:C=BW×log2 (1+S/N)
C:信道容量,单位bit/s
BW:可用带宽,单位Hz
S:信号,单位W
N:噪声,单位W
Wi-Fi
802.11是从以太网802.3拓展而来。
以太网处理冲突的方式
- CSMA(载波侦听多路访问):检测是否有人正在发送,如果信道忙等待,信道空闲立即发送数据
- CSMA/CD(带有冲突检测的CSMA):如果检测到冲突,双方立即停止发送数据并sleep一会随机的时间,保证发送冲突的发送到不会同步且不会同时重新发送数据。
Wi-Fi处理冲突的方式:
- CSMA/CA(带有冲突避免的CSMA):每个发送方都会在自己信道空闲时发送数据以避免冲突,所以每个Wi-Fi数据帧必须明确得到接收方的确认,以确保不会发生冲突。【怎么明确得到接收方的确认?我猜先发送一个询问帧给接收方,接收方明确空闲 come on baby】
优化Wi-Fi性能
在802.11n之前,只能有一个在传的数据帧且得到接收端ACK后方能传送下一个数据帧;在802.11n之后引入了新的“帧聚合”功能,支持同时发送和确认多个Wi-Fi数据帧。
优化手段:
- 适应可变带宽(对于音视频:自适应比特流)
- 适应可变的延迟时间(可以考虑切换传输方式,例如使用UDP传输的WebRTC)
移动网络
用户面单向延迟:一个分组在无线设备与无线发射塔之间单向传输的时间
无线电资源控制器(RRC)
RRC:负责调度协调移动设备与无线电基站之间所有的通信连接;RRC直接影响延迟、吞吐量和设备电池的使用时间。
LTE出站数据流延迟
控制面延迟:由 RRC 协商和状态切换导致的固定的、一次性的延迟时间,从空闲到活动少于 100 ms,从休眠到活动少于 50 ms。
用户面延迟:应用的每个数据分组从设备到无线电信号塔之间都要花的固定的时间,少于 5 ms。
核心网络延迟:分组从无线电信号塔传输到分组网关的时间,因运营商而不同,一般为 30~ 100 ms。
互联网路由延迟:从运营商分组网关到公共互联网上的目标地址所花的时间,可变。
LTE入站数据流延迟
移动网络优化建议
- 消除周期性及无效的数据传输
- 轮询在移动网络中代价极高,少用
- 尽可能使用推送和通知
- 出站和入站请求应该合并和汇总
- 非关键性请求应该推迟到无线模块活动时进行
- 消除不必要的长连接
- 解耦用户交互与网络通信
- 爆发传输数据并转为空闲
- 把负载转移到Wi-Fi网络
优化应用的交付
消除或减少不必要的网络延迟,将需要传输的数据压缩至最少
常规性能优化最佳实践
- 减少DNS查询
- 重用TCP连接
- 减少HTTP重定向
- 使用CDN
- 去掉不必要的资源
- 在客户端缓存资源
- 强制缓存
- 协商缓存
- 传输压缩过的资源
- 消除不必要的请求开销(例如HTTP cookie)
- 并行处理请求和响应
- 针对协议版本采取优化措施