Skip to content

怎样写动态网站的缓存脚本 ​

本节目标:理解“怎样写动态网站的缓存脚本”的核心思路,并能把它用于实际开发或面试表达。 默认情况下,大多数的脚本语言将不会返回验证器(Last-Modified or ETag 响应头)或者缓存更新提示(Expires or Cache-Control)。同时,一些真正的脚本语言是动态的(意味着他们对每个请求返回不同的响应资源),大多数站点(像搜索引擎和数据库驱动站点)都能从缓存脚本从受益。 一般来讲,如果在间隔的时间段(不管是相差几天还是几分钟),发出相同的请求,能够复写一个脚本输出,那么它就能够缓存。如果脚本输出的内容会随着URL的改变而改变,也是可以进行缓存的;但是如果脚本输出要依赖cookies,认证等,则不能缓存。

  • 写一个优良的缓存脚本的最好办法是:不管内容何时更改,都将脚本的内容输出到普通的文件中,以便网站的服务器能够想其他网页一样对待它,从而生成和使用缓存的验证器。记住只对那些已经改变的文件进行写入,这样可以让Last-Modified 的值被保护起来.
  • 另一个让脚本可以缓存的方法是,设置一个有关存活时间的响应头,值设置为脚本能够使用的时间。虽然 Expires设置可以实现这一点,但是设置Cache-Control: max-age是最简单的, 它可以在一次请求发生后的一段时间里又发出新的请求。
  • 如果你不能做到这些,你将需要让脚本生成一个验证器,然后对浏览器发出请求中的 If-Modified-Since 和/或 If-None-Match做出响应. 通过分析HTTP 头你能够做到这一点,只要在适当的时候返回304(缓存读取)响应状态即可。

小技巧:

  • 如非必要,尽量不使用 POST方式. 大多数的缓存无法保持对POST方式响应,你过你想通过路径或请求(GET)发送一些信息,缓存能够在未来存贮信息。
  • 除非整个内容是要呈现给完整的用户,否则不要用URL来传递用户的身份信息.
  • 不要指望来自一个用户的所有请求都是从同一个主机发出的, 因为缓存经常一起产生作用.
  • 设置响应头中的Content-Length (用于描述HTTP消息实体的传输长度). 它允许你的脚本可以在长连接通信时仍有响应,并且客户端可以通过一个TCP/IP连接请求不同的资源,而不是为一次请求的都建立一个通信

本站总访问 — 次