加载阻止CDN服务器往返

loading prevent CDN server roundtrip

本文关键字:服务器 CDN 加载      更新时间:2023-09-26

我的页面从https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js

在重复加载时,在chrome dev工具的网络选项卡中,我看到jquery.min.js的返回状态为"304未修改",时间/延迟有时高达一秒。

我还可以在devtools中看到,jquery的响应标头是"Expires:Thu,31 Dec 2037 23:55:55 GMT",但它仍然返回304

对于我网站上的其他文件,例如cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/jstree.min.js,我看到大小不足的返回状态为"200 OK"answers"(来自缓存)",并且它们的延迟/时间极短(我想这意味着100%缓存结果,没有远程往返)

我如何告诉浏览器,如果缓存中存在jquery url,就可以在没有任何远程流量的情况下使用它?我需要我的网站尽可能快的加载时间。

Thx!

使用F5刷新将始终向web服务器请求所有资源,即使大多数资源将返回为304。

这是经过设计的,也是一件好事——用户通常不应该手动刷新页面,如果他们这样做了,那么你应该给他们机会获得更新的资源。

我建议通过打开Fiddler进行测试(只是为了避免在Chrome开发工具中查看缓存响应的噪音),并像普通用户一样行事,看看在正常用户会话中实际发生了多少HTTP流量,看看是否有什么可以调整的。

当Chrome将文件(如jquery.min.js文件)放入缓存时,它会跟踪服务器上次修改的时间。每当它再次看到该文件时,它都会询问服务器是否已更改,您看到的304响应表明服务器已确认没有更改,Chrome应使用缓存版本。

如果没有这样的检查,您的页面就无法知道您提供的URL中的文件是否已更改。另请参阅此处的答案:"304未修改"是如何工作的?。

但是,浏览器并不总是需要进行此检查。被服务的文件也有一个Expires值,它告诉浏览器在检查是否有更改之前需要等待多长时间。如果您之前提取的文件没有"过期",浏览器将直接使用缓存中的文件。

当您看到200 OK(from cache)指示符时,这意味着该文件是直接从缓存中使用的。

参见:

HTTP状态代码200(缓存)与状态代码304之间的区别是什么?

雅虎的性能最佳实践