我正在尝试提高客户端从我的 Compojure 网络服务器获取页面的性能。我们使用 提供一堆静态文件(JS、CSS)(compojure.route/resources "/"),它在文件系统上查找文件,将它们转换为 URL,然后将它们作为流提供给 Ring。通过转换为流,它似乎丢失了所有文件元数据,例如 mod 时间。
我可以包装静态资源处理程序并添加一个ExpiresorCache-Control: max-age标头,但这会阻止客户端发送任何请求。有用,但这些文件有时会更改(当我们发布版本时)。
理想情况下,我希望客户端在一个小时内信任自己的缓存版本,并If-Modified-Since在该小时过去后发出带有标头的请求。然后我们可以返回304 Not Modified,客户端避免下载几百公斤的 javascript。
看起来我可以Last-Modified在提供响应时设置一个标头,这会导致客户端使用If-Modified-Since标头限定后续请求。太好了,除了我必须重写大部分代码compojure.route/resources才能添加Last-Modified- 不难,但乏味 - 并发明更多代码来识别和响应If-Modified-Since标题。这不是一项艰巨的任务,但也不是一项简单的任务。
这是否已经存在于某个地方?我找不到它,但它似乎是一个足够普遍且足够大的任务,以至于现在有人会为它编写一个库。