【问题标题】:Is it bad to use two CDNs for a Javascript library?将两个 CDN 用于 Javascript 库是不是很糟糕?
【发布时间】:2013-02-05 10:06:43
【问题描述】:

客户的网站依赖于 jquerytools.org CDN,该 CDN 目前无法正常工作,因此他的网站已损坏(忽略优雅的 Javascript 降级)。他可以在本地托管相关文件,但是他没有获得 CDN 的优势。为了冗余而在两个独立的 CDN 上引用表面上相同的 Javascript 文件有多糟糕?

<script src="http://cdn.jquerytools.org/1.2.7/full/jquery.tools.min.js"></script>
<script src="http://jquerytools.flowplayer.netdna-cdn.com/1.2.6/all/jquery.tools.min.js"></script>

【问题讨论】:

    标签: javascript cdn redundancy


    【解决方案1】:

    您应该在加载第二个脚本之前检查第一个 CDN 是否实际交付了 jQuery:

    <script src="http://cdn.jquerytools.org/1.2.7/full/jquery.tools.min.js"></script>
    <script type="text/javascript">
    if (typeof jQuery.tools === 'undefined') {
        document.write('<script src="http://jquerytools.flowplayer.netdna-cdn.com/1.2.6/all/jquery.tools.min.js"><\/script>');
    }
    </script>
    

    【讨论】:

    • 别忘了转义&lt;/script&gt;
    • 谢谢。所有的答案都是相似的,但我喜欢这个明确的if。另外,你第一个回答!
    【解决方案2】:

    您可以使用http://html5boilerplate.com 中的方法轻松安全地做到这一点:

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.9.1.min.js"><\/script>')</script>
    

    这基本上测试了 jQuery 对象,如果它不存在,则尝试从备用源中包含它。只需将 URL 和对象测试更改为您的备用 CDN 并测试 jQuery 工具库。

    这个答案:Testing if jQueryTools has loaded 应该可以帮助您测试 jQuery 工具,但是为了节省您的点击,以下(未经测试)应该这样做:

    <script type="text/javascript" src="http://cdn.jquerytools.org/1.2.7/full/jquery.tools.min.js"></script>
    <script>window.jQuery.fn.tabs || document.write('<script src="http://jquerytools.flowplayer.netdna-cdn.com/1.2.6/all/jquery.tools.min.js"><\/script>')</script>
    

    【讨论】:

      【解决方案3】:

      我不会同时加载它们。我们对 jquery 执行以下操作:

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

      仅加载本地版本,如果 CDN 版本加载失败。我不确定这是否是最佳做法,但它对我们有用。当然,您需要找到一种方法来识别是否已加载 jquery-tools。如果它稍后被初始化,(DomReady)或类似的东西,这将不起作用。

      【讨论】:

        猜你喜欢
        • 2011-10-06
        • 2020-01-29
        • 1970-01-01
        • 2011-09-20
        • 2010-12-09
        • 2010-12-16
        • 1970-01-01
        • 2010-10-30
        • 1970-01-01
        相关资源
        最近更新 更多