比如通过php 输出
header("Cache-Control: max-age=".$maxAge);
浏览器会对当前请求的url返回的数据进行本地静态缓存
在缓存期内用户再次访问该地址数据将直接从客户端本地取得,实现最有效地减少对服务器的压力.
当然静态缓存会出现在缓存期内无法显示最新的数据的问题.
怎么样实现根据需要来缓存呢?
我们可以看到浏览器缓存的特性,即根据请求的url来区分
比如
http://www.ggg.com/get_data.php?v=1 和 http://www.ggg.com/get_data.php?v=2
就是两份不同的缓存.
那在需要更新缓存时,传递和以往不同的 v 参数,即相当于改变请求的url 就可以实现得到最新的数据.
那怎么样做到这里的v参数永远都不重复呢?(如重复了就会出现得到旧的数据) 聪明的你肯定也想到了用时间戳,这一秒与上一秒永远不会重复.
嗯... 好像有点道理. 假如我有成千上万个用户,每个用户的数据都不一样,那不是这个url地址有很多很多个了吗?能否说说这种情况下怎么来实现以上的设想吗?
一般网站针对每个用户都有个唯一标志,比如用户名 user,为使每个用户的url地址不一样,我们在ajax异步取得数据时通常有类似这样的url (ggg 为当前用户名,123假设为当前时间戳)
http://www.ggg.com/get_data.php?user=ggg&v=123
这样就区分了每个用户,针对当前用户为了得到最新数据我们唯一需要改变的就是v ,由于用户量非常大,每个用户当前v值如能直接保存在客户端就最好了,看来cookie最合适不过了.以 test 用户为例, 我们建个名为 test 的cookie,里面的值就是当前的v值,生成url时v直接从该cookie里取得,当个cookie值改变时(例如用户更新了资料来触发),就实现了取得新数据的效果.
小结:
减少服务器重复请求,其实客户端可以做得更多.