0

我正在使用 SquishIt 框架来处理捆绑和放大功能,以捆绑和缩小 js 和 css 文件。

我正在使用如下所述的代码:

<%= Bundle.JavaScript()
        .Add("~/js/jquery-1.4.2.js")
        .Add("~/js/jquery-ui-1.8.1.js")
        .Render("~/js/combined_#.js")
%>

如果我有一个网络服务器,上面的代码效果很好。我想知道在输出文件名中附加 _#" 是否会在 webfarm 中产生问题。如果它产生问题,那么解决问题的最佳解决方案是什么。

任何人都可以帮助我了解有关 webfarm 场景中问题发生的更多详细信息。

谢谢和问候, 桑托什·库马尔·帕特罗

4

1 回答 1

0

如果您没有在负载均衡器中启用粘性会话,这可能会产生问题。因为您在视图中呈现文件,所以它可以在服务器 1 上呈现,并且对资产的请求实际上最终被路由到服务器 2,该文件可能尚未创建。

在网络农场场景中,我认为最好在 Application_Start 上创建您的包,然后使用缓存/命名方法之一在您的视图中呈现。

因此,如果您想继续渲染到静态文件,则在 application_start (global.asax.cs) 或下游(我喜欢 SquishIt 的专用初始化程序)中会有类似的东西

Bundle.JavaScript()
    .Add("~/js/jquery-1.4.2.js")
    .Add("~/js/jquery-ui-1.8.1.js")
    .RenderNamed("bundleName", "~/js/combined_#.js") //2nd arg is used to resolve disk location

然后在您的视图中渲染:

<%= Bundle.JavaScript().RenderNamed("bundleName") %>

这将确保在服务器准备好响应请求时创建文件,代价是应用程序启动时间(确保您的应用程序池不会经常被回收!)。

资产控制器方法可能会更好,因为如果找不到捆绑包,它可以让您有机会恢复。你可以在这里阅读:https ://github.com/jetheredge/SquishIt/wiki/Using-SquishIt-programmatically-without-the-file-system

最后,使用 CDN 也可能是一个不错的选择。您可以在此处阅读(使用 Amazon S3 / Cloudfront,但这些想法适用于任何 CDN):http: //blogs.lessthandot.com/index.php/WebDev/ServerProgramming/making-squishit-work-with-亚马逊

于 2014-01-08T14:24:17.250 回答