【问题标题】:How to minify different javascript files at runtime using Java如何在运行时使用 Java 缩小不同的 javascript 文件
【发布时间】:2011-08-15 23:17:24
【问题描述】:

我正在尝试构建(或找到一个我可以使用的现有过滤器)一个将在运行时压缩 JavaScript 文件的网络过滤器。我尝试过基于 YUICompressor 构建一个,但是当我尝试将基于字符串的源而不是实际文件传递给它时,我得到了奇怪的错误。

现在我预计会收到诸如“实时压缩/缩小是一个坏主意”之类的响应轰炸,但我不想在构建时这样做是有原因的。

我有一个 JavaScript Web 应用程序,它可以延迟加载它是 JavaScript。它只会加载它实际需要的东西。 JavaScript 文件可以指定依赖项,我已经有一个过滤器,它将连接请求的文件和任何尚未加载到单个响应中的依赖项。这意味着将发送给用户的 JavaScript 中有大量不同的组合,这使得尝试在构建时构建所有包变得不切实际。

所以重申一下。理想情况下,我正在寻找一个现有的实时 javascript 过滤器,我可以将其插入我的应用程序中。

如果不存在,我正在寻找可以用作构建块的提示。 YUICompressor 并没有完全让我到达那里,而且 GoogleClosure 似乎只是一个 Web API。

干杯, 彼得

【问题讨论】:

  • 原来 yui 的 2.4.2 版本有一些问题。退回到 2.3.6 并立即开始工作......
  • 为什么不先压缩每个js,然后在运行时拼接你需要的?
  • 所以肯定可以做到,可以使用YUICompressor。 Demian 和 WaiLim 正确地指出,在我连接之前进行缩小可以完成这项工作。我只是没有正确的头脑去想它。我将在构建时进行压缩。
  • 仅供参考 -- Closure 也有一个 Java API。实际上它是用 Java 编写的。
  • 试试 wro4j:alexo.github.com/wro4j。这可以帮助您从数十种压缩器中进行选择,并简化资源的管理方式。

标签: java javascript filter compression minify


【解决方案1】:

看看 Douglas Crockford 的 The JavaScript Minifier。来源在这里:JSMin.java。它不是过滤器,仅包含要缩小的代码。我们已经把它变成了一个过滤器,我们也可以在其中动态组合和缩小 JavaScript。它运行良好,特别是如果您有浏览器和 CDN 缓存结果。

更新:我忘了我们也将它们缓存在服务器上。仅当进行组合和缩小输出所需的任何资产发生更改时,它们才会重新生成。基本上,我们不是在构建时“编译”它们,而是在运行时处理每个组合。

【讨论】:

  • 德米安有点道理。我正在努力保持尝试实时执行此操作的理由。您为什么选择采用这种方式而不是在构建时进行压缩?
  • 我更新了关于我们如何在服务器端缓存的说明。我们只在需要时动态生成它们,而不是担心它是一个构建步骤。在许多情况下,只在构建时执行它是有意义的,由于许多其他复杂性,我们的这种方式更容易。您确实要求在 Java 运行时提供缩小解决方案,我只是说它可以工作:)
  • JSMin 只对空白进行规范化,它实际上并没有做更多的聪明事,比如用较短的符号替换长符号等。
【解决方案2】:

我已经有一个过滤器可以 连接请求的文件和 任何尚未加载的依赖项 单个响应

Sooo.. 为什么不在加载/连接它们之前缩小它们?

(是的,动态压缩非常昂贵,绝对不值得为 每个 .js 文件服务)

【讨论】:

  • 你所说的有一定的逻辑性。我确实喜欢能够轻松调试已发布代码的想法。我可以通过并排压缩和未压缩文件来实现这一点。
猜你喜欢
  • 1970-01-01
  • 2012-12-07
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多