在开发中,不可避免的需要进行数据之间的交互,而这些数据往往是通过与服务器端进行交互得到,并进行相应的处理等
传统数据通信方式总结
- 原生 XHR 对象: 用起来麻烦,而且功能受限
- jsonp 方式:jsonp 可以跨越,但本质上是在绕过同源策略的限制,会带来比较严重的安全隐患,已逐步淘汰
- $.ajax: 功能丰富、易用,但 jQuery 本身已不是开发主流,所以为了一个 ajax 引入整个 jQuery 很不划算
现代数据通信方式
FromData
用于处理复杂表单操作的对象,用于提交表单、上传文件等应用
FromData 不是数据交互方法,而是一种容器,所以和 fetch、Axios 等不是同类
fetch
原生 xhr 对象的一种高级封装,使用更简便,而且无需引入任何库、性能高,简单封装就可以发挥强大的功能
Axios
专门用于数据通信的库,体积小、性能高,而且可以和各类其他模块 / 库配合 (如:FromData、Redux 等)
WebSocket
全双工通信,服务器可直接推送数据
总结
名称 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
FromData | 表单整体提交、文件上传 | 无法独立工作 | |
fetch | 原生支持 | 使用稍微麻烦,可进行封装解决 | 完全代替 ajax |
Axios | 使用便捷、功能全面 | 完全代替 ajax | |
WebSocket | 全双工 | 本身不兼容,但可使用 socket.io 等库 | 适合服务器推送 |
HTTP/2
http/1.1 改进版,具有大量的新特性,值得期待啊,哈哈
- 加密:顺便干掉了 https
- 头压缩:减少体积
- 服务端推送:双工通信
- 流水线请求:大幅降低小对象的请求开销
- 修复头阻塞问题(HOL Blocking): 同上
- 多路复用:提升性能
- 更适应现代化网络应用的要求:如桌面浏览器、移动端浏览器、代理 / 反代理、防火墙、内容付费等支持