8

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

我根据 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 那样快。

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

4

5 回答 5

24

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

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

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

<script>window.jQuery || document.write('<script src="my/js/jquery-1.6.4.min.js">\x3C/script>')</script>
于 2011-10-20T15:23:26.900 回答
11

或者你可以用基本的 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>
于 2011-10-20T15:21:39.703 回答
5

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

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

于 2011-10-20T15:22:29.937 回答
2

我相信这可以正常工作,但这会给您的服务器发出的每个请求增加很多开销。

用 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>
于 2011-10-20T15:25:39.830 回答
0

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

于 2013-05-14T06:18:09.987 回答