当前位置: 首页 > 编程日记 > 正文

前端性能毫秒必争方案(一)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

原文出自 :刘俊斌 (976500133@qq.com) 转载请务必注明出处,否则追究法事(责任)

 

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

相关文章:

CodeSmith应用(一)

这个例子仅是一个简单的应用,在我翻译并学习完CodeSmith的英文帮助文档后,对CodeSmith有了一定的了解,开始着手编写一些CodeSmith应用模板,今天按照最早提到的例子自行编写了一个基于表的添加存储过程的生成模板。具体语法前面基础…

01_创建一个新的activityactivity配置清单文件

今天开始学四大组件。今天是学Activity,然后是广播接收者,然后是服务,然后是内容提供者。四大组件,咱们一天一个。Activity就是跟用户交互的界面,大部分的应用都不会只有这么一个界面。创建多个Activity,在…

Java 集合——List集合

Collection接口是集合的老祖宗,定义了接口的基本方法。 List是Collection接口的子接口,也是最常用的接口,此接口对Collection接口进行了大量的扩展,List集合里的元素是可以重复的。 List接口的主要实现类有ArrayList,和…

jQuery中的插件机制

我们在很多地方都用过插件,插件能让我们操作某个东西变得异常方便,jQuery也不例外,为了扩展jQuery库函数,jQuery提供了两种方式: jQuery.extend(object):扩展jQuery对象本身,主要是用来扩展jQu…

ActiveRecordBase借助NHibernate的条件获取实体类对象

ActiveRecordBase.FindAll() 函数其中有一个这样的版本的参数ActiveRecordBase.FindAll(TargetType AsSystem.Type,Orders() AsNHibernate.Expression.Order,ParamArraycriterias() AsNHibernate.Expression.ICriteriion) 可以方便的使用NHibernate的条件查询,例如…

轻量级持久层V2版本代码与模板

首页列表上好像不能下载,要下载文件请进来下。 上篇帖《轻量级持久层的讨论》中大家踊跃的提出各种意见,让我得到不少灵感,这些新的想法将会应用到下一个版本的开发中,我先得试试可行性如何。这里先给出这一版本的代码和模板&…

最近用到的一些方法技巧

郁闷,msn上不去,没法干活。记上最近项目中用到的一些code snippet1.查询今天的记录select datediff(dd,ConvDateTime,getdate()),* from dbo.rbConversationMaster where datediff(dd,ConvDateTime,getdate())0 DataDiff Returns the number of date and…

MyBatis的使用

要了解MyBatis的使用,首先要了解MyBatis是因何而来的?为了和数据库进行交互,通常的做法是将SQL语句写在Java代码里,然后生成class文件,而我们知道class文件是无法修改的。假如后来我们只想改变一下SQL语句,…

iOS7系统iLEX RAT冬青鼠安装教程:无需刷机还原纯净越狱系统

全网科技 温馨提醒:iLEX RAT和Semi-Restore的作用都是让你的已越狱的设备恢复至越狱的初始状态。可是要注意无论你是用iLexRAT冬青鼠还是Semi-restore。对于还原来说都存在巨大的风险。非必要情况下,还是不要任意使用它们。*iLEX RAT冬青鼠安装教程&…

HDU 4832(DP+计数问题)

HDU 4832 Chess 思路&#xff1a;把行列的情况分别dp求出来&#xff0c;然后枚举行用几行。竖用几行&#xff0c;然后相乘累加起来就是答案 代码&#xff1a; #include <stdio.h> #include <string.h> #include <iostream> using namespace std;typedef long…

社会生活中常用的14条著名法则

一、 马太效应          八、 水桶定律 二、 手表定理          九、 蘑菇管理三、 不值得定律         十、 奥卡姆剃刀定律四、 彼得原理          十一、 二八定律五、 零和游戏原理        十二、 钱的问题六、 华盛顿合作…

Spring框架之(无参、有参)构造方法与setter方法的初始化

我们之前要创建对象时&#xff0c;都需要new一下&#xff0c;但使用了Spring后&#xff0c;就不需要再new了&#xff0c;可以直接使用类名调用了。这是因为Spring 已经为我们自动创建好了Java对象&#xff08;但需要在xml文件里进行一些配置&#xff09;。 举个例子看看吧&…

P1034 矩形覆盖

题目描述 在平面上有 n 个点&#xff08;n < 50&#xff09;&#xff0c;每个点用一对整数坐标表示。例如&#xff1a;当 n&#xff1d;4 时&#xff0c;4个点的坐标分另为&#xff1a;p1&#xff08;1&#xff0c;1&#xff09;&#xff0c;p2&#xff08;2&#xff0c;2&a…

[linux][c语言]用socket实现简单的服务器客户端交互

Socket解释&#xff1a; 网络上的两个程序通过一个双向的通信连接实现数据的交换&#xff0c;这个连接的一端称为一个socket。 Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制&#xff0c;取后一种意思。通常也称作"套接字"&#xff0c;用于描述IP…

Spring之注解方式实例化Java类

我们知道一个<bean></bean>就代表一个对象&#xff0c;如果想创建多个对象&#xff0c;就要使用多个<bean></bean>&#xff0c;所以这里有个简便的方法&#xff1a; <context:component-scan base-package"com.jd"></context:comp…

3.Linux Shell流程控制

1.if/else结构 if condition thenstatements elif condition thenstatements elsestatements fi 2.条件 与C语言不同的是&#xff0c;条件(condition)实际上是语句列表&#xff0c;而不是一般的布尔表达式。 按照惯例&#xff0c;函数以及命令的退出状态用0表示成功&#xff0c…

ASP.NET 2.0 中配合 Master Page 使用的优化 CSS 模型

ASP.NET 2.0 中增加了内建的 MasterPage 的支持&#xff0c;这对我们来说是一个很大的便利。然而经过一段时间的使用&#xff0c;我发现 MasterPage 并不是那么完美&#xff1a;嵌套的 MasterPage 不能支持设计时界面&#xff0c;以及下面要提到的Content Page 中增加 CSS 的问…

详细说明Spring--AOP

这篇博客较长&#xff0c;耐心读完或许会有“柳暗花明又一村”的感觉哦&#xff01; 为什么? 我先不说AOP是什么&#xff0c;我先说说为什么要用AOP&#xff0c;依照惯例&#xff0c;我还是先举一个例子&#xff1a; 先把项目结构展现出来&#xff1a; 我们先在com.jd.calcu…

ES6中的Promise详解

Promise 在 JavaScript 中很早就有各种的开源实现&#xff0c;ES6 将其纳入了官方标准&#xff0c;提供了原生 api 支持&#xff0c;使用更加便捷。 定义 Promise 是一个对象&#xff0c;它用来标识 JavaScript 中异步操作的状态&#xff08;pending, resolve, reject&#xff…

Jquery 将表单序列化为Json对象

大家知道Jquery中有serialize方法&#xff0c;可以将表单序列化为一个“&”连接的字符串&#xff0c;但却没有提供序列化为Json的方法。不过&#xff0c;我们可以写一个插件实现。 我在网上看到有人用替换的方法&#xff0c;先用serialize序列化后&#xff0c;将&替换成…

ASP.NET常用函数

Abs(number) 取得数值的绝对值。 Asc(String) 取得字符串表达式的第一个字符ASCII 码。 Atn(number) 取得一个角度的反正切值。 CallByName (object, procname, usecalltype,[args()]) 执行一个对象的方法、设定或传回对象的属性。 CBool(expression) 转换表达式为Boolean …

简单快速修改大量重复代码(Intellij IDEA)

血与泪的教训啊&#xff01;&#xff01;&#xff01;刚开始不知道&#xff0c;一味地疯狂点鼠标和键盘&#xff0c;点到手抽筋才想起来百度一下如何快速修改大量重复代码&#xff0c;呜呜呜~~~ 给大家分享一下吧&#xff0c;可以节约大家大量的时间哦&#xff1a; …

5.3Role和Claims授权「深入浅出ASP.NET Core系列」

5.3Role和Claims授权「深入浅出ASP.NET Core系列」 原文:5.3Role和Claims授权「深入浅出ASP.NET Core系列」希望给你3-5分钟的碎片化学习&#xff0c;可能是坐地铁、等公交&#xff0c;积少成多&#xff0c;水滴石穿&#xff0c;码字辛苦&#xff0c;如果你吃了蛋觉得味道不错&…

電子商務新紀元-WebService With BizSnap

電子商務新紀元-WebService With BizSnap WebService SOAP(Simple Object Access Protocol) Web Services Description Language (WSDL) DELPHI 的SOAP 撰寫WebService Server 程式 撰寫Client 端程式 魔法的秘密 傳送複雜型態資料(Complex Type) 傳送檔案或圖形 處理資料庫 C…

mysql优化1

1.以空间换时间,减少连表查询的次数,适当增加冗余字段 例如: 计算的字段,可以事先统计完,方数据库中,来一个加一个,而不用现场计算 2.字段类型: 整型 > date,time >enum >char >varchar >blob,text 字符串需要考虑字符集和校对集,因此比整型慢 time会考虑时期,用…

用XP做服务器突破10人限制

用XP做服务器突破10人限制用微软提供的小工具 MetaEdit&#xff0c;最新版本是2.2。下载地址:http://download.microsoft.com/download/iis50/Utility/5.0/NT45/EN-US/MtaEdt22.exe安装好以后将树型目录展开至LM \ W3SVC直接在W3SVC文件夹上单击&#xff0c;选择右边列表中Name…

Java反射(详述版)

一、什么是反射&#xff1f; 我们先来看一个例子&#xff1a; package venus; public class Student {public String name;public Student(){System.out.println("无参构造方法");}public void doHomework(){System.out.println(name "正在做作业~~~");…

s9.16作业,员工信息表

转载https://blog.csdn.net/qq_35883464/article/details/83151464 实现员工信息表文件存储格式如下&#xff1a;id&#xff0c;name&#xff0c;age&#xff0c;phone&#xff0c;job1,Alex,22,13651054608,IT2,Egon,23,13304320533,Tearcher3,nezha,25,1333235322,IT 现在需要…

Dubbo+zookeeper使用方法以及注意事项

Dubbozookeeper使用方法以及注意事项最近在一个项目中想做一个数据库查询的服务&#xff0c;目的是将数据库查询这块从程序中脱离出来&#xff0c;形成一个公共的服务平台&#xff0c;大家都可以调用&#xff0c;经过考虑决定选用Dubbozookeeper这个经典的组合来实现&#xff0…

淘淘经受了一次考验...

18日去香港给一个潜在客户做了一次演示&#xff0c;顺便帮淘淘买了一罐奶粉&#xff0c;因为听说香港的奶粉质量比较好&#xff0c;是原装进口的。下午6点多回到深圳&#xff0c;没想到&#xff0c;听到一个不太好的消息。淘淘的奶奶推车带淘淘出去的时候&#xff0c;不小心&am…