c# - 在 .net 中缩小和合并文件

标签 c# javascript css minify

我正在考虑围绕我的 javascript/css 实现一些性能优化。特别是希望实现此类的缩小和组合。我正在开发 .net/c# 网络应用程序。

我有几个选项,并正在寻找对每个选项的反馈:

第一个是我遇到的 Chirpy 这个聪明的工具,它通过 visual studio 组合、缩小等 -> http://chirpy.codeplex.com/这是一个 visual studio 插件,但由于我在团队环境中,所以这个工具并不理想。

我的下一个选择是使用 Msbuild 任务 ( http://yuicompressor.codeplex.com/ ) 来缩小文件并合并它们(可能从 xml 文件中读取需要合并的内容)。虽然这有助于缩小精细度,但我担心的是我将不得不维护必须合并的内容,这可能会让人头疼。

第三个选项是仅使用 msbuild 任务进行缩小,并在运行时使用一些辅助类,按页面合并文件。这将合并文件,为其命名并为其添加版本。

我可以考虑其他选择吗?我对最后一个选项的担心是它可能有性能问题,因为我必须从本地驱动器打开文件,读取其内容,然后合并文件。这是运行时的大量处理。我在看类似 Squishit 的东西 - https://github.com/jetheredge/SquishIt/downloads这会在运行时缩小文件,但我会考虑在编译时执行此操作。

那么对我的方法的任何反馈都会很好吗?如果第三个选项不会导致性能问题,我会朝着它迈进。

最佳答案

我们已经对几个 ASP.NET 网络应用程序做了类似的事情。具体来说,我们使用 Yahoo Yui compressor ,它有一个 .NET 库版本,您可以在您的应用程序中引用它。

我们采用的方法是在运行时生成必要的合并/缩小文件。我们将所有这些逻辑包装到一个 ASP.NET 控件中,但这不是必需的,具体取决于您的元素。

  • 第一次请求页面时,我们会处理包含的 JS 和 CSS 文件列表。在一个单独的线程中(因此原始请求会立即返回),然后我们将包含的文件合并在一起(1 个用于 JS,1 个用于 CSS),然后应用 Yui 压缩器。
  • 然后将结果写入磁盘以供将来快速引用
  • 在后续请求中,页面首先查找缩小版本。如果找到,它只会提供这些服务。如果没有,它会再次经历这个过程。

锦上添花:

  • 出于调试目的,如果查询字符串 ?debug=true 存在,合并/缩小的资源将被忽​​略,而是提供原始的单个文件(因为调试优化的 JS 可能很困难)

我们发现这个过程非常有效。我们将它构建到一个库中,以便我们所有的 ASP.NET 站点都可以利用它。如果每个页面都有不同的依赖关系,构建后脚本可能会变得复杂,但运行时可以很容易地确定这一点。而且,如果有人需要快速修复 CSS 文件,他们可以这样做,删除文件的合并版本,该过程将自动重新开始,无需使用 MSBuild 或 NAnt 进行构建后处理。

关于c# - 在 .net 中缩小和合并文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4338570/

相关文章:

c# - XAML 和 C# 代码背后的 UI 区别

c# - 在 Awesomium 中打印到打印机?

javascript - 为什么 Angular 区分 `<my-element></my-element>` 和 `<my-element/>` ?

javascript - 使用 Protractor 调试时,元素找不到 DOM 节点时,如何获取使用的原始选择器?

c# - 在 ASP.NET 上使用服务器发送的事件时如何检测断开连接?

c# - Linq 计数与 IList 计数

javascript - 如何在 jQuery 中看到目标 div 时突出显示 anchor 链接?

html - 将具有较低特异性的 CSS 规则应用于 HTML 元素,覆盖最具体的规则

html - 修复了 div 重叠的内容?

css - 如何使灰度和过渡效果在 firefox 和 ie 中工作?