2012-02-21 75 views
8

如果您从CDN中包含jQuery,是否有方法可以确定用户是从CDN获取内容还是从缓存中检索内容?从CDN查找JQuery缓存命中/未命中

很显然,缓存命中不会发出HTTP请求,但是您可以测试该报告并将JavaScript报告回您自己的服务器上的数据?

+0

这是干什么用的?我只是想,如果你想从http req检索每次你可以添加当前时间戳作为querystring变量,这应该强制它再次下载。例如。 '' – 2012-02-21 09:11:34

+1

我想知道是否值得从CDN加载jQuery。拥有实际的数据而不是推测在其缓存中使用jQuery的用户的百分比会很好。 – 2012-02-21 09:13:49

+0

哦,我看到:)足够公平。 – 2012-02-21 09:15:05

回答

1

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

如果您想从客户的角度来了解多个地点的速度,请使用http://www.webpagetest.org/以及两个不同版本的网站(一个使用CDN,一个使用自己托管的静态位置)并比较加载速度。就个人而言,除非你有很多自定义的JavaScript代码,否则使用jQuery的CDN是有意义的,特别是因为很多网站使用Google Libraries API for jQuery。

-2

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

+0

这个答案没有附加数据。例如,现在我们将缩小的jQuery与其他Javascript绑定在一个文件中。拆分jQuery将涉及一个额外的HTTP请求。除非我知道有多少用户已经有缓存中的文件,否则我无法评估这种折衷。 – 2012-02-21 18:14:31

+0

无论如何,每个元素都会有额外的请求,最大的区别在于向同一台服务器或不同服务器发出请求。假设你有两个资源在同一台服务器上,你的服务器会得到2个请求,但它会一个接一个地服务。另一方面,如果您有两个资源来自不同的服务器,理想情况下,两个资源将同时投入使用,因此显示速度很快。 – Alfonso 2012-02-21 19:33:12

+0

这个答案做出错误的假设。将jQuery源码与其他脚本一起放到一个文件/请求中可能比提供两个请求更快,无论它们位于何处。 – David 2012-02-29 10:53:57

0

如果你愿意在页面中添加一些批量来测试这个,你可以为jQuery添加一个ajax请求到一个CDN,然后检查标题的304响应。如果你创建了第二个Ajax请求来回应你的服务器,告诉你是否缓存了jQuery,也就是说它是一个200还是304的响应。我没有尝试过,但它应该可以工作,但它会为用户增加一些额外的请求,但考虑到它们将是异步的,它可能不会有任何影响。

+0

Damnit发布后,我意识到这不会工作,除非你使用的CDN有访问控制标题,以允许跨域Ajax请求?是否有人知道任何CDN是否设置了“Access-Control-Allow-Origin”标头? – slashnick 2012-02-24 15:45:06

+1

不幸的是,在jQuery下载页面(Google,Microsoft和jQuery自己的)上列出的三个CDN都没有支持Access-Control-Allow-Origin标头。 – steveukx 2012-02-27 07:59:23

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>
+0

25ms的时间只是一个猜测,你不可能实际连接,请求并下载给定的文件在25ms以下,但是*应该*足以从本地加载/解析......你可能想要调整/测试一下。 – Tracker1 2012-02-28 19:51:40

1

如果您有登录CDN(我们似乎没有?),您可以更改测试运行的CDN网址,并在您的服务器上使用Pingback网址。在一段时间内,将ping回网址点击次数与您的CDN网址点击次数和唯一访问者数量进行比较。

您应该能够了解您获得的cdn网址上有多少独特点击率,以及您在页面上获得的独特点击率。差异应该是机器人,刮板和缓存或加载资源失败。机器人可以消除,刮板可能也是如此,所以你的年龄应该在足够长的时间内反射。

这会适合你吗?

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

+0

它可以工作,但我在考虑使用Google的CDN;我们将无法从中记录。 – 2012-03-01 02:37:05

+0

不,但测试会告诉您一般使用多少缓存,这对于了解多少使用来自Google的CDN可能会有同样的效果。除此之外,这是一个非常好的点 - 不知道你会怎么做,否则。 – MyStream 2012-03-01 12:39:51

1

如果不使用ajax,测试304(未修改)将会很困难。除非您在CDN上绕过相同的原产地政策,否则使用ajax将非常困难。

我假设你想测试脚本在客户端加载和变得可用的实际时间,并且想用CDN和本地的东西比较这些数据。如果是这样,测试实际时间而不是做一些缓存测试不是更好吗?

设置脚本加载的实际时间的A/B测试相当容易。

对于一个测试你可以做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> 

而且测试本地脚本合并或什么:

<script>var _time = new Date().getTime();</script> 
<script src="project.includingjquery.min.js"></script> 
<script>_time = new Date().getTime() - _time;</script> 

然后报告_time变量分析或使用ajax自己的数据库。如果B用户有较低的_time报告,您知道这是正确的路径...

相关问题