jQuery 1.5 发布的时候 john resig 大神说所用的代码优化程序从Google Closure切换到UglifyJS,新工具的压缩效果非常令人满意。 UglifyJS 是一个服务端node.js的压缩程序。我测试了一下压缩率确实比较高。 所以值得写篇文章推荐下。

  你也可以尝试一下在线版的Uglifyjs:

  如果你对 uglifyjs 有兴趣可以按照以下安装方式进行安装。

  1. 安装 node.js 环境

  2. 进入 右上角 “Download” ZIP下载整个包。

  3. 解压打开 UglifyJS/bin/uglifyjs

  4. 找到

  1.  global.sys = require(/^v0\.[]/.test(process.version) ? "sys" : "util");
  2.   var fs = require("fs");
  3.   var uglify = require("uglify-js"), // symlink ~/.node_libraries/uglify-js.js to ../uglify-js.js
  4.    jsp = uglify.parser,
  5.    pro = uglify.uglify;

  替换为

  1. global.sys = require(/^v0\.[]/.test(process.version) ? "sys" : "util");
  2.   var fs = require("fs");
  3.   require.paths.unshift(__dirname + "/../");
  4.   var uglify = require("index"),
  5.   jsp = uglify.parser,
  6.   pro = uglify.uglify;

  5. cd 命令到 UglifyJS/bin/ 目录。执行 ./uglifyjs /你的js路径/xx.js 如果安装成功会把你的压缩代码直接显示在命令行。你可以通过 ./uglifyjs 1.js 2.js 把压缩后的代码保存到 2.js

  至此 uglifyjs 安装完成,我还写了一个PHP类。可以调用 uglifyjs 进行压缩

  1. /*
  2.   # code by
  3.   # DEMO
  4.   # Dual licensed under the MIT
  5.   */
  6.   
  7.   $uglifyjs = new uglifyjs(array(
  8.    'node_home'=>'/usr/local/bin/node',
  9.    'uglifyjs_path'=>'/usr/UglifyJS/bin/uglifyjs', //uglifyjs压缩工具的路径。
  10.    // -------- 附加的参数 --------- //
  11.    'prefix'=>'-b', //输入的参数 -b 是格式化 不输入为压缩,还有更多请参考命令用法。
  12.    'append'=>''//保存文件,如果为空就是直接在命令行输出结果。
  13.    ));
  14.   $results = $uglifyjs ->compress($_FILES['file']['tmp_name']);
  15.   
  16.   
  17.   class uglifyjs{
  18.    function __construct($options = array()) {
  19.    $this->options = $options;
  20.    }
  21.    function args($option) {
  22.    return $option['node_home'].' '.$option['uglifyjs_path'].'
  23.   '.$option['prefix'].' '.$option['file'].' '.$option['append'];
  24.   
  25.    }
  26.    function exec($cmd) {
  27.    exec($cmd.' 2>&1',$out, $status);
  28.    return json_encode(array(
  29.    'shell' => $cmd,
  30.    'output' => implode("\n",$out),
  31.    'status' => $status
  32.    ));
  33.    }
  34.    function compress($file) {
  35.    $this->options['file'] = $file;
  36.    return $this->exec($this->args($this->options));
  37.    }
  38.    }
  39.   ?>

  文章最后附上 uglifyjs 的命令行中文说明

  使用:

  这是一个脚本助手(工具)-bin/uglifyjs-使用这个库可以用来把一个脚本压缩到最小。

  简介:

  uglifyjs [ 选项... ] [ 文件 ]

  文件参数应该放在选项后面,uglifyjs 会读取文件中的javascript代码进行处理。

  如果你不指定输出的文件名,那么他会把处理后的内容输出到命令行中。

  例: uglifyjs 1.js 2.js 会创建一个 2.js 文件把 1.js处理完毕的内容输入到这里

  例: uglifyjs 1.js 会读取1.js内容,并把结果输出到命令行中。

  支持的选项:

  -b or --beautify — 参数 -b 或者 --beautify 用于美化(格式化)代码。美化之前会压缩代码(未验证。)

  -i N or --indent N — 缩进级别空格数

  例:uglifyjs -b 1.js 2.js 会把1.js的内容格式后输出到2.js

  -q or --quote-keys — quote keys in literal objects (by default, only keys that cannot be identifier names will be quotes).

  -nm or --no-mangle — 变量名不缩短,意味着不会把代码的变量名缩短为 abcdefg

  -ns or --no-squeeze — 不使用ast_squeeze()(可以使各种优化之后的代码更小,更具有可读性。)

  -mt or --mangle-toplevel — mangle names in the toplevel scope too (by default we don’t do this).

  --no-seqs — 当ast_squeeze()被调用的时候(除非你添加了--no-squeeze 参数才不会被调用)它将减少在一个代码块中重复声明的行。例如:“a = 10; b = 20; foo();”将被重写为“a=10,b=20,foo();”。在各种场合,这将允许我们丢弃代码块中的括号(在一些语句块变成一个独立的声明行之后)。这是默认的,因为经我们测试,它似乎更安全并且能节省几百bytes,但加上--no-seqs 后将被禁止。

  --no-dead-code — 默认情况下,UglifyJS将会删除代码中明显无法访问的语句(如 return , throw , break 或者continue语句 ,以及一些不是函数/变量的的声明)。通过这个选项可以禁用掉这个优化功能。

  -nc or --no-copyright — 默认情况下,uglifyjs将在生成的代码中保留初始的一些标记(假设版权信息等)。如果你设置这个参数将被禁止。

  -o filename or --output filename — 将结果输出到一个指定文件名的文件中。如果没有这个参数,结果将会被输出到命令行

  -

  -overwrite — 如果代码是从一个文件中读取的(不是直接标准输入的)并且使用了--overwrite参数,那么结果也将会被写进相同的文件中去。

  --ast — pass this if you want to get the Abstract Syntax Tree instead of JavaScript as output. Useful for debugging or learning more about the internals.

  --ast — pass 如果你要获取一个用来取代javascript输出的抽象语法树,这些参数会在你进行调试或学习内部组件时很有用。

  -v or --verbose — output some notes on STDERR (for now just how long each operation takes).

  -v or --verbose — output 一些标准错误提示(显示每一次花费多久)

  --extra — enable additional optimizations that have not yet been extensively tested. These might, or might not, break your code. If you find a bug using this option, please report a test case.

  当你发现BUG时你可以增加一个中断点用来对还没有彻底的测试的代码进行优化,你可以使用这个选项来生成一个测试用例。

  --extra — enable

  --unsafe — enable other additional optimizations that are known to be unsafe in some contrived situations, but could still be generally useful. For now only this:

  foo.toString() ==> foo+””

  想foo.toString() 这种用法 也是可行的,但是存在一些人為的不安全的情况,这事也需要添加一些优化比如: foo+””

  --max-line-len (default 32K characters) — add a newline after around 32K characters. I’ve seen both FF and Chrome croak when all the code was on a single line of around 670K. Pass –max-line-len 0 to disable this safety feature.

  在超过大概32K字节的时候你要增加一行,我有发现过在火狐和chorme下档代码一行超过670K的时候它会发出报警声。通过–max-line-len 0 去静止这个安全属性

  --reserved-names — some libraries rely on certain names to be used, as pointed out in issue #92 and #81, so this option allow you to exclude such names from the mangler. For example, to keep names require and $super intact you’d specify –reserved-names “require,$super”.

  --reserved-names — 些类库会依赖于特定的名称去使用,比如:#92 和#81 所以这个选项允许你去排除一些关键字。

