【问题标题】:How to check if jQuery is already in cache?如何检查 jQuery 是否已经在缓存中?
【发布时间】:2016-03-29 21:04:13
【问题描述】:

如果之前从 CDN 加载了 jQuery,是否可以检查客户端?我的意思是有这样的代码:

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

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

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

【问题讨论】:

    标签: jquery caching


    【解决方案1】:

    据我所知,这是不可能的。 然而,有两件事可以帮助你:

    1. 使用Etags:在网络服务器端识别您的资源。这样一来,您的浏览器就会为您完成这项工作:识别资源是否已经加载,无论它是从哪个域加载的
    2. 如果您真的想知道 jQuery 是从哪个域加载的,您可以执行虚拟 AJAX 请求。您只能从加载库的同一域执行 AJAX 请求(当然,执行 JSONP 请求时除外)。因此,如果您的 jQuery 是从您的 LAN 资源加载的,您将获得对 LAN 网络服务器的 AJAX 请求的 trplies,这就排除了 CDN。

    希望对你有帮助,

    巴特

    【讨论】:

      【解决方案2】:

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

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

      在 CDN 和 LAN 之间拆分 jQuery 的 URL 只会导致两个副本被缓存。让浏览器缓存做它应该做的事情。 :)

      【讨论】:

        【解决方案3】:

        应该这样做:

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

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

        【讨论】:

        • @lonesomeday:刚刚解决了这个问题,我从旧的来源复制了这些行。
        • @jAndy unescape 已弃用!你能推荐一个更好的选择吗?
        猜你喜欢
        • 2011-10-29
        • 2019-02-05
        • 2016-12-04
        • 1970-01-01
        • 1970-01-01
        • 2013-06-27
        • 2019-08-21
        • 2019-03-19
        相关资源
        最近更新 更多