【问题标题】:CDN script failover mechanismCDN 脚本故障转移机制
【发布时间】:2023-04-11 11:44:01
【问题描述】:

我在 MVC 应用程序中使用脚本包从 CDN 加载脚本,使用以下代码:

bundles.Add(new ScriptBundle("~/bundles/jqueryValidate", "//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js").Include("~/Scripts/jquery.validate.min.js"));

如果 CDN 失败,它应该从本地存储库(从项目内部)加载脚本。

我已添加:

bundles.UseCdn = true;

BundleTable.EnableOptimizations = true;

确保首先加载 CDN。

当我从我的网络(公共网络)尝试时,它工作得很好:脚本从 CDN 加载,没有任何问题。

如果我从客户的网络(公司网络)尝试,CDN 会被阻止并且不会加载替换脚本。我不明白为什么我设置的故障转移机制不起作用。

你知道为什么会这样吗?

【问题讨论】:

  • 当页面未加载时,您是否查看了它尝试加载的路径的源代码,并查看您是否可以直接浏览该路径?
  • 是的,来源是 CDN 路径。我将该源直接放在浏览器中,脚本没有加载。我收到一条错误消息:net:: ERR_CONNECTION_CLOSED。在这种情况下,故障转移机制不应该启用自身并从本地项目加载脚本吗?
  • 您使用什么代码进行故障转移检查?你读过asp.net/mvc/overview/performance/bundling-and-minification
  • 这段代码应该做故障转移:bundles.Add(new ScriptBundle("~/bundles/jqueryValidate", "//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1 /jquery.validate.min.js").Include("~/Scripts/jquery.validate.min.js"));
  • 使用 Include 对故障转移 AFAIK 一无所知 - 这只是在该捆绑包中包含额外脚本的方法。

标签: jquery asp.net-mvc cdn bundling-and-minification


【解决方案1】:

您使用的代码不是故障转移代码。如果您查看the docs for this,则明确指出如果您只是运行

bundles.Add(new ScriptBundle("~/bundles/jqueryValidate", "//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js").Include("~/Scripts/jquery.validate.min.js"));

CDN 将在生产中加载,Include 路径将在调试中加载。然后他们说

在发布模式下会从 CDN 请求 jQuery,并且 jQuery 的调试版本将在调试模式下在本地获取。什么时候 使用 CDN,您应该有一个回退机制以防 CDN 请求失败。以下标记片段来自末尾 如果 CDN 失败,布局文件显示添加到请求 jQuery 的脚本。

他们甚至给你一个示例代码

    <script type="text/javascript">
        if (typeof jQuery == 'undefined') {
            var e = document.createElement('script');
            e.src = '@Url.Content("~/Scripts/jquery-1.7.1.js")';
            e.type = 'text/javascript';
            document.getElementsByTagName("head")[0].appendChild(e);

        }
    </script> 

作为检查以确保 CND 已加载,如果不进行故障转移。

如果您在 .Net 4.5 上使用 MVC,请查看 CdnFallbackExpression 调用,让它为您自动生成、检查和回退。

您可能还会发现this blog from Scott Hanselman 也很有帮助。

【讨论】:

    猜你喜欢
    • 2011-10-27
    • 2020-03-14
    • 2018-09-22
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多