首页 > 前端性能毫秒必争方案(一)HTTP请求

前端性能毫秒必争方案(一)HTTP请求

在讲http知识之前,有必要提及下网络七层协议OSI(Open System Interconnect)的缩写

犹如水浒里面的七星聚义,没这七星,就没有108将。(已经放置文章最后面)

layers.jpg

2. 减少http请求次数原因在于


1、Http连接 RequestHeader 的开销

众所周知,后端不管是java还是php,都能使用类似htppRequest .getHeader(“XXX-XXX”)方法。为什么呢?这是因为每次请求都会带上一些额外的信息Request Header,所以当请求越多的时候,在网络上传输的数据自然就多,传输速度自然就慢了。

其实request自带的数据量还是小问题,毕竟request能带的数据量还是有限的。


2、http连接的流程串行请求限制(2-8个)
  1. 域名解析 =》2. 开启TCP连接 =》3. 发送请求 =》4. 等待(主要包括网络延迟和服务器处理时间) =》5. 下载资源 =》6. 文件解析执行时间 在http1.1,keep-alive是默认的,而且现代浏览器都有DNS缓存, 所以DNS寻址由于有DNS缓存–无差别; 3次握手由于有keep-alive,一条和一千条都只需一次TCP握手–无差别

HTTP1.1协议规定请求只能串行发送,这也是HTTP性能最差和最让人诟病的地方,也就是说一百个请求必须依次逐个发送。第80个请求必须依赖于第79个请求正常返回之后才能发送。这样就平白无故多出了99个网络RTT(网络延迟)。 浏览器通过一个TCP连接发送100个请求的事情根本就不可能发生。

当你有100个资源时,这100个资源在浏览器看来是“同时都要”,而浏览器并没有什么智商去判断应该用1个链接解决这100个资源,还是用100个链接来解决,不然浏览器永远都只有一个TCP链接了。

因此浏览器的静态的策略是在自己可承受的范围内尽可能地用多的链接来解决,大部分浏览器似乎是2-8个链接,这就导致握手也是2-8次。

Paste_Image.png

HTTP 连接个数(服务器默认最大连接数 16,777,214)
3、http请求少了,DNS 查询自然就少了,真的被百度里面千篇一律感动了。
http连接串行请求限制(2-8个)

2.1. 第一层:物理层(Physical)

规定通信设备的功能的和过程的特性,统一物理设备的参数,用以建立、维护和拆除物理链路连接

2.2. 第二层:数据链路层(Data Link)

数据链路可以粗略地理解为数据通道。 媒体是长期的,连接是有生存期的.在连接生存期内,收发两端可以进行不确定次数据通信. 每次通信都要经过建立通信联络和拆除通信联络两过程.这种建立起来的数据收发关系就叫作数据链路.

2.3. 第三层:网络层(Network)

网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送, 那在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路, 也可能还要经过很多通信子网。

2.4. 第四层:传输层(Transport)

传输层是两台计算机经过网络进行数据通信时,第一个端到端的层次,具有缓冲作用。第四层的数据单元也称作数据包(packets) 示例:TCP,UDP,SPX。

2.5. 第五层:会话层(Session)

会话层提供的服务可使应用建立和维持会话,并能使会话获得同步。会话层使用校验点可使通信会话在通信失效时从校验点继续恢复通信。这种能力对于传送大的文件极为重要。

2.6. 第六层:表示层(Presentation)

表示层的作用之一是为异种机通信提供一种公共语言,以便能进行互操作。它将欲交换的数据从适合于某一用户的抽象语法,转换为适合于OSI系统内部使用的传送语法。即提供格式化的表示和转换数据服务。数据的压缩和解压缩, 加密和解密等工作都由表示层负责,这种类型的服务之所以需要,是因为不同的计算机体系结构。 例如,IBM主机使用EBCDIC编码,而大部分PC机使用的是ASCII码。在这种情况下,便需要会话层来完成这种转换。

2.7. 第七层:应用层(Application)

应用层为操作系统或网络应用程序提供访问网络服务的接口。应用层协议的代表包括:Telnet、FTP、HTTP、SNMP Paste_Image.png

原文出自 :刘俊斌 ([email protected]) 转载请务必注明出处,否则追究法事(责任)

 

转载于:https://www.cnblogs.com/passkey/p/10005988.html