JavaScript代码优化新工具UglifyJS的更多相关文章

  1. Rails 5 Test Prescriptions 第10章 Unit_Testing JavaScript(新工具,learn曲线太陡峭,pass)

    对Js的单元测试是一个大的题目.作者认为Ruby的相关测试工具比Js的测试工具更灵活 大多数Js代码最终是关于响应用户的行为和改变DOM中的元素 没有什么javascript的知识点.前两节用了几个新 ...

  2. Regexper:牛逼的 JavaScript 正则可视化工具

    RequireJS Optimizer 是 RequireJS 自带的前端优化工具,可以对 RequireJS 项目中的 JavaScript & CSS 代码使用 UglifyJS 或者 C ...

  3. 加速编码的 JavaScript 库和工具

    JavaScript库是 一个提前写好的JavaScript文件库,它可以很容易的开发基于JavaScript的应用,特别是AJAX和一些其它的以web为中心的技术.运用JavaScript最基本的方 ...

  4. ESLint – 可扩展的 JavaScript & JSX 校验工具

    ESLint 是一个开源的 JavaScript 代码校验工具,最初是由 Nicholas C. Zakas 在2013年创建的.经常被用来发现问题的模式或代码,不符合特定的风格准则. ESLint ...

  5. 前端开发自动化工作流工具,JavaScript自动化构建工具grunt、gulp、webpack介绍

    前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...

  6. 一个分门别列介绍JavaScript各种常用工具的脑图

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:一个分门别列介绍JavaScript各种常用工具的脑图.

  7. javascript生成新标签的三种方法

    javascript生成新标签的三种方法:http://www.cnblogs.com/online-link/p/6062423.html

  8. 郑晔谈 Java 开发:新工具、新框架、新思维【转载】【整理】

    原文地址 导语:"我很惊讶地发现,现在许多程序员讨论的内容几乎和我十多年前刚开始做 Java 时几乎完全一样.要知道,我们生存的这个行业号称是变化飞快的.其实,这十几年时间,在开发领域已经有 ...

  9. bowtie:短序列比对的新工具

    bowtie:短序列比对的新工具(转) (2014-11-17 22:15:24) 转载▼ 标签: 转载   原文地址:bowtie:短序列比对的新工具(转)作者:玉琪星兆 Bowtie是一个超级快速 ...

