在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
构建高性能ASP.NET站点之二 优化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 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> 25 如果我们向服务器请求这个页面,客户端的浏览器首先请求到的数据就是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> 25
在此之前,首先来普及一下页面加载的小知识:
大家可能觉得这个之前的代码片段一样,确实代码是一样的,但是,在最开始的时候,发送到浏览器中的只是那些html的代码,任何的js脚本和图片还没有发送过来.
当html代码到了浏览器中,那么浏览器就开始一步步的解析这些代码了,只要遇到了需要加载的资源,浏览器就向服务器发出http请求,请求所需的资源. 整个页面的加载时间图如下:
大家从图中可以看出: 第一条线中分为一半黄色和一半蓝色,其实黄色的部分就代表了打开一个tcp连接花的时间,而后面的蓝色的部分就是请求整个html骨架文档的时间.可以看出,请求html骨架的时间是很短的.其余蓝色的线就表示了图片,脚本资源加载所花的时间.
很显然,这样页面的整个加载时间就很长了.因为页面的加载几乎是顺序的载入,时间就是所有资源加载时间的总和. 下面我们把上面的页面代码代为如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>小洋,燕洋天</title> <script type="text/javascript" src="../demo.js"> </script> </head> <body> <div> <img src="http://demo1.com/images/1.gif" /> <img src="http://demo1.com/images/2.gif" /> <img src="http://demo2.com/image/3.gif" /> <img src="http://demo2.com/image/4.gif" /> <img src="http://demo3.com/image/5.gif" /> <img src="http://demo3/image/6.gif" /> <img src="http://demo4.com/image/7.gif" /> <img src="http://demo4.com/image/8.gif" /> <img src="http://yanyangtian.cnblogs.com/image/7.gif" /> <img src="http://yanyangtian.cnblogs.com/image/8.gif" /> </div> </body> </html> 我们再来看看页面的加载时间图
这就是所谓的”并行”载入了. 比较一下两段代码的不同:其实就在img的src属性上面: 第一段页面的代码:img的src属性都是指向一个域名的. 第二段页面的代码:img的src属性指向了不同的域名 这样做的结果是什么?
请大家注意比较img的src的不同.
解释之前,首先来看一个小的常识(在上篇文章中也提过):
虽然说并行加载,确实使得页面的载入快了不少,但是也不是每一个图片或者其他的资源都去搞一个不同的域名,像之前的第二个并行载入图片的例子,也是让两个图片利用一个tcp连接.如果每个图片都去开一个连接,这样浏览器就开了很多个连接,也是很费资源的,而且浏览器还可能会”僵死”.而且有时还会严重的影响性能.
所以,这是需要权衡的. 除了上面的优化方式,还有其他的图片优化的加载方式.主要是通过减少http的请求达到优化
大家都知道网站的一个menu菜单,有些菜单就是用图片作出来的.如
如果上面的图片一个个载入,势必影响速度,如果开多和请求,有点得不偿失.而且图片也不是很大,那么就一次把整个menu需要的图片作为整个图片,一次加载,然后通过map的方式,控制点击图片的位置来达到导航的效果.
这样一个问题就是:算出图片的坐标,不能点击了”主页”图片,然后却跳到了”帮助”页面了.
本篇就讲述到这里,下篇讲述其他的资源文件的优化,希望 多多提出建议,争取把这个系列写好!
版权为小洋和博客园所有,欢迎转载,转载请标明出处给作者。 http://www.cnblogs.com/yanyangtian
另外补上网友发的信息:
|
请发表评论