将两个CDN用于Javascript库是不是很糟糕?

时间:2013-02-05 10:06:43

标签: javascript cdn redundancy

客户的网站取决于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>

3 个答案:

答案 0 :(得分:5)

在加载第二个脚本之前,您应该检查第一个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>

答案 1 :(得分:3)

您可以使用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>

答案 2 :(得分:2)

我不会同时加载它们。我们对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)或类似的东西,这将无效。