在 .NET 环境中优雅地缩小动态生成的 javascript? [关闭]

Posted

技术标签:

【中文标题】在 .NET 环境中优雅地缩小动态生成的 javascript? [关闭]【英文标题】:Elegantly minify dynamically generated javascript in a .NET environment? [closed] 【发布时间】:2012-01-23 22:07:45 【问题描述】:

我正在通过 .NET Web 应用程序以编程方式创建 javascript 文件,并希望在将其传递给客户端之前对其进行缩小。有没有一种有效的技术来做到这一点?

【问题讨论】:

hanselman.com/blog/… 【参考方案1】:

如果您只是希望能够在将 C# 中的 javascript 字符串保存到文件之前将其缩小,我会使用 MS Ajax Minifier 或 YUI compressor for .net。这两个都公开了一个允许您执行此操作的 API。下面是一个使用 ajax minifier 的示例:

var minifier = new Microsoft.Ajax.Utilities.Minifier();
var minifiedString = minifier.MinifyJavaScript(unMinifiedString);

为 .net 使用 YUI 压缩器:

var minifiedString = JavaScriptCompressor.Compress(unMinifiedString);

ajax minifier 和 YUI Compressor 库都可以通过 Nuget 获得。

【讨论】:

谢谢马特-太完美了,正是我想要的。 如果有人想知道为了使用Microsoft.Ajax.Utilities.Minifier而需要添加的DLL引用,MSI默认安装到C:\Program Files (x86)\MSBuild\Microsoft\MicrosoftAjax 现在是 2016 年,但我在尝试找到一个 .net 库来压缩包含 javascript 代码的字符串时仍然回到这个问题上。我比较了 YUI Compressor 和 MS Ajax Minifier 的输出,MS 库不仅似乎压缩得更小(例如用逻辑语句替换 'if' 语句),而且 YUI Compressor 实际上对我来说失败了尝试压缩包含 jquery 2.2.3 库等内容的脚本。我只是使用了或多或少的默认设置,所以可能是用户错误。 最后一个链接(YUI)改为:github.com/YUICompressor-NET/YUICompressor.NET 万一有人来到这个线程,Microsoft Ajax 缩小器将结束生命。该项目已分叉,目前在此处支持:github.com/madskristensen/BundlerMinifier【参考方案2】:

您可以使用Closure Compiler,但我不建议您在每次用户访问您的网站时都缩小文件。在部署新提交之前构建所有文件要好得多。看看this article about tools。

【讨论】:

感谢 Elisue - 我正在为用户生成一个 脚本文件。只是想在部署之前缩小那个文件。感谢您的建议。 很多时候这样的方法会很好 - 例如,如果页面是 MVC Action,输出缓存可用于降低整页呈现的频率,同时仍允许配置和其他运行时动态行为。【参考方案3】:

我手动使用这个。

http://dean.edwards.name/packer/

我压缩文件,上传,然后撤消包,这样我的源代码就完好无损。我只打包生产代码。

【讨论】:

谢谢 Chris- 我一直在寻找自动化解决方案,但看起来很有趣。在我的链接列表上。【参考方案4】:

好吧,我认为您需要做三件事来缩小脚本文件:

    缩短长变量 删除 cmets 删除不必要的空格(制表符、空格、回车)

在运行时替换这些都相对简单,但需要编写一些代码。对于变量缩短,请在其范围内找到长度超过 2 个字母的类似变量。然后缩写并在代码块(变量的范围)中跟进。

删除 cmets 很简单。删除空格也很容易。对于单行,找到// 并删除直到回车/换行。空格,用空格替换制表符,用空格替换多个空格,用空格替换回车/换行符。

【讨论】:

感谢 Shark,但我不是那么有才华,而且我没有那么多时间... :) 我正在寻找一个库或 dll,其中有人已经完成了这项工作。也许你可以做一个??? PLZ?【参考方案5】:

我们使用JSMIN的C#端口:http://www.koders.com/csharp/fidC8F76D32D2FB3B213046C30CD8B362820FFFD604.aspx?s=file#L15

效果很好。

【讨论】:

谢谢 Mike- 我看了看,看起来不错。我不确定 javascript 发生了多少变化,但它看起来有点过时了。不知道你最近有没有用过……【参考方案6】:

为什么不在 .NET 中直接使用 javascript 编写的压缩器(如果它可以作为 JScript 代码使用,请尝试一下)。想到了 Uglify.js...

【讨论】:

以上是关于在 .NET 环境中优雅地缩小动态生成的 javascript? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Validation 优雅地进行参数校验

macOS 下优雅地配置 PHP 代码审计环境

没用 Java 8,怎么优雅地避免空指针?

在容器环境中优雅地停止 Logback

如何优雅地用Redis实现分布式锁?

如何优雅地用Redis实现分布式锁