Javascript 从CDN查找jQuery缓存命中/未命中

Javascript 从CDN查找jQuery缓存命中/未命中,javascript,jquery,cdn,Javascript,Jquery,Cdn,如果包含来自CDN的jQuery,有没有办法确定用户是从CDN获取内容还是从缓存中检索内容 显然,缓存命中不会发出HTTP请求,但您是否可以测试它并将Javascript报告给您自己的服务器和数据?从CDN加载资源总是值得的。唯一的缺点是CDN在地理位置上是否靠近用户。你需要检查你的目标受众,并决定是否最好使用它。在jquery的情况下,我总是使用Google CDN,我认为它是可靠和健壮的。如果您愿意向页面添加一些块来测试这一点,您可以为jquery向CDN添加ajax请求,然后检查标题以获得

如果包含来自CDN的jQuery,有没有办法确定用户是从CDN获取内容还是从缓存中检索内容


显然,缓存命中不会发出HTTP请求,但您是否可以测试它并将Javascript报告给您自己的服务器和数据?

从CDN加载资源总是值得的。唯一的缺点是CDN在地理位置上是否靠近用户。你需要检查你的目标受众,并决定是否最好使用它。在jquery的情况下,我总是使用Google CDN,我认为它是可靠和健壮的。

如果您愿意向页面添加一些块来测试这一点,您可以为jquery向CDN添加ajax请求,然后检查标题以获得响应。如果然后创建第二个ajax请求ping回服务器,告诉您是否缓存了jQuery,即它是200还是304响应。我没有尝试过这个方法,但它应该可以工作,但它会为用户添加一些额外的请求,但考虑到它们是异步的,这可能不会有任何影响。

var s=new Date().getTime();
<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>
var s=new Date().getTime()-s; 如果(s<100){ //可能来自缓存 }否则{ //可能来自CDN }
如果您已登录CDN(我们似乎没有?),您可以更改测试运行的CDN url,还可以在服务器上使用pingback url。在一段时间内,将ping-back url点击率和时间与您的CDN url点击率和唯一访问者计数进行比较

您应该能够了解您在cdn url上获得的独特点击数与您在页面上获得的独特点击数。区别应该是机器人程序、刮取器和缓存或加载资源失败。你可以消除的机器人,可能还有刮刀,所以你的年龄百分比应该在足够长的时间内反映出来

这对你有用吗

我们在非cdn资源上执行此操作,以查看人们是否正在下载最新的CSS文件,或者仅在更改CSS文件后似乎缓存了资源的IP上强制更改名称。

如果不使用ajax,测试304(未修改)将很困难。而且使用ajax将非常困难,除非您在CDN上使用相同的源代码策略

我假设您希望测试脚本加载到客户端并在客户端上可用的实际时间,并且希望使用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>
var\u time=new Date().getTime();
_时间=新日期().getTime()-\u时间;
B测试本地脚本合并或其他:

<script>var _time = new Date().getTime();</script>
<script src="project.includingjquery.min.js"></script>
<script>_time = new Date().getTime() - _time;</script>
var\u time=new Date().getTime();
_时间=新日期().getTime()-\u时间;

然后使用ajax将
\u time
变量报告到analytics或您自己的数据库中。如果B用户报告的
\u时间较短,您知道这是正确的方法…

为什么不使用CHARLES或类似的调试代理来确定加载速度


如果您想从多个位置了解客户端的速度,请使用两个不同版本的网站(一个使用CDN,一个使用自托管静态位置),并比较加载速度。就个人而言,除非您有很多自定义javascript代码,否则在jQuery中使用CDN是有意义的,特别是因为许多网站使用Google Libraries API进行jQuery。

这是为了什么?我只是在想,如果您想每次都从http req中检索,您可以将当前时间戳添加为querystring变量,这将迫使它再次下载。例如,
我想看看从CDN加载jQuery是否值得。如果有实际数据而不是猜测缓存中有jQuery的用户百分比,那就太好了。哦,我明白了:)这很公平。想知道您是否可以对应该缓存的资源发出异步请求,然后立即尝试从中请求变量。。。可能只在从文件系统加载脚本的情况下才起作用。对我和其他7个人来说,这听起来像是一个有趣的练习:-)你有没有得到过这方面的任何统计数据?这个答案没有附加任何数据。例如,现在我们将缩小的jQuery与其他Javascript捆绑在一个文件中。拆分jQuery将涉及一个额外的HTTP请求。除非我知道缓存中已经有多少用户,否则我无法评估这种折衷。无论如何,每个元素都会有一个额外的请求,最大的区别在于向同一服务器或不同服务器发出请求。假设您在同一台服务器上有两个资源,您的服务器将收到两个请求,但它将一个接一个地提供服务。另一方面,如果您有两个来自不同服务器的资源,理想情况下,这两个资源将同时提供,因此显示速度很快。这个答案做出了错误的假设。将jQuery源代码和其他脚本缩小到一个文件/请求中比服务两个请求(无论它们位于何处)要快得多,这一点值得商榷。发帖后我意识到,除非您使用的CDN具有允许跨域ajax请求的访问控制头,否则这是行不通的?有人知道是否有CDN设置了
访问控制允许源站
头吗?遗憾的是,jQuery下载页面上列出的三个CDN(谷歌、微软和jQuery自己的)都不支持访问控制允许源站头。25毫秒的时间只是一个猜测,你不太可能真正连接,在25毫秒内请求并下载给定文件,但这应该足以从本地加载/解析。。。你可能想对此稍加调整/测试。它可以工作,但我正在考虑使用谷歌的CDN;我们无法从中记录。不,但测试会显示h