随机推荐

  1. python书籍推荐:Python数据科学手册

    所属网站分类: 资源下载 > python电子书 作者:today 链接:http://www.pythonheidong.com/blog/article/448/ 来源:python黑洞网 ...

  2. 第二周习题F

    Starting with x and repeatedly multiplying by x, we can compute x31 with thirty multiplications: x2  ...

  3. UVA 1596 Bug Hunt (大模拟 栈)

    题意: 输入并模拟执行一段程序,输出第一个bug所在的行. 每行程序有两种可能: 数组定义: 格式为arr[size]. 例如a[10]或者b[5],可用下标分别是0-9和0-4.定义之后所有元素均为 ...

  4. c# TcpClient简易聊天工具

    说明: TcpClient 链接是一个比较安全稳定的链接,作为聊天或者是数据稳定传输,是比较合适的,下面的代码测试过,如果你吧他放在公网服务器上,也是可以用的 using System; using ...

  5. ..net 3.5新特性之用this关键字为类添加扩展方法

    具体用法如下: public static class ClassHelper { //用this 声明将要吧这个方法附加到Student对象 public static bool CheckName ...

  6. python接口自动化测试(一)

    本节开始,开始介绍python的接口自动化测试,首先需要搭建python开发环境,到https://www.python.org/下载python 版本直接安装就以了,建议 下载python2.7.1 ...

  7. (dede)织梦系统二次开发笔记

    (dede)织梦系统二次开发记录 --soulsjie 一.模板常用文件说明 模板文件都在文件夹templets下,我们以默认模板(default)为例,对模板文件结构进行分析: 首页模板文件目录 \ ...

  8. Leetcode 149.直线上最多的点数

    直线上最多的点数 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | |        o ...

  9. 【扫描线】HDU 5124 lines

    http://acm.hdu.edu.cn/showproblem.php?pid=5124 [题意] 在数轴x上,每次操作都覆盖一个区间的所有点,问被覆盖次数最多的点是覆盖了多少次 [思路] 最简单 ...

  10. [bzoj2194]快速傅立叶之二_FFT

    快速傅立叶之二 bzoj-2194 题目大意:给定两个长度为$n$的序列$a$和$b$.求$c$序列,其中:$c_i=\sum\limits_{j=i}^{n-1} a_j\times b_{j-i} ...