Login

Memcache 启用

2008-07-03 00:25:16 by kommit

好久没写文章了……这两天试着折腾了一下 Memcache,今天把代码部署上来了。不过,还在测试阶段,所以在 config 里面加了一个开关用于启用或者关闭 memcache 的使用。还加了不少 logging,可以观察 cache 的命中率。

不知道这东西能不能有效地降低 CPU 的使用,不过我的 blog 本来访问量就很小,CPU 使用率一直不高,所以我正在寻找可以模拟浏览器进行大量(能分布式就更好了)访问的工具,来系统地测试一下。

Memcache 使用方法很简单,我在考虑要不要再啰嗦一篇心得呢?

Tags: caching, performance, plog, memcache

新增缓存机制 - HTTP Caching

2008-06-18 23:04:52 by kommit

上次提到的 theme 机制带来的性能下降,这两天我折腾了一下,期待有所改善:

在处理 theme 相关的文件(css/image)的请求的时候,在 Response-Header 中加上这几项:


Last-Modified: Wed, 18 Jun 2008 14:22:27 GMT
Cache-Control: max-age=600
Expires: Wed, 18 Jun 2008 14:48:39 GMT
Date: Wed, 18 Jun 2008 14:38:39 GMT


其中 Last-Modified 后面的日期是上次更新 config 的时间,Date 后面是当前时间,Expires 后面是当前时间 + 10分钟,10分钟就是 Cache-Control 后面的 max-age,单位是秒。因为看到 GAE 对 static 文件的 Cache 时间也是10分钟,所以我使用了这个数字。

Last-Modified

如果客户端收到的 Response 中包含 Last-Modified,那么下次 request 的时候就会在 Request Header 中包含 If-Modified-Since 字段,值就是上次服务器发送的 Last-Modified,服务器端会判断上次的 config 时间是否比 If-Modified-Since 晚。如果自上次 request 之后又更新了 config,那么服务器就会返回完整的内容;如果期间没有更新 config,那么服务器就没必要返回完整的内容,只需要向客户端发送一个 304 Not Modified 状态码就可以了。

Cache-Control、Date 和 Expires

这几个参数的组合,表示告诉浏览器:这个文件在多长时间之内不会更改,在这个时间内不需要再 request,保守起见,我设置了10分钟。

浏览器行为

如果只是在网站的链接之间 click click click,那么浏览器会完全遵守上述行为。这样可以尽可能地减少请求次数,以及 response 的数据量。

如果在某个页面点击了浏览器的刷新按钮或者按 F5,浏览器会忽略 Expires 时间,把该页面需要的所有的文件都重新请求一遍。

如果按住 Ctrl 再刷新或者 Ctrl-F5 (俗称强制刷新),浏览器将不会发送 Last-Modified Header,将所有需要的文件请求一遍,服务器会返回文件的完整内容,而不是仅仅一个 304 Not Modified 状态码。

后记

经初步观察,现在浏览器不会每次都彪呼呼地去请求一大堆 css、jpg、gif 文件了,浏览器也不会每次都脑残地返回完整内容了,看来是有效了。

之前没怎么研究过 HTTP 协议,上面这些都是这两天通过抓包分析得出来的结论,然后参考了一下 django 的代码。不知道有没有不对的地方,欢迎大家指正。。。

另外有朋友建议我使用 MemCache API 来减少服务器端的计算量,这个我确实正在考虑。而且理论上确实可以提高效率。

在 GAE 提供的有限的资源上折腾,真是一件有意思的事情。

Tags: caching, performance, plog, http, dev