3 最小化请求开销

 

http://code.google.com/intl/zh-CN/speed/page-speed/docs/request.html


最小化请求开销

每当客户端发送 HTTP 请求时,必须随之发出所有与域名和路径相关的 cookie (原文:Every time a client sends an HTTP request, it has to send all associated cookies that have been set for that domain and path along with it.)。 大多数用户的 internet 链接是非对称的:上传和下载的带宽比例通常在 1:4 到 1:20 之间。这意味着上传一个 500 字节的 HTTP 头耗用的时间等同于下载 10 KB HTTP 响应数据——实际上可能更多,因为发出的 HTTP 请求头通常是未压缩的。换句话说,包含小对象(即,少于 10 KB,一张压缩图片的常见尺寸)的请求,即, 数据被加在请求头之中,是影响响应时间的主要因素。

这种延迟在新建浏览器会话时会更长。为了减小网络拥塞的影响,TCP 建立新连接时使用“慢启动(slow start)”算法。这样一来,在得到接受者认可之前,限制通过发送者连接送出大量数据。如果发送者发送的数据超过了新建连接的承受能力,将产生额外的 RTT。

客户端缩减请求时间的最佳方式是:缩减搭载在请求头中的数据的字节数。

  1. 最小化请求尺寸(Minimize request size)
  2. 让不含 cookie 的域提供静态内容服务(Serve static content from a cookieless domain)


最小化请求尺寸


概览

让 cookie 和 请求头尽可能的小,确保一个 HTTP 请求恰好能放到一个包里面(packet)。


详情

理想状况下,一个 HTTP 请求应当能装载一个包里面。网络对包的最普遍的限制大约是 1500 字节,所以,如果你能限制每个请求小于 1500 字节,你就缩减了请求流的开销。HTTP 请求头包括:

  • Cookies:对于那些必须要用 cookie 传送的资源,要全力减小 cookie 的尺寸。为保证请求尺寸在上述限制内,域提供的 cookie 应当小于 1000 字节。我们建议域的平均尺寸不超过 400 字节。
  • 浏览器设置的字段(field): 许多 HTTP 头里面的字段是用户浏览器的用户代理(user agent)自动设置的,所以,你没法控制他们。
  • 请求资源的 URL( GET Host 字段)。携带许多参数的 URL 可能会产生成千上万的字节数。尽力限制 URL 的长度为最多几百字节。
  • 引用URL(Referrer URL)。


建议

在服务端存储大多数 cookie 有效荷载 (Use server-side storage for most of the cookie payload)
如果 cookie 中仅仅存放 ID,给这个 ID 加上键(Key)把它变成数据存储在服务端。不论 session 还是设置了 date/time 过期的 cookie,都可以使用服务端 cookie。

移除无用的和重复的 cookie 字段 (Remove unused or duplicated cookie fields)
下级域名路径上的所有资源会继承位于顶级域名的 cookie 设置的字段(例如 /)。因此,如果你在不同的 URL 路径上提供了不同的应用,而且你有一个全局字段(该域名上的所有应用都用到该字段)——例如,关于用户语言的引用——将设置在顶级域名的 cookie 字段中;而不必在域名的子路径中重复设置。反过来,如果一个字段仅仅应用在某个应用或者某个子路径中——例如,一个 UI 设置——没有必要在顶级 cookie 的字段中设置而迫使其他不要用他的应用传递这个无用数据。


让不含 cookie 的域提供静态内容服务

概览

让不含 cookie 的域名提供静态资源,以便缩减页面请求的总体尺寸。


详情

静态内容,例如:图像、js 和 CSS 问价,是一些没有用户交互的资源,不需要用 cookie。使用无 cookie 域上的资源可以缩减请求的延迟。这项技术尤其适合那些大量引用大体积文件的应用,大体积文件是难以缓存的静态资源,例如高频变换的缩略图,或者不常访问的图像文档。如果页面提供了超过 5 个这样的静态资源,我们推荐你这样做。(要是页面引用要少少于 5 个,不值得另外设置一个域名。)

想要存储提供静态内容的无 cookie 域,需要先注册一个新域名,并配置给你的 DNS 数据库配置一个 CNAME 记录,让新域名指向已存在的域名 A 记录。配置你的 WEB 服务器在新域名上提供静态资源服务,并拒绝在该域名上设置任何 cookies。更新网页上引用这些静态资源的 URL 中的域。

如果你用 CDN(Content Delivery Network,即:内容分发网络)提供静态文件服务,你的 CDN 可能会支持来自其他域的资源服务。联系你的 CDN 并找到答案。


推荐

启用代理缓存(Enable proxy caching)
对那些很少改变的资源, 设置有关浏览器和代理的缓冲头(caching headers) 。因为这些资源不会发送 cookies,所以不用担心代理会缓存具体用户信息。

不要过早使用从无 cookies 域加载的外部 JS 文件(Don't serve early loaded external JS files from the cookieless domain)
因为 JavaScript在文档的头部指定并需要页面启动,所以 JS 文件应当 与主文档放在同一台主机上 。因为大多数浏览器会阻塞其他文件的下载以及阻塞页面呈现,除非所有 JS 文件下载、解析并执行;此时,避免额外的 DNS 查询也是不错的。


例子

许多 Google 产品,包括 新闻代码 ,提供静态资源服务,例如:JS 文件和图像文件,它们来自独立域名 www.gstatic.com。这个域上没有 cookie 。因为新闻的主页在 news.google.com,在下面的截屏上你能看到包含在请求中的 cookie:

但是,对于 www.gstatic.com,通常提供新闻的 logo.gif 文件, 请求或响应中都没有出现 cookie 头。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值