我正试图让我的脑袋围绕着一些缓存技术,我现在正在看的是Etags /条件获取。据我了解,你通常做的是:
考虑整体情况,我有点困惑。在所有情况下,我都可以看到使用Not Modified响应可以节省不必要的响应主体的额外字节,但这对服务器处理时间有何影响?相反,它似乎什么都不做,因为服务器仍然必须生成响应对象,其中包括它到达那里所需的所有后续进程。例如,如果操作非常复杂并且需要几秒钟才能完成。无论输出是否相同,它仍然必须完成操作才能生成结果对象的散列。
我觉得我正在错误地看待这种方法的目的。 etags是仅用于文件等静态资源而不是各种进程的结果资源吗?例如,图像可以很好地利用etag,但是像销售历史这样的报告呢?这是使用etags和一般缓存之间的分界线还是我错过了一块?情景的例子确实会有所帮助。
答案 0 :(得分:0)
您可以使用HTTP的ETag缓存机制,就像您可能知道的任何其他缓存机制一样。将其视为缓存密钥。您不从结果中生成密钥,而是使用输入参数。
因此,我们假设您拥有资源“/ image?id = bob& dimension = 100x100”。这将从数据库中获取Bob的图片,将其缩小到100x100并将其返回给客户端。不是对缩放图像进行散列,而是对输入参数进行散列:“bob”和“100x100”。如果您的服务器获得该请求,则只需检查Bob是否存在于数据库中并返回304。