JavaScript压缩和缩小

3

我正在尝试了解JavaScript的最小化和压缩过程,并对此有几个问题:

  1. 由于最小化使代码难以调试,是否可以在客户端进行按需反最小化,以弥补实际需要在网站上调试和调查某些内容的情况?
  2. 我记得在某个地方读到过,可以通过在Apache Web服务器中设置某些选项来启用所有资源(如图像、CSS、JavaScript等)的压缩。在Apache级别上进行的JavaScript压缩和使用YUI Compressor之类的工具进行的压缩有什么区别吗?

有人能帮我解答以上问题吗?

我实际需要反最小化我的JavaScript文件的情况是这样的:假设发生了一个JavaScript错误,位于第X行。使用最小化文件将非常难以知道哪个代码块在生产中导致了该错误,因为行都被包装在一个最小化的文件中。在这种情况下,你们如何进行调查和调试?另一个用户也在Packed/minified javascript failing in IE6 - how to debug?问题中提到了这个调试问题(稍微特定于IE6)。

6个回答

9

你不应该调试压缩过的代码。理想情况下,开发流程如下:

  1. 在本地构建和调试网站。你拥有完整版本的JavaScript、样式表和所有其他文件。

  2. 将一个版本部署到生产机器上。你会压缩和gzip你的资源副本并将其推送到服务器。你的本地开发副本不会被更改。

  3. 如果在生产环境中出现错误,你需要修改本地版本,然后压缩、压缩并上传。

重复以上步骤直到获得收益。


@Sergei Tulentsev,我在上面的问题的编辑部分提供了有关我所指的调试的更多细节。你能否请看一下,并给我一些建议如何进行?谢谢。 - peakit
我会执行以下操作之一:1)在某个地方复制生产环境并尝试使用完整的JavaScript重现问题。2)将完整的JavaScript复制到生产环境中,并在登录时呈现它们(并为所有其他人继续使用缩小版本)。 - Sergio Tulentsev

5

如果您想调试生产代码(在尝试复制一个可能在开发环境中看不到的错误时很有用),Chrome Dev Tools可以对Javascript代码进行去混淆(和去压缩)操作。

输入图像说明 输入图像说明


3
通常开发人员会使用未压缩的脚本文件进行开发,在部署之前再进行压缩。
如果您需要返回并调试脚本文件,只需打开常规的未压缩文件,进行工作,然后压缩并部署。如果您是指在您的网站处于生产状态时调试某些内容,那么不能按需取消最小化处理的脚本文件。
是的,Apache甚至IIS也可以自动为您压缩脚本和图像。

我喜欢现代的Rails如何处理资产。它会对它们进行gzip压缩和时间戳标记。在生产环境中不再需要消耗CPU。此外,它还具有缓存友好性。 - Sergio Tulentsev
在另一个生命中,我认为我是一个RoR开发者... 在这个生命中,它是MVC,基本上是带有C#的Rails... 可能还不错... :) - Adam Rackis
@Adam,可以看看'OriginalSyn'的一个回答,似乎Chrome可以帮助你部分反混淆JavaScript文件。 - peakit
@peakit - 看起来Chrome正在重新格式化代码,使其看起来更漂亮 - 我不认为它会恢复变量和函数的原始名称,这才是您真正需要做任何有用的事情。 - Adam Rackis
是的,@Adam,我理解这一点,这就是为什么我在之前的评论中说这是通过Chrome进行的部分反混淆。 - peakit

2
由于代码经过缩小处理后难以进行调试,那么是否可以在客户端进行按需解压缩操作,以应对需要在网站上调试和研究的情况呢?有点类似。缩小后的javascript具有相同的结构,只是删除了额外的空格并缩短了变量名称等。因此,您可以轻松地使代码可读,无论是手动还是使用脚本,但是您无法恢复变量名称,因此代码仍然很难处理。因此,如果您有原始代码,请务必不要将其丢弃。将缩小的代码单独保存。
我记得在某个地方读到可以通过设置Apache Web服务器中的某些选项来启用所有资源(如图像、CSS、JavaScript等)的压缩。是的,这称为gzip压缩。它不是Apache所特有的,但您需要配置服务器才能启用它。
Apache级别和使用YUI Compressor等工具进行的javascript压缩是否有区别?是的。YUI压缩器是一种缩小器-输出是有效的javascript。服务器端压缩更类似于压缩文件-浏览器必须在使用之前对其进行解码。同时使用两者可以得到最小的文件大小。

你回答了我所有的问题,因此我接受这个作为“唯一”的答案。谢谢! - peakit

1
  1. 我更喜欢使用本地未压缩的 JS 文件,并在部署网站时将所有 JS 文件压缩成一个文件。这样很容易调试和改进代码。但是,有一些工具可以还原压缩。请查看这个SO post,了解如何还原 JavaScript 的压缩。
  2. 请查看 GZIP 压缩 - 此博客描述了如何在 Apache 中启用 GZIP 压缩以及如何验证您的服务器实际上正在压缩文件。

1

客户端是否可以按需进行反混淆?

一些浏览器具有“漂亮的代码”视图,可以自动格式化源代码。请参见Firebug的CSS选项卡。

在Apache级别执行的javascript压缩和使用YUI Compressor等工具执行的压缩是否有区别?

YIU Compressor实际上是一个缩小器。Apache压缩类似于在将文件发送到客户端之前将其ZIP压缩,因此发送的实际文件比磁盘上的文件要小。它们是两种相互独立的不同技术。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接