更多相关:

  • 本文是西门子开放式TCP通信的第2篇,上一篇我们讲了使用西门子1200PLC作为TCP服务器的程序编写,可以点击下方链接阅读:【公众号dotNet工控上位机:thinger_swj】基于Socket访问西门子PLC系列教程(一)在完成上述步骤后,接下来就是编写上位机软件与PLC之间进行通信。上位机UI界面设计如下图所示:从上图可以看出...

  • 我有一个大型数据集,列出了在全国不同地区销售的竞争对手产品。我希望通过使用这些新数据帧名称中的列值的迭代过程,根据区域将该数据帧分成几个其他区域,以便我可以分别处理每个数据帧-例如根据价格对每个地区的信息进行排序,以了解每个地区的市场情况。我给出了以下数据的简化版本:Competitor Region ProductA Product...

  • 作为一名IT从业者,我来回答一下这个问题。首先,对于具有Java编程基础的人来说,学习Python的初期并不会遇到太大的障碍,但是要结合自己的发展规划来制定学习规划,尤其要重视学习方向的选择。Java与Python都是比较典型的全场景编程语言,相比于Java语言来说,当前Python语言在大数据、人工智能领域的应用更为广泛一些,而且大...

  • 这段时间通过学习相关的知识,最大的变化就是看待事物更加喜欢去了解事物后面的本质,碰到问题后解决问题思路也发生了改变。举个具体的例子,我在学习数据分析,将来会考虑从事这方面的工作,需要掌握的相关专业知识这个问题暂且按下不表,那哪些具体的问题是我需要了解的呢,以下简单罗列:1、了解数据分析师这个岗位在各个地区的需求情况?2、数据分析师的薪...

  • 这一节将开始学习python的一个核心数据分析支持库---pandas,它是python数据分析实践与实战的必备高级工具。对于使用 Python 进行数据分析来说,pandas 几乎是无人不知,无人不晓的。今天,我们就来认识认识数据分析界鼎鼎大名的 pandas。目录一. pandas主要数据结构 SeriesDataFrame二...

  • 限流器是后台服务中十分重要的组件,在实际的业务场景中使用居多,其设计在微服务、网关、和一些后台服务中会经常遇到。限流器的作用是用来限制其请求的速率,保护后台响应服务,以免服务过载导致服务不可用现象出现。限流器的实现方法有很多种,例如 Token Bucket、滑动窗口法、Leaky Bucket等。在 Golang 库中官方给我们提供...

  • HTTP和HTTPSHTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法。HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)简单讲是HTTP的安全版,在HTTP下加入SSL层。SSL(Secure...

  •     注意!!!(修改于2020年7月18日)   在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据 报错截图如下 报错内容: {"message": "Network Error","name": "Error","stack": "Err...

  • 一.  GET_POST与开发者工具 1.      浏览器的基本工作规则 浏览器请求访问服务器,服务器返回数据 (1)    请求的格式 GET:长度不能大于2k参数明文显示在地址栏,不保密,通常用在查询请求 POST:长度可以很大,参数写在请求体内,相对保密,通常用是提交内容的请求 上图中a.com是域名,x...

  • JSP相当于在HTML页面中加上Java代码,一般在标签中放入主要代码。 在JSP里用<%...%>把Java代码包含起来的。   Servlet的生命周期: ①被服务器实例化后,容器运行init方法。 ②当请求(Request)到达时,运行service方法,service方法会运行与请求对应的doXXX方法(d...

  • 文章目录搭建实验平台使用Unity的准备工作在PC端安装连接Hololens软件Hololens设置开始连接吧绘制显示PC端网页监控...

  •  将多次卷积和池化后的图像展开进行全连接,如下图所示。  全连接层需要把输入拉成一个列项向量          比如你的输入的feature map是2X2,那么就需要把这个feature map 拉成4X1的列向量,如果你的feature map 的channels是3,也就是你的输入是3X2X2,也就是相当于有了12个像素点,...

  •   注意,前情提示: 本代码基于《Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)》 传送门Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)_你挚爱的强哥❤给你发来1条消息❤-CSDN博客 首先安装 cnpm i nodejs-websocket 在/a...

  • Ubuntu 配置自带桌面共享 1、在setting>>shareing>>remote 选择on 如果用ubunutu直接远程连接的话已经可以了, 2、在ubuntu下使用系统自带的remmina连接 vnc类型 直接输入ip地址 3、如果在windows下面连接的话需要把加密选项关闭 内容: 安装dconf-edito...

  • 第四节 RabbitMQ在C#端的应用-客户端连接 原文:第四节 RabbitMQ在C#端的应用-客户端连接 版权声明:未经本人同意,不得转载该文章,谢谢 https://blog.csdn.net/phocus1/article/details/87357911 1.在VS2013中新建控制台程序,然后添加引用:.NE...