JavaScript代码优化新工具UglifyJS

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

你也可以尝试一下在线版的Uglifyjs: http://sweet.fengyin.name/

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

1. 安装 node.js 环境

2. 进入 https://github.com/mishoo/UglifyJS 右上角 “Download” ZIP下载整个包。

3. 解压打开 UglifyJS/bin/uglifyjs

4. 找到


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

文章最后附上 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 所以这个选项允许你去排除一些关键字。

【编辑推荐】

  1. 超强JavaScript编辑器 WebStorm 2.1 发布
  2. JavaScript跨域总结与解决办法
  3. 用JavaScript 实现表格数据管理
  4. 黑客调查:最流行JavaScript库是什么?
  5. JavaScript版几种常见排序算法分享 

【责任编辑:陈贻新 TEL:(010)68476606】

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索javascript
, webstorm
, require.js
, 代码
, sys文件夹名不显示
, require
, or优化
, 输出
, node js webstorm
, 一个
, Beautify
, resolve在uglify压缩
, UglifyJS
JavaScript压缩工具
javascript代码优化、seo代码优化工具、代码优化工具、html代码优化工具、php代码优化工具,以便于您获取更多的相关知识。

时间: 2024-08-24 07:47:48

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

Prepack——JavaScript代码优化工具

官方宣称Prepack是一个优化JavaScript源代码的工具,实际上它是一个JavaScript的部分求值器(Partial Evaluator),可在编译时执行原本在运行时的计算过程,并通过重写JavaScript代码来提高其执行效率.Prepack用简单的赋值序列来等效替换JavaScript代码包中的全局代码,从而消除了中间计算过程以及对象分配的操作.对于重初始化的代码,Prepack可以有效缓存JavaScript解析的结果,优化效果最佳. 官方提供的Prepack优化示例: /* 

《HTML5+CSS3网页设计入门必读》——2.9 闪亮的新工具:JavaScript API

2.9 闪亮的新工具:JavaScript API 如果想要获取关于CSS的文档,需要查阅CSS 规范.如果寻找的是有关标记的文档,需要查阅HTML规范.但是,哪里可以查阅JavaScript API的文档,例如document.write.innerHTML和window.hitory?JavaScript规范所涉及的全部是编程语言,因此无法获得任何与浏览器API有关的内容. 到现在为止,浏览器一直独立创建和执行JavaScript API并相互借鉴.HTML5对这些API的记录是一劳永逸的,

[译] 高性能 React:3 个新工具加速你的应用

本文讲的是[译] 高性能 React:3 个新工具加速你的应用, 原文地址:High Performance React: 3 New Tools to Speed Up Your Apps 原文作者:Ben Edelstein 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:sunui 校对者:yzgyyang.reid3290 通常来说 React 是相当快的,但开发者也很容易犯一些错误导致出现性能问题.组件挂载过慢.组件树过深和一些非必要的渲染周

推荐一个javascript的加密工具_脚本加解密

一个加密JAVASCRIPT的开源工具PACKER2.0.2 这是一个并非很复杂的编码工具,编码过后可以被浏览器直接识别.新浪在用.比如:http://comment4.news.sina.com.cn/comment/cmnt_xml.js 从这里进入http://dean.edwards.name/packer/,很简单的一个界面. 设置也很简单Numeric (Base 10) :所有的字符都被编码成数字Normal (Base 62) :所有的字符都被编码成字母与数字符号构成的值.这是推

JavaScript中cookie工具函数封装的示例代码_javascript技巧

一. 语法 1.1 获取当前页面的所有cookie: var allCookies = document.cookie; allCookies 是一个字符串,其中包含了以分号分隔的cookie列表字符串 (即 key=value 键值对). 1.2 写一个新cookie: document.cookie = updatedCookie; updatedCookie是一个键值对形式的字符串.只能用这个方法一次设置或更新一个cookie,而且写入并不是覆盖,而是添加.例如: document.coo

还不知道这11个超酷的编程新工具你就 out 了!

工具对开发人员来说至关重要.工具可以让一个开发人员的日常工作更高效,并且只需要关注最重要的事情.对于开发人员来讲,寻找更好的替代工具往往比坚持使用熟悉过时的工具更困难. 在这篇文章中,我们将列出你在日常工作中能够使用的新的开发工具.很多对在线流媒体感兴趣的开发人员已经开始在他们的开发环境中使用这些新工具,因为相比他们的旧的设施来讲这些工具提供了更多的优势. 你可能会想,如果旧的工具可以完成工作,还有必要去寻找新的工具吗?技术总是在变化,而且与我们的工作方式息息相关,它需要保持更新.此外,新工具可

Javascript不可缺少的工具 - Aptana

网页制作Webjx文章简介:自从开始做Web开发起,一直都没有找到一个很让人满意的Javascript开发工具.从Editplus.Dreamweaver到FrontPage.Visual Studio,没有一样是很称手的.你是不是还在为Visual Studio中的那一点点智能提示感到兴奋不已?的确VS比其他的好那么一点点,但是相对于VS中的C# 自从开始做Web开发起,一直都没有找到一个很让人满意的Javascript开发工具.从Editplus.Dreamweaver到FrontPage.

Flash MX 2004的绘图新工具

与Flash MX比较,Flash MX 2004的绘图工具只有小小的变化:原来的矩形工具中增加了一个新的工具--PolyStar(多边星形).使用这个新增的工具,可以轻松绘制多边形和星形.下面就让我们来试试这个新工具吧. 1.在工具箱中的矩形工具上单击,并按住鼠标左键,然后从弹出菜单中选择PolyStar工具. 2.如果Properties(属性)面板没有打开,选择Window > Properties(窗口>属性),打开Properties面板. 3.在Properties面板中设置笔触色

使用Outlook.com新工具可导入Gmail邮件和联系人

自Outlook.com邮件服务推出之后微软还专门成立了"Scroogled"项目使用各种手段试图拉拢Gmail用户更换使用他家的服务,并且抓住Gmail窥探用户数据这一点穷追猛打.甚至在今天微软还进一步放出了整个转换移植步骤教程,推出的专属工具能够让Gmail用户非常轻松将联系人.邮件等信息导入到Outlook.com上. 此外这项工具甚至能够给于Gmail同步的状态,比如当你已经在Gmail查看邮件之后,邮件状态已经标记成为"已阅读",那么在转移之后在Outlo