我使用cookies进行页面缓存,可以吗?
要显示部分静态内容(很少从数据库更新), 我不喜欢与数据库进行很多交互,所以我可以使用cookie将结果存储在客户端的计算机中并直接显示数据吗?
对于数据的真实性和完整性,我为数据创建了一个crc,并与该cookie中的数据一起存储。 crc计算的算法是硬编码的(假设),所以
这个想法有没有缺点?
答案 0 :(得分:3)
Cookie不应用于缓存,因为您的cookie会在每次请求时从浏览器发送到服务器!!这意味着您发送更多字节,这意味着更高的延迟。因此,通过以这种方式使用cookie,您实际上正在减慢系统速度,而不是帮助它。在网站上缓存数据的正确方法是使用localStorage
(或其他HTML5存储类之一)来缓存它。
答案 1 :(得分:3)
这对我来说听起来不错。缓存数据是用户特定的还是全局的?对于全局数据,您最好在服务器端缓存整个生成的页面,并对将来的请求进行响应。使用cookie,您仍然需要在每个请求上动态生成页面。
对于特定于用户的数据,它取决于页面,但您通常希望在会话中存储用户名等内容。缓存类似于用户个人资料页面的内容将不会非常有用,因为它不会经常受到影响。
在任何一种情况下,您最终都会浪费大量带宽接收每个请求的所有额外信息,您仍然需要为每个请求动态生成一个页面。如果您的校验和算法受到损害,并且您在cookie中存储重要内容(如帐户余额或用户名),则还会产生安全隐患。此外,如何使cookie中缓存的数据无效?每个请求都需要有一个机制来检查数据是否过时,这会破坏目的。
答案 2 :(得分:1)
Cookie应该用于存储会话ID和用户名等小字符串。
最好将静态内容写入服务器(或数据库)上的本地文件并提供静态内容,直到您决定使其过期 - 然后重复该过程。
有一些服务器,例如memcached,它们在执行此操作时非常有效,但伪代码是相同的:
if (is_cached('recent_articles') {
return cached_content('recent_articles');
else {
save('recent_articles', $articles)
return cached_content('recent_articles')
}
确保在一定时间后或当您知道其陈旧时过期内容 - 以最合理的为准。