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