如何检查jQuery是否已经在缓存中?

时间:2011-01-04 09:44:09

标签: jquery caching

无论如何检查客户端是否从CDN加载jQuery?我的意思是要有这样的代码:

if (jQuery.isLoadedFromCDN)
//DoNothing
else
//load from internal resource

请注意,我不想检查jQuery是否已加载,但特别是如果它是从CDN加载的。

上下文是我有一个使用jQuery的内部局域网w​​eb应用程序,从局域网加载jQuery肯定更快但如果它之前已经从CDN下载(可能就是这种情况)那么我只是想使用它否则我想从我们的内部资源而不是cdn获取它。带宽节省绝对不是很大,但我更想知道这是否在技术上可行。

3 个答案:

答案 0 :(得分:3)

我猜你正在检查是否从Google Libraries API加载了jQuery?

您的浏览器将缓存jQuery,无论是来自CDN还是来自您的LAN。如果它已经从之前从CDN中检索到的缓存中,它的加载速度将快于LAN。如果以前访问您网站或使用相同CDN的其他网站尚未在您的缓存中,则只需加载一次:后续访问将从缓存中加载。

在CDN和LAN之间拆分jQuery的URL只会导致两个副本被缓存。让浏览器缓存执行它的目的。 :)

答案 1 :(得分:1)

这应该这样做:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"></script>
<script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-1.4.4.js"%3E%3C/script%3E'))</script>

您需要调整后备路径,该路径应位于您的域中。

答案 2 :(得分:0)

据我所知,这不太可能。 但有两件事情可以帮助你:

  1. 使用Etags:在网络服务器端识别您的资源。通过这种方式,您的浏览器可以帮助您:确定资源是否已加载,无论是从何处加载资源
  2. 如果您真的想知道从哪个域加载jQuery,您可以执行虚拟AJAX请求。您只能从加载库的同一域中执行AJAX请求(执行JSONP请求时除外)。因此,如果您的jQuery是从LAN资源加载的,那么您将获得对您的LAN网络服务器的AJAX请求,并排除了CDN。
  3. 希望它有所帮助,

    巴特