web性能探究(三)

Cookies的应用实在是太广泛了,比如做身份验证的,做个性化的等,cookie中的信息在web服务器和浏览器之间通过HTTP头中进行交互。本文将讨论cookies对于整个用户响应时间的影响。

HTTP快速回顾

当浏览器请求一个页面的时候,web服务器会产生cookies,下面是一个当用户请求www.yahoo.com后,服务器发回来的http头的例子:

HTTP/1.1 200 OK

Content-Type: text/html; charset=utf-8

Set-Cookie: C=abcde; path=/; domain=.yahoo.com

这个HTTP头包含这个响应的协议版本,状态代码,content-type(实体),Set-Cookie头也包含在响应中,在本例中cookie的名字是"C“,对应的值为”abcde”。注:ie6.0能允许的的最大容量是5051bytes,FF1.5的cookie最大容量为4096bytes。

浏览器会把cookie”C“存储在用户本地机器上面,在下一次请求的时候会发回到服务器,在本例中”domain=.yahoo.com “,指定了只有在.yahoo.com或者子域中的HTTP请求才能包含这个cookie,例如,如果用户访问finance.yahoo.com,浏览器将会在请求中包含”C“这个cookie,因为这个例子中没有包含过期时间,所以cookie的过期时间就是当前会话的时间(浏览器关闭后,cookie自动失效)。

下面是浏览器请求finance.yahoo.com时HTTP头的信息:

GET / HTTP/1.1 Host: finance.yahoo.com

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; ... Cookie: C=abcde;

可以看到在www.yahoo.com中创建的cookie”C“也包含在finance.yahoo.com的HTTP请求中了。

Cookies对响应时间的影响

Yahoo!的性能团队做了一个实验去检测一个页面中cookie的大小,这个实验是在一个空页面的基础上做的(页面上没有任何元素),在这个实验中,主要的变量是cookie的大小,我们的实验主要测量不同的cookies大小下下载一个页面需要的时间,结果如图1所示:

web性能探究(三)

图1

这个结果进一步说明我们应该尽最大的可能减少cookie的大小从而较少对于用户响应时间的影响。一个3000byte的cookie或者所有cookie的容量为3000bytes将会增加80ms的延迟时间(DSL访问),当用户使用拨号上网时这个延迟将会更长。

.yahoo.com的cookie有多大

在.yahoo.com这个域下面的cookies将会影响整个yahoo!站点的响应时间,图2显示了Yahoo!的所有页面中来自.yahoo.com的cookie所占的比例。

web性能探究(三)

图2

大约80%的页面的cookie小于1000bytes,这个会导致5-15ms的DSL带宽速度,数据表明大部分页面没有严重的延迟,但是2%的页面有多于1500bytes的来自.yahoo.com的cookies,尽管2%听起来不多,但是对于Yahoo!这样每天有百万级页面访问的站点,我们有强烈的动机去分析这2%,去排除不必要的cookie,降低cookie的大小,将cookie设置在更小粒度的域中。

在前面关于浏览器缓存使用的文章中,有人在评论中指出关于不同浏览器的影响,因为ie和ff对于cookie的最大容量和数量的支持和实现是不一样的,我们分析数据发现不同的浏览器对于cookie的大小没有特别大的区别,我想进一步的研究不同浏览器对于性能是否有影响将会是非常有趣的

不同站点cookie大小的分析


图3显示了Yahoo!以及一些主流站点的cookies的大小,这个实验中,我们清楚了我们机子上的所有cookie并且只访问这些站点的主页


图3 仅仅访问主页

图3中yahoo的cookie大小为122bytes,和上图中的cookie大小是不一样的,因为这个实验我们只是访问了那几个站点的主页,而前一个实验则是反映了真实的用户,他们访问大量的雅虎页面(主页或者下面的子页面),为了说明这个举个例子,如果tv.yahoo.com  movies.yahoo.com要共享一个cookie,那么这个cookie就必须设置在.yahoo.com这个主域中,对于访问了大量雅虎包括子域页面的用户来说他们的cookie的大小要远大于只访问yahoo主页的用户cookie的大小。将cookie设置在合适的域中和cookie的大小一样重要,一个在.yahoo.com中的cookie将会影响yahoo站点买一个页面的响应速度。

要点

  1. 清除不必要的cookie
  2. 将cookie的容量尽量最小化
  3. 要将cookie设置在合适的域中
  4. 设置合适的cookie过期时间

原文链接

Performance Research, Part 3: When the Cookie Crumbles