【问题标题】:Detecting if the JQuery CDN is down and coping with it检测 JQuery CDN 是否关闭并应对
【发布时间】:2011-12-11 21:30:09
【问题描述】:

我明天将推出自己的网站,预计会有几百次访问。

我根据 PHP.net 告诉我的内容编写了这个脚本:

<?
$f = fsockopen("code.jquery.com", 80, $errno, $errstr, 30); 
if(!$f){
echo '<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js" type="text/javascript"></script>'; }
else {
echo '<script src="http://code.jquery.com/jquery-1.6.4.min.js" type="text/javascript"></script>'; }
?>

基本上,如果 code.jquery.com 的 CDN 出现故障(就像大约 20 分钟前一样),那么 Google API 库就会启动。我在 jQuery 启动时尝试过它,它可以工作,但只是万一它再次出现故障,这个脚本真的可以工作吗? (通过切换到 Google 的库)我无法真正测试它,我必须让 code.jquery.com 离线。哈哈。

我会替换 CSS,但我的整个网站都是基于 jQuery 和 Ajax,所以我真的需要它在任何时候都能正常运行。我会在我自己的网站上托管它,但是当我的网站运行良好时,它们的速度不如 code.jquery.com 或 googleapis.com。

非常感谢!任何回复都非常感谢:)

【问题讨论】:

  • 为什么不专门链接到 googleapis.com? https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js 应该永远存在。
  • 为什么更喜欢 code.jquery.com 而不是 google?看来 google 会是你的首选。
  • H@BNL 哈哈,个人喜好,我倾向于记住 code.jquery.com 网址,我一直忘记它的 Google 网址:\ 感谢您的评论,永远不会少 :) @ mblase75 同样的原因 ^^ :P 虽然在阅读了你的 cmets 之后,我还不如在这种情况下把谷歌放在首位

标签: php javascript jquery web downtime


【解决方案1】:

你为什么要做这个服务器端?在客户端完成此操作会更有意义:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="http://code.jquery.com/jquery-1.6.4.min.js">\x3C/script>')</script>

首先尝试从 google 加载库。如果它加载,那么window.jQuery 将可用。如果没有,那么它会尝试从 code.jquery.com 加载。如果两者都没有加载,您甚至可以在这两个之后再添加一个以加载本地版本:

<script>window.jQuery || document.write('<script src="my/js/jquery-1.6.4.min.js">\x3C/script>')</script>

【讨论】:

  • +1 实现+1 :P 以及感谢您的回答!我没有意识到这在 JS 中是可能的!感谢您的回答! :)
  • 您好,我遇到了这个问题。 code.jquery.com 现在似乎很慢,这个脚本等待很长时间(> 20 秒!),然后才回退到本地版本。有没有办法设置阈值时间,在此之后“外部”请求被丢弃?在我看来,如果 3 秒后没有答案,cdns 就不值得了……
  • @Vincent Pazeller 您可以尝试使用 setTimeout 并检查 jQuery 全局是否可用。看看这里:stackoverflow.com/a/2021325/844726
【解决方案2】:

或者您可以使用基本的 html 来做到这一点:

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

【讨论】:

  • 我不明白这个。请你解释一下?
  • 如果 jQuery 已成功加载,window.jQuery 将评估为 true,否则写入文档以从辅助源加载它。
【解决方案3】:

这对你没有多大好处。将 fetch 放入每个请求中会大大减慢速度。此外,如果您有上游缓存,则无论如何都不会反映更改。

我会选择一个完全 javascript 的解决方案:尝试加载一个,如果它不起作用,请尝试另一个。

【讨论】:

  • 不仅如此,仅仅因为自己的服务器可以/不能到达另一台服务器,这并不能告诉你客户端是否可以到达服务器。
  • 直到大约一分钟前,我才知道这在 JavaScript 中是可能的!哈哈,我刚刚从另一个人的回答中意识到,通过在第一次获取后立即测试 jQuery 效果很好!感谢您的回答!
【解决方案4】:

我相信这可以正常工作,但这会增加对服务器的每个请求的大量开销。

用 JavaScript 做客户端,

<script src=http://code.jquery.com/jquery-1.6.4.min.js"></script>
 <script>window.jQuery || document.write('<script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js">\x3C/script>')</script>

【讨论】:

    【解决方案5】:

    您可以测试(在本地/测试服务器上),只需将 code.jquery.com 的条目放入您的主机文件(Linux 上的 /etc/hosts,Windows 上的 windows\system32\drivers\etc\hosts)指向例如,在您的网络上未使用的本地 IP。系统将暂时将其视为 code-jquery.com 的 DNS,并且不会从那里得到响应。

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      相关资源
      最近更新 更多