如果您从CDN中包含jQuery,是否有办法确定用户是从CDN获取内容还是从缓存中检索内容?
显然,缓存命中不会发出HTTP请求,但您是否可以测试它并使用数据将Javascript报告回您自己的服务器?
答案 0 :(得分:1)
如果您已登录CDN(我们似乎没有?)您可以更改测试运行的CDN URL并在服务器上使用pingback URL。在一段时间内,将ping back url命中和时间与您的CDN网址匹配和唯一身份访问者数量进行比较。
您应该能够了解您获得的cdn网址上的唯一点击次数与您在网页上获得的唯一点击次数。差异应该是机器人,刮刀和缓存或失败的资源加载。机器人你可以消除,也可能是刮刀,所以你的%年龄应该反映足够长的时间。
这对你有用吗?
我们在非cdn资源上执行此操作,以查看人们是否正在下载最新的CSS文件,以便仅对那些在对css文件进行更改后似乎已缓存资源的IP强制进行名称更改。 / p>
答案 1 :(得分:1)
如果不使用ajax,测试304(未修改)将会很困难。除非你在CDN上采用相同的原始政策,否则使用ajax将非常困难。
我假设您要测试脚本加载并在客户端上可用的实际时间,并希望使用CDN与本地比较这些数据。如果是这样,测试实际时间而不是进行一些缓存测试不是更好吗?
设置脚本加载的实际时间的A / B测试相当容易。
对于 A 测试,您可以进行CDN /本地分离
<script>var _time = new Date().getTime();</script>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script src="project.js"></script>
<script>_time = new Date().getTime() - _time;</script>
B 测试本地脚本合并或其他:
<script>var _time = new Date().getTime();</script>
<script src="project.includingjquery.min.js"></script>
<script>_time = new Date().getTime() - _time;</script>
然后使用ajax将_time
变量报告给分析或您自己的数据库。如果 B 用户报告的_time
较低,您知道这是正确的方法......
答案 2 :(得分:1)
为什么不使用CHARLES或类似的调试代理来确定加载速度?
如果您想从多个位置了解客户端的速度,请使用http://www.webpagetest.org/两个不同版本的网站(一个带有CDN,一个带有自托管静态位置)并比较加载速度。就个人而言,除非你有很多自定义的javascript代码,否则使用CDN进行jQuery是有意义的,特别是因为许多网站都使用Google Libraries API进行jQuery。
答案 3 :(得分:0)
如果您愿意为页面添加一些批量来测试它,您可以向CDN添加ajax请求以获取jQuery,然后检查标头是否有304响应。然后,如果您创建第二个ajax请求以ping回您的服务器,告诉您jQuery是否被缓存,即它是200还是304响应。我没有尝试过,但它应该可以工作,但它会为你的用户增加一些额外的请求,但鉴于它们将是异步的,它可能不会产生任何影响。
答案 4 :(得分:0)
<script>var s=new Date().getTime();</script>
<script src="cdncontent"></script>
<script>
var s = new Date().getTime() - s;
if (s < 100) {
//likely from cache
} else {
//likely from CDN
}
</script>
答案 5 :(得分:-2)
总是值得从CDN加载资源。唯一的缺点是CDN是否在地理位置上与用户接近。您需要检查目标受众,并决定是否更好地使用它。在jquery的情况下,我总是使用谷歌CDN,我认为这是可行和强大的。