javascript - 我的网站应该如何优雅地处理偶尔丢失的 javascript 文件?

标签 javascript tags webserver webpage cdn

假设我的网站上有这个脚本标签(从 SO 借来的)。

<script type="text/javascript" async="" 
      src="http://edge.quantserve.com/quant.js"></script>

如果 edge.quantserve.com 出现故障或停止响应而不返回 404,那么在加载其余页面之前是否必须等待超时?我在想 Chaos Monkey 出现并破坏了我的站点所依赖的服务器,该服务器不属于 CDN 并且故障转移很差。

处理此问题的行业标准方法是什么?我找不到关于 SO 的骗局,也许我正在寻找错误的术语。

更新:我应该更仔细地查看 SO 代码,底部有这个:

<script type="text/javascript">var _gaq=_gaq||[];_gaq.push(['_setAccount','UA-5620270-1']);
        _gaq.push(['_setCustomVar', 2, 'accountid', '14882',2]); 
_gaq.push(['_trackPageview']);
    var _qevents = _qevents || [];
    (function(){
        var s=document.getElementsByTagName('script')[0];
        var ga=document.createElement('script');
        ga.type='text/javascript';
        ga.async=true;
        ga.src='http://www.google-analytics.com/ga.js';
        s.parentNode.insertBefore(ga,s);
        var sc=document.createElement('script');
        sc.type='text/javascript';
        sc.async=true;
        sc.src='http://edge.quantserve.com/quant.js'; 
        s.parentNode.insertBefore(sc,s);
    })();
    </script>

好的,如果 quant.js 文件加载失败,它会创建一个带有 ga.async=true; 的脚本标签。也许这就是诀窍。

可能的答案:https://stackoverflow.com/a/1834129/30946

最佳答案

一般来说,做好跨浏览器是很棘手的。

一些建议:

  1. 将脚本移到 HTML 页面的最底部(以便在您请求该脚本之前显示几乎所有内容)
  2. 将它移到底部并用<script>document.write("<scr"+"ipt src='http://example.org/script.js'></scr"+"ipt>")</script>包裹起来或您在更新后添加的方式 ( document.createElement('script') )
  3. 最后一个选项是通过 XHR 加载它(但这仅适用于同域,或仅当在第三方服务器上启用 CORS 时才适用于跨域);然后你可以使用 timeout XHR 的属性(对于 IE 和 Fx12+),在其他浏览器中,使用 setTimeout并检查 XHR 的 readyState .目前它有点复杂,而且非常不跨浏览器,因此选项 2 看起来最好。

关于javascript - 我的网站应该如何优雅地处理偶尔丢失的 javascript 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11749206/

相关文章:

c# - 如何使用 C# 获取 XML 文档的所有子标记名称?

php - 一个 PHP 文件可以处理多个请求吗?

user-interface - 在虚拟机上运行的Apache Airflow Web服务器生成的View UI界面

javascript - 无法将下拉列表与 Angular 列表绑定(bind)

HTML CSS 响应式段落标签

jquery - 当您处于 "tagging"模式时,如何初始化 jquery select2 项目?

javascript - ESP32 上的 Web 服务器 : How to update and display sensor values from the server automatically?

javascript - 如何防止 jquery 可调整大小的 div 接收调整大小点击事件

javascript - 从授权码google oauth2获取刷新 token

javascript - 为什么 Context 没有传递给我的 HOC