用Fiddler来调试
学习如何通过Fiddler建立一个速度更快的 站。 在这篇文章中,我们将使用Fiddler去探究HTTP的性能,缓存,以及压缩。
HTTP性能总览 在第一次至关重要的访问中,用户必须要下载每一个内容片断,来生成页面,包括JS,CSS,Images,HTML,如果你的页面太难加载(包括IIS接到请求执行并返回给客户端HTML),访问者也许就会离开你的页面!
通过暴露所有的HTTP通讯,Fiddler很容易得向你展示哪些文件经常被用于生成一个页面,
Shift+click 可以在Fiddler左边框的会话列表中多选会话,来计算那些被选会话的“页面总重量”。那些被转换成字节的数量。
如果你想让你的客户在第一次访问的时候就留下深刻的印象 ,那么最好的,也是唯一的途径就是返回给客户更少的文件。
1 使用更少的图画
2 将所有的CSS浓缩到一个CSS文件中
3 将所有的脚本浓缩到一个JS文件中
4 简化你的页面时间
5 使用HTTP压缩
如果要是你已经对用户的第一次来访的性能进行了优化,那么你可以通过Http 缓存的优势来使得你的 站访问速度更快!
HTTP 缓存介绍
2种方式来提升你的web 应用程序的速度:
减少请求和响应的往返次数
减少请求和响应的往返字节大小。
HTTP缓存是最好的减少客户端服务器端往返次数的办法。缓存提供了提供一种机制来保证客户端 或者代理能够存储一些东西,而这些东西将会在稍后的HTTP 响应中用到的。(即第一次请求了,到了客户端,缓存起来,下次如果页面还要这个JS文件或者CSS文件啥的,就不要到服务器端去取下来了,但是还是要去服 务器上去访问一次,因为请求要对比ETAG值,关于这个值,我将会在下次翻译中介绍其作用)这样,就不用让文件再次跨越整个 络了。
缓存相关的请求头
为了提高性能,微软的IE和其他的web客户端总是想尽办法来维持从远程服务器上下载下来的本地的缓存。
当客户端需要一个资源(html,css.js…),他们有3种可能的动作:
1 发送一个一般的HTTP请求到远程服务器端,请求这个资源。
2 发送一个有条件的HTTP请求到服务器,条件就是如果它不同于本地的缓存版本。
3 如果缓存的拷贝可用,就使用本地的缓存资源。
当发送一个请求,客户也许会使用如下的几个HEADER
Table 1. Client Cache Headers
Pragma: no-cache |
The client is unwilling to accept any cached responses from caches along the route and the origin server must be contacted for a fresh copy of the resource. |
If-Modified-Since: datetime |
The server should return the requested resource only if the resource has been modified since the date-time provided by the client. |
If-None-Match: etagvalue |
The server should return the requested resource if the ETAG of the resource is different than the value provided by the client. An ETAG is a unique identifier representing a particular version of a file. |
1 Pragma:no-cache 表明客户端不愿意接受缓存请求,它需要的是最即时的资源。
2 If-Modified-Since: datetime 表明如果这个资源自从上次被客户端请求,就已经修改了,那么服务器就会返回给客户端最新的。
3 If-None-Match: etagvalue 如果客户端资源的ETAG值跟服务器端不一致了,那么服务器端返回最新的资源。ETAG就是一个唯一的ID,用来表示一个文件的一个特定的版本。
如果要是这些有条件的请求,也就是含有If-Modified-Since 或者 If-None-MatchHeader头的请求,服务器将会以HTTP/304 Not Modified 来作为响应,那么客户端就知道可以使用客户端的缓存了。 否则,服务器将会返回一个新的响应并且客户端就会抛弃过期的缓存资源。
你可以观察2个连贯的请求,来请求同一个图片,你会在Fiddler中发现:在第一个本地缓存版本中,服务器返回一个含有ETAG的文件,和一个含有最后修改日期的文件,在这个第一次的请求会话中,一个本地的缓存版本已经可以使用了。这样一来,一个有条件的请求就被创建出来。然后你再次请求这个图片的时候,他就就会响应一个本地缓存的文件,当然前提是第一次缓存的图片的ETAG值或者If- Modified-Since 值跟服务器上匹配的话,服务器就响应一个304给客户端。
Session #1
GET /images/banner.jpg HTTP/1.1
Host: http://www.bayden.com/
HTTP/1.1 200 OK
Date: Tue, 08 Mar 2006 00:32:46 GMT
Content-Length: 6171
Content-Type: image/jpeg
ETag: “40c7f76e8d30c31:2fe20”
Last-Modified: Thu, 12 Jun 2003 02:50:50 GMT
Session #2
GET /images/banner.jpg HTTP/1.1
If-Modified-Since: Thu, 12 Jun 2003 02:50:50 GMT
If-None-Match: “40c7f76e8d30c31:2fe20”
Host: http://www.bayden.com/
HTTP/1.1 304 Not Modified
因为一个HTTP304响应仅仅包含头,没有body,所有它在穿越互联 的时候要比携带了资源的快很多,尽管如此,HTTP/304响应需要一个服务器的往返,但是通过细心的设置响应头,web程序员可以消除这种因素,甚至是有条件的请求。
缓存相关响应头
通常缓存机制是由响应头来控制的。HTTP规范描述了Header控制缓存,The optional Cache-Control,Expires(过期)。
Expires头包含一个绝对的日期,当超过此日期,它将不会被考虑更新了。
Table 2. Common Cache-Control Headers
Value |
Meaning |
public |
The response may be stored in any cache, including caches shared among many users. |
private |
The response may only be stored in a private cache used by a single user. |
no-cache |
The response should not be reused to satisfy future requests. |
no-store |
The response should not be reused to satisfy future requests, and should not be written to disk. This is primarily used as a security measure for sensitive responses. |
max-age=#seconds |
The response may be reused to satisfy future requests within a certain number of seconds. |
must-revalidate |
The response may be reused to satisfy future requests, but the origin server should first be contacted to verify that the response is still fresh. |
文章知识点与官方知识档案匹配,可进一步学习相关知识 络技能树首页概览22057 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!