如何实时压缩javascript?

时间:2010-02-24 10:35:43

标签: javascript compression

我想知道是否有办法实时压缩javascript,就像gzip适用于HTML(显然是CSS)一样?

我不想在每次上传之前手动压缩我的文件,我希望服务器为我做这件事而不需要懒惰编码器的任何额外工作。

4 个答案:

答案 0 :(得分:3)

gzip适用于所有文本,包括JavaScript

如果你想进行更多压缩(例如在gzipping之前使用YUI压缩器),那么你可以让你的服务器去做,但在上传之前这样做会更容易。

诀窍是自动化构建和发布过程 - 所以你运行一个执行压缩然后上传结果的脚本,而不是手动或类似地拖动文件。

答案 1 :(得分:2)

我建议您编写一个自动上传文件的小脚本;然后你可以在上传前压缩它。

另一种选择是告诉您的Web服务器在传输之前压缩文件(但它应该自动执行)。

另一个选项是服务器上的cron作业(请参阅cron(1)或Windows调度程序),它定期检查文件(例如每天一次),并在上载新版本时对其进行压缩。

答案 2 :(得分:2)

在Apache上,这会压缩除图像之外的所有内容:

<IfModule mod_deflate.c>

# Insert filter
SetOutputFilter DEFLATE

# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won't work. You can use the following
# workaround to get the desired effect:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary

# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</IfModule>

答案 3 :(得分:2)

如果您的意思是“压缩”,如“以完全相同的格式维护代码,但将其按下管道压缩”,则根据服务器的说明启用gzip压缩,您未在标签中指定/问题。

如果您的意思是“压缩”,如“minify the code”,则可以尝试选项,例如在管道中包含缩小模块/流程。我最近在ASP.net中创建了一个解决方案,它使用Microsoft Ajax Minifier 4.0来简化所请求的javascript文件,动态基本上是通过向src标签添加脚本标签这类似于minifier.ashx?source = my / javascript / file /和/ path / here.js,并使用AjaxMin.dll中的Minifier类来按需缩小代码。与预缩小相比,这有几个优点:

  1. 您可以通过Cookie,查询字符串值,给定用户名将标记传递到 live 网站,以禁用缩小功能,如果您需要解决问题,可以使调试更容易一些“在现场“
  2. 您可以对您的实时代码进行紧急更改,而无需更改未经编辑的代码,缩小代码,上传代码(显然不是您应该定期执行的操作,但如果需要,可以使用该功能)。
  3. 有一组较少的构建工件(缩小的js文件)担心跟踪,源代码控制等等。
  4. 重氮基优点:

    1. 缩小会增加脚本请求的开销。这可以通过将缩小结果缓存在内存或磁盘上来缓解
    2. 我不确定AjaxMin.dll的许可是否允许这种使用
    3. 如果您正在使用Visual Studio /其他提供脚本智能感知的工具,它现在可能无法通过脚本标记为您提供