构建高性能ASP.NET站点之二 优化HTTP请求(前端)

上一篇文章主要讲述了请求一个页面的过程,同时也提出了在这个过程中的一些优化点,本篇就开始细化页面的请求过程并且提出优化的方案.同时,在上篇文章中,不少朋友也提出了一些问题,在本篇中也对这些问题给出了回答!

本篇的议题如下:

HTTP请求的优化

HTTP请求的优化

在一个网页的请求过程中,其实整个页面的html结构(就是页面的那些html骨架)请求的时间是很短的,一般是占整个页面的请求时间的10%-20%.在页面加载的其余的时间实际上就是在加载页面中的那些flash,图片,脚本的资源. 一直到所有的资源载入之后,整个页面才能完整的展现在我们面前.

下面,我们就从一个页面开始讲述:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  2. <html xmlns="http://www.w3.org/1999/xhtml"> 
  3. <head> 
  4.  <title>小洋,燕洋天</title> 
  5.  <script type="text/javascript" src="../demo.js"> 
  6.    </script> 
  7.  </head> 
  8. <body> 
  9.    <div> 
  10.    <img src="../images/1.gif" /> 
  11.     <img src="../images/2.gif" /> 
  12.      <img src="http://yanyangtian.cnblogs.com/image/3.gif" /> 
  13.     <img src="http://yanyangtian.cnblogs.com/image/4.gif" /> 
  14.   <img src="http://yanyangtian.cnblogs.com/image/5.gif" /> 
  15.    <img src="http://yanyangtian.cnblogs.com/image/6.gif" /> 
  16.   <img src="http://yanyangtian.cnblogs.com/image/7.gif" /> 
  17.    <img src="http://yanyangtian.cnblogs.com/image/8.gif" /> 
  18.        <img src="http://yanyangtian.cnblogs.com/image/7.gif" /> 
  19.         <img src="http://yanyangtian.cnblogs.com/image/8.gif" /> 
  20.    </div> 
  21.  </body> 
  22.  </html> 

 

如果我们向服务器请求这个页面,客户端的浏览器首先请求到的数据就是html骨架,即:

  1.  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  2.  <html xmlns="http://www.w3.org/1999/xhtml"> 
  3.  <head> 
  4.      <title>小洋,燕洋天</title> 
  5.    
  6.     <script type="text/javascript" src="../demo.js"> 
  7.      </script> 
  8.    
  9.  </head> 
  10. body> 
  11.   <div> 
  12.        <img src="../images/1.gif" /> 
  13.       <img src="../images/2.gif" /> 
  14.       <img src="http://yanyangtian.cnblogs.com/image/3.gif" /> 
  15.      <img src="http://yanyangtian.cnblogs.com/image/4.gif" /> 
  16.     <img src="http://yanyangtian.cnblogs.com/image/5.gif" /> 
  17.      <img src="http://yanyangtian.cnblogs.com/image/6.gif" /> 
  18.     <img src="http://yanyangtian.cnblogs.com/image/7.gif" /> 
  19.     <img src="http://yanyangtian.cnblogs.com/image/8.gif" /> 
  20.      <img src="http://yanyangtian.cnblogs.com/image/7.gif" /> 
  21.     <img src="http://yanyangtian.cnblogs.com/image/8.gif" /> 
  22.   </div> 
  23. </body> 
  24. </html> 

 

在此之前,首先来普及一下页面加载的小知识:

当页面的html骨架载入了之后,浏览器就开始解析页面中标签,从上到下开始解析.

首先是head标签的解析,如果发现在head中有要引用的js脚本,那么浏览器此时就开始请求脚本,此时整个页面的解析过程就停了下来,一直到js请求完毕.

之后页面接着向下解析,如解析body标签,如果在body中有img标签,那么浏览器就会请求img的src对应的资源,如果有多个img标签,那么浏览器就一个个的解析,解析不会像js那样等待的,如果发现img的url地址是同一个地址,那么浏览器就会充分的利用这个已经打开的tcp连接顺序的去一个个的请求图片,如果发现有的img的url地址不同,那么浏览器就另开tcp连接,发送http请求.

注意之前请求js的区别:请求需要js,浏览器会一直等待,不在解析下面的html标签

但是解析到img的时候,尽管此时需要加载图片,但是页面的解析过程还是会继续下去的,然后决定是否发送新的tcp连接加载资源.

大家可能觉得这个之前的代码片段一样,确实代码是一样的,但是,在最开始的时候,发送到浏览器中的只是那些html的代码,任何的js脚本和图片还没有发送过来.

当html代码到了浏览器中,那么浏览器就开始一步步的解析这些代码了,只要遇到了需要加载的资源,浏览器就向服务器发出http请求,请求所需的资源.

整个页面的加载时间图如下:

大家从图中可以看出:

第一条线中分为一半黄色和一半蓝色,其实黄色的部分就代表了打开一个tcp连接花的时间,而后面的蓝色的部分就是请求整个html骨架文档的时间.可以看出,请求html骨架的时间是很短的.其余蓝色的线就表示了图片,脚本资源加载所花的时间.

很显然,这样页面的整个加载时间就很长了.因为页面的加载几乎是顺序的载入,时间就是所有资源加载时间的总和.

下面我们把上面的页面代码代为如下:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  2. <html xmlns="http://www.w3.org/1999/xhtml"> 
  3. <head> 
  4.     <title>小洋,燕洋天</title> 
  5.  
  6.     <script type="text/javascript" src="../demo.js"> 
  7.     </script> 
  8.  
  9. </head> 
  10. <body> 
  11.     <div> 
  12.         <img src="http://demo1.com/images/1.gif" /> 
  13.         <img src="http://demo1.com/images/2.gif" /> 
  14.         <img src="http://demo2.com/image/3.gif" /> 
  15.         <img src="http://demo2.com/image/4.gif" /> 
  16.         <img src="http://demo3.com/image/5.gif" /> 
  17.         <img src="http://demo3/image/6.gif" /> 
  18.         <img src="http://demo4.com/image/7.gif" /> 
  19.         <img src="http://demo4.com/image/8.gif" /> 
  20.         <img src="http://yanyangtian.cnblogs.com/image/7.gif" /> 
  21.         <img src="http://yanyangtian.cnblogs.com/image/8.gif" /> 
  22.     </div> 
  23. </body> 
  24. </html> 

我们再来看看页面的加载时间图

这就是所谓的”并行”载入了.

比较一下两段代码的不同:其实就在img的src属性上面:

第一段页面的代码:img的src属性都是指向一个域名的.

第二段页面的代码:img的src属性指向了不同的域名

这样做的结果是什么?

请大家注意比较img的src的不同.

解释之前,首先来看一个小的常识(在上篇文章中也提过):

当页面请求向服务器请求资源的时候,如果浏览器已经在客户端和服务器之前打开了一个tcp连接,而且请求的资源也在开了连接的服务器上,那么以后资源的请求就会充分的利用这个连接去获取资源. 这样也就是第一个时间图的由来.

如果请求的图片分别位于不同的服务器网站,或者那个请求的服务器网站有多个域名,那么因为浏览器就会为每一个域名去开一个tcp连接,发送http请求,这样,结果就是同时开了多tcp连接,这也是第二个时间图的由来.

虽然说并行加载,确实使得页面的载入快了不少,但是也不是每一个图片或者其他的资源都去搞一个不同的域名,像之前的第二个并行载入图片的例子,也是让两个图片利用一个tcp连接.如果每个图片都去开一个连接,这样浏览器就开了很多个连接,也是很费资源的,而且浏览器还可能会”僵死”.而且有时还会严重的影响性能.

所以,这是需要权衡的. 

除了上面的优化方式,还有其他的图片优化的加载方式.主要是通过减少http的请求达到优化

大家都知道网站的一个menu菜单,有些菜单就是用图片作出来的.如

menu菜单

如果上面的图片一个个载入,势必影响速度,如果开多和请求,有点得不偿失.而且图片也不是很大,那么就一次把整个menu需要的图片作为整个图片,一次加载,然后通过map的方式,控制点击图片的位置来达到导航的效果.

这样一个问题就是:算出图片的坐标,不能点击了”主页”图片,然后却跳到了”帮助”页面了.

本篇就讲述到这里,下篇讲述其他的资源文件的优化,希望 多多提出建议,争取把这个系列写好!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 7.3镜像挂载搭建本地yum源

作者&#xff1a;chenhao 以在虚拟机上操作为例 第一步&#xff1a;先在虚拟机的设备状态“已连接”前打对钩&#xff0c;在点击确定 第二步&#xff1a;挂载光驱&#xff0c;命令mount /dev/cdrom /mnt/cdrom/ 将光驱挂载到mnt/cdrom下 mount /dev/cdrom /mnt/cdrom/注&…

十二之续、快速排序算法的深入分析

十二之续、快速排序算法的深入分析 作者:July 二零一一年二月二十七日--------------------------前言一、快速排序最初的版本二、Hoare版本的具体分析三、Hoare变种版本四、快速排序的优化版本五、快速排序的深入分析六、Hoare变种版…

centos7 配置http服务器

2021-1-20 Hyp 1.安装 http&#xff0c;使用命令 yum install -y httpd2.重启http服务 关闭服务 httpd service stop启动服务 httpd service start重启服务 httpd service restart3.测试运行 使用浏览器访问localhost或者127.0.0.1 出现测试页面即服务启动成功 4.制作自己的…

ASP.NET 生成唯一不重复的订单号 支持多用户并发、持多数据库的实现参考(C#.NET通用权限管理系统组件源码组成部分)...

我们在日常开发项目过程中往往需要各种订单单号的产生方法&#xff0c;而且是支持多用户并发、支持多种数据库的&#xff0c;我们并不想为每个项目都写一些独立的代码去实现这些功能&#xff0c;往往需要有个通用的函数比较爽一些。下面我们以C#.NET通用权限管理系统组件源码的…

Linux系统的服务器配置minicom接console线调试交换机的步骤

作者&#xff1a;chenhao 第一步&#xff1a;首先用yum安装mimicom yum install minicom输入命令后开始安装 在这里输入&#xff1a;y 这里也需要输入&#xff1a;y。安装完成。 第二步&#xff1a;配置minicom里面的参数 minicom -s选择Serial port setup,调试配置信息 …

显示器主流连接线

作者&#xff1a;Liuweifei 1.VGA VGA&#xff08;Video Graphics Array&#xff09;即视频图形阵列&#xff0c;别名D-sub&#xff0c;是经典的15针均分为3排的蓝接口&#xff0c;不支持热插拔。VGA使用模拟信号进行传输&#xff0c;由于经历了将数字-模拟-数字的信号转换过…

OSI七层协议讲解

作者&#xff1a; WYF OSI七层协议讲解 如图从下到上可分为七层 物理层&#xff1a;比如说我们电脑连接一根网线&#xff0c;电脑数据通过网线传出去的过程&#xff0c;就是物理层&#xff0c;相当于一个传输介质&#xff0c;比如说网线、光纤、电缆等。就是定义了网线、光…

Windows Server 2012学习

Windows Server 2012学习 用windows系统来架构网络&#xff0c;以便将资源共享给网络上的用户。 windows的网络架构大致可以分为工作组&#xff08;workgroup&#xff09;架构&#xff0c;域&#xff08;domain&#xff09;架构与前两者的混合架构。 一、工作组架构为分布式…

PL/SQL配置文件解析

2019独角兽企业重金招聘Python工程师标准>>> 1.安装oracle客户端 2.配置文件 加增一个数据库的方式,是编辑 tnsnames.ora文件,在C:\Oracle\Ora81\NETWORK\ADMIN 目录下. 增加类似下面的信息 SVR236 (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL …

Linux之shell中的大括号、中括号、小括号的使用详解+多示例

摘要&#xff1a;很多人和我一样对于shell的各种括号的各种用法肯定不是很清楚&#xff0c;有时候看见别人脚本都不知道是什么意思&#xff0c;今天就来说说bash中的大中小括号的用法和解释&#xff0c;本人常用bash所以也只能用bash来说明了&#xff0c;若其他shell有出入请勿…

win7普通家庭版硬盘分区

我以前对电脑很多东西的概念也没有&#xff0c;但是自己选择了网络工程这个专业&#xff0c;那就得对它负责。自己买了个手提电脑&#xff0c;但是硬盘没有分好区&#xff0c;所以我自己开始查阅资料&#xff0c;完成了分区这个过程。 步骤一&#xff1a; 右击我的电脑选择管理…

Centos7制作局域网http的yum源

制作局域网http的yum源 1、下载安装包到本地&#xff0c;以下载vim软件包为例 yum install --downloadonly --downloaddir/opt/download vim 2、将安装包拷贝至局域网预先设置好的yum服务器 [rootlocalhost yum]# cd /opt/yum 进入到软件包所在文件夹 [rootlocalhost y…

[Advance] How to debug a program (上)

Tool GDB Examining Memory (data or in machine instructions) You can use the command x (for “examine”) to examine memory in any of several formats, independently of your programs data types. x/nfu addr x addr x n, the repeat count The repeat count is a de…

windows7系统安装更新补丁提示0x80240037错误如何解决,文件的后缀名怎么换?

作者&#xff1a;WYF 我们以 IE11-Windows6.1-KB3008923-x64.msu 补丁为例 1、首先我们把IE11-Windows6.1-KB3008923-x64.msu的后缀名msu改为cab&#xff0c;然后解压&#xff0c;注意解压到一个新的文件夹中&#xff0c;不要在本文件夹中解压&#xff08;例如&#xff1a;可以…

多核电脑的配件(CPU)

cpu CPU&#xff0c;全称中央处理器&#xff0c;既是电脑的指令中枢&#xff0c;也是系统的最高执行单位。 CPU主要负责指令的执行&#xff0c;作为电脑系统的核心组件&#xff0c;在电脑系统中占有举足轻重的地位&#xff0c;是影响电脑系统运算速度的重要部件。 cpu的基本信…

centos7利用nexus离线搭建局域网pypi源

centos7利用nexus离线搭建局域网pypi源 1、官网下载nexus oss版本 https://sonatype-download.global.ssl.fastly.net/repository/downloads-prod-group/3/nexus-3.29.2-02-unix.tar.gz [rootlocalhost bin]# wget https://sonatype-download.global.ssl.fastly.net/reposit…

从零搭建nginx服务器

本文开始从零搭建一个nginx网页服务器。 1.最小化安装linux&#xff08;web服务器需要纯净的环境&#xff09; 2.局域网环境&#xff08;环境限制&#xff0c;需要搭建本地包配置环境&#xff09; 3.配置安装nginx环境 1.搭建系统 物理系统:两台浪潮服务器&#xff0c;两台联…

.NET中栈和堆的比较【转自:c#开发园地】

本文转自&#xff1a;C#开发园地 原文翻译的地址&#xff1a;http://www.cnblogs.com/c2303191/articles/1065675.html压栈(入栈)执行方法中的指令.NET中栈和堆的比较1 原文出处&#xff1a; http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM…

修改远程桌面的端口+防火墙设置

作者&#xff1a;WYF 修改远程桌面的端口防火墙设置&#xff08;最详细&#xff09; Windows系统中的远程终端服务是一项功能非常强大的服务&#xff0c;其默认的端口号3389很容易成为入侵者长驻主机的通道&#xff0c;使用户电脑成为通常称为的“肉鸡”&#xff0c;受入侵者远…

keepalived高可用+nginx负载均衡

keepalived高可用nginx负载均衡 1、IP地址规划 hostnameip说明KN0110.4.7.30keepalived MASTER节点 nginx负载均衡器KN0210.4.7.31keepalived BACKUP节点 nginx负载均衡器WEB0110.4.7.24web01节点WEB0210.4.7.25web02节点 2、关闭防火墙&#xff0c;selinux&#xff0c;并安装…