盒式磁带包与 MVC4 包
Posted
技术标签:
【中文标题】盒式磁带包与 MVC4 包【英文标题】:Cassette bundles vs MVC4 bundles 【发布时间】:2012-03-13 01:32:07 【问题描述】:我目前正在开发一个原型 ASP.NET MVC 3 解决方案,该解决方案将用作多个项目重写(来自 Web 表单)的基础。
我的目标之一是跨应用程序实现一些脚本管理,而我们目前没有。
MVC 3 恕我直言:如果您需要在局部视图或模板视图上指定特定脚本 - 您最终可能会失去对脚本块在呈现的 html 中的位置的控制,或者不得不在父视图上指定每个依赖的 javascript 文件。
我一直在认真考虑使用http://getcassette.net/ 作为解决所描述问题的框架。然而,MVC4 beta 的最新版本让我再次怀疑自己:MVC 的 Bundles 看起来与 Cassette 的 Bundles 非常相似,我再次感到困惑:
我应该现在实施盒式磁带而不是迁移到 MVC4 捆绑包吗?
我是否应该自己实现一些简化的脚本管理器(比如 MVC4 预览版中的 Scripts 助手类),然后迁移到 MVC4
1234563 /p>我没有使用 Cassette 本身的经验,我发现自己很难进行比较,希望得到任何答案或提示。
编辑: 我只是认为还有另一种选择:为 MVC 捆绑安装 beta nuget 包:https://nuget.org/packages/Microsoft.Web.Optimization
结论: 我对 MVC4 捆绑包实现的研究越多,我注意到的差异就越大:MVC4 捆绑包没有解决上述 MVC3 问题——它们只是进行捆绑和缩小。此外,盒式磁带不仅能够在特定位置呈现脚本标签,它还能够以正确的顺序对它们进行排序,这不是微不足道的。 因此,目前我对这两种解决方案都不满意,我会尝试提出自己的简约实现,希望将来这种情况会有所改善。
但是,如果您不害怕在您的项目中添加 5+ 依赖项和大量 web.config 更改 - 那就选择盒式磁带。我希望它会在某个时候更新,以利用内部的 MVC 捆绑来减少功能重复,并希望它变得更加模块化。
更新: 从 Cassette 2.0 版开始,如果您只需要 bundle 和 js 依赖解析,则不再需要包含咖啡脚本和 Cassette 的其他功能。所以在这一点上,Cassette 对我来说是一个明显的赢家。
【问题讨论】:
感谢您的所有更新,仅此问题就有很大帮助! :) 是的,感谢您的更新,这比答案更有帮助,因为它包含了实际经验。 【参考方案1】:有关 ASP.NET MVC 捆绑的信息在这里:http://weblogs.asp.net/scottgu/archive/2011/11/27/new-bundling-and-minification-support-asp-net-4-5-series.aspx。
ASP.NET 正在添加一项功能,可以轻松“捆绑”或 将多个 CSS 和 JavaScript 文件“组合”成更少的 HTTP 请求。 这会导致浏览器请求更少的文件,进而 减少获取它们所需的时间。
ASP.NET 的下一个版本还添加了一项新功能,使其 也很容易减少或“缩小”内容的下载大小。
看起来它与 Cassette 本质上是一样的。在所有其他条件相同的情况下,使用 ASP.NET MVC 原生的解决方案。
【讨论】:
谢谢,我之前读过这个博客,对于我作为任何一个库的新用户来说,它看起来都一样,我想知道磁带中可能有一些不太明显/不明显的功能/使用模式当前的 MVC 包实现中不存在。 Cassette 在缓存和缩小方面似乎更激进一些,但如果你不需要前沿...... 好吧,在这一点上,一切都是为了评估从卡式磁带切换到默认 MVC4 实现的风险(我非常有信心,一旦它可用,我们就会将我们的项目迁移到它)。 对 Cassette 知之甚少,它似乎与 MVC4 的本机捆绑/压缩相比唯一真正的功能是能够解析指定脚本/工作表之间的分辨率。它现在除了捆绑之外还有更多功能,比如将 HTML 模板压缩到 JS 代码中。看起来不错的框架,但比 MVC4 + dotLess 重很多 我喜欢 bundletransformer.codeplex.com,因为它建立在 MVC4 的捆绑支持之上。【参考方案2】:我最终在我的上一个项目中使用了 Cassette,它运行良好。如果你使用 NuGet,它确实没有太多的配置,所以我的想法是现在使用 Cassette 并如果你想稍后再切换不会太难。
要考虑的另一件事是,Cassette 进行了较少的编译。我不确定 MVC4 捆绑是否这样做,因为我没有时间阅读它。
【讨论】:
AFAIK 它没有,但是 dotless 是非常孤立的 nuget 包。从这个意义上说,磁带在 MVC4 环境中仍然比 dotless 重得多。【参考方案3】:Cassette 仍然是一个有趣的替代方案,因为它具有对 less 和 coffescript 的原生支持。如果您对客户端 mvc 框架(骨干网、淘汰赛等)感兴趣,它还支持 HTML 模板
【讨论】:
我现在不喜欢盒式磁带的地方(除非我遗漏了什么)是缺乏功能可配置性:我们不需要咖啡脚本支持。 dotLESS 实现很好 - 虽然它仍然是可选的。至于模板——我没有看到盒式磁带有什么好处——看起来与 PartialViews 没有太大区别.. 我认为现在通过 Nuget 的 LESS、SASS 和 CoffeeSscript 都是独立的插件:getcassette.net【参考方案4】:作为对此的更新,在 Visual Studio 2012 的 Update 2 包中添加了 LESS 和 CoffeeScript 支持,因此它开始看起来越来越像是将所需的转换添加到Bundling/Minification 支持 MVC4,而不是长期使用 Cassette。
【讨论】:
我是否正确地说仍然没有“内置”支持在部分中注册脚本要求? (例如,有多个部分声明他们需要引用 fancybox.js 并让框架处理一次且仅在需要时才包含它)。 @JamesMorcom 你现在知道更多了吗?我自己还在想这个。如果 ASP.NET 可以为页面全局解析一次脚本依赖关系,那就太好了。以上是关于盒式磁带包与 MVC4 包的主要内容,如果未能解决你的问题,请参考以下文章