加载阻止CDN服务器往返
loading prevent CDN server roundtrip
我的页面从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之间的区别是什么?
雅虎的性能最佳实践
- 使用JSP从服务器检索和显示图像
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 客户端服务器REST API captcha实现
- 正在将base64 jpeg从input-type=file上传到服务器
- Webpack开发服务器和React服务器端渲染
- 提示使用服务器端事件处理程序激活JavaScript
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 如何使用Socket.io将命令从客户端发送到服务器
- jQuery blueimp文件上传:将N-1个文件上传到IE中的服务器
- 使用jasmine模拟对服务器的调用
- 如何轻松地将服务器端变量从Java代码转移到客户端代码
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- 通过ajax将坐标传递到php服务器端,并在处理后检索到javascript
- 如何使用Javascript将空数组发送到PHP服务器
- 如何在HTML中显示服务器对象变量
- 将图片上传到服务器,服务器调整图片大小并进行压缩,最后将结果发送到源CDN
- 加载阻止CDN服务器往返
- 如何识别从特定CDN服务器获取的网站中的特定图像
- 当CDN不可达时的回退;服务器端使用php
- 从CDN或应用程序服务器(RoR、node.js等)提供html/jss/css应用程序