JavaScript代码优化新工具UglifyJS

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

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

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

  1. 安装 node.js 环境

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

  3. 解压打开 UglifyJS/bin/uglifyjs

  4. 找到

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

  替换为

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

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

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

/*
  # code by
  # DEMO
  # Dual licensed under the MIT
  */
  
  $uglifyjs = new uglifyjs(array(
   ‘node_home‘=>‘/usr/local/bin/node‘,
   ‘uglifyjs_path‘=>‘/usr/UglifyJS/bin/uglifyjs‘, //uglifyjs压缩工具的路径。
   // -------- 附加的参数 --------- //
   ‘prefix‘=>‘-b‘, //输入的参数 -b 是格式化 不输入为压缩,还有更多请参考命令用法。
   ‘append‘=>‘‘//保存文件,如果为空就是直接在命令行输出结果。
   ));
  $results =  $uglifyjs ->compress($_FILES[‘file‘][‘tmp_name‘]);
  
  
  class uglifyjs{
          function __construct($options = array()) {
              $this->options = $options;
          }
         function args($option) {
              return $option[‘node_home‘].‘ ‘.$option[‘uglifyjs_path‘].‘
  ‘.$option[‘prefix‘].‘ ‘.$option[‘file‘].‘ ‘.$option[‘append‘];
  
          }
          function exec($cmd) {
              exec($cmd.‘ 2>&1‘,$out, $status);
              return json_encode(array(
              ‘shell‘ => $cmd,
                  ‘output‘ => implode("\n",$out),
                  ‘status‘ => $status
              ));
          }
          function compress($file) {
              $this->options[‘file‘] = $file;
              return $this->exec($this->args($this->options));
          }
      }
  ?> 

  文章最后附上 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

时间: 2024-12-24 09:49:27

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

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

对Js的单元测试是一个大的题目.作者认为Ruby的相关测试工具比Js的测试工具更灵活 大多数Js代码最终是关于响应用户的行为和改变DOM中的元素 没有什么javascript的知识点.前两节用了几个新的测试工具,和大量配置,暂时pass. setup js Unit-tests writing a Sample test Tdd in Js jasmine matchers testing ajax calls using testdouble.js connecting the js to t

基于ArcGIS API for Javascript的地图编辑工具

转自:http://www.cnblogs.com/znlgis/p/3505646.html 最近工作上需要用ArcGIS API for Javascript来开发一个浏览器上使用的地图编辑工具,分享一下一些相关的开发经验. 我开发的地图编辑工具是根据ESRI提供的例子修改而来的,参考的例子是https://developers.arcgis.com/en/javascript/jssamples/ed_default_editingwidget.html 我们下面只说一些需要注意的问题:

45个必备的JavaScript Web开发工具

JavaScript是一种灵活多变的脚本语言,它在全世界被广泛的应用在Web页面和服务器应用中.你可以因为任何目的去使用它,但是你需要一些工具.幸运的是,为了完成独特的任务,无以计数的JavaScript工具已经被开发者发布. 这里有45个关于JavaScript的工具,所有这些工具将帮助您创建现代网站与用户所期望的所有特性.它们都提供了精简的设计和简单的接口.... AngularJS Google创建AngularJS,目的是提供一个稳定的.轻量级的框架在浏览器中呈现信息.它从服务器收集数据

八大前端JavaScript趋势和工具

JavaScript的世界正在快速发展. 前端开发(和网络开发)的世界正在以极快的速度发展.如今,如果不借助前端或Webpack.React Hooks.Jest.Vue和NG元素,你会很快被远远抛下.不过,情况正在发生改变. 尽管开发人员和技术人员在前端领域中的数量逐年上升,生态系统却有标准化的趋势.新技术和工具的出现正在改变当下的规则. 总体趋势肯定会是一种基于组件构成的用户界面标准化,会影响从样式到测试甚至状态管理的所有方面,并且总体具有更好的模块度.这将包括围绕web组件.ES模块.组件

[Javascript]JS新API标准-地理定位(navigator.geolocation)

在新的API标准中,可以通过navigator.geolocation来获取设备的当前位置,返回一个位置对象,用户可以从这个对象中得到一些经纬度的相关信息. navigator.geolocation的三个方法: 1. getCurrentPosition() 2. watchPosition() 3. clearWatch() getCurrentPosition() 使用方法:navigator.geolocation.getCurrentPosition(successCallback,

谷歌推出备份新工具:Google Drive将同步计算机文件

Google 正在将云端硬盘 Drive 转变成更强大的文件备份工具.很快,Google Drive 将能监测并备份你电脑上的(几乎)所有文件,只要是你勾选的文档,Drive 就能同步至云端. 具体来说,这项改变将在 6 月 28 日到来,届时 Google 将会推出一款名为 Backup and Sync(备份与同步)的应用.看起来 Backup and Sync 似乎在未来某个时间点将取代 Google 的 Drive 和 Photos(照片同步与管理)应用.目前 Google 正在向普通用

Backtrack5 R3实用新工具分析

Backtrack5 R3实用新工具分析 http://old.8wr.cn/blogread-721678-1.aspx http://old.8wr.cn/blogread-721675-1.aspx http://old.8wr.cn/blogread-721674-1.aspx http://old.8wr.cn/blogread-721672-1.aspx http://old.8wr.cn/blogread-721669-1.aspx http://old.8wr.cn/blogre

【Android】详解7.0带来的新工具类:DiffUtil

一 概述 DiffUtil是support-v7:24.2.0中的新工具类,它用来比较两个数据集,寻找出旧数据集->新数据集的最小变化量. 说到数据集,相信大家知道它是和谁相关的了,就是我的最爱,RecyclerView. 就我使用的这几天来看,它最大的用处就是在RecyclerView刷新时,不再无脑mAdapter.notifyDataSetChanged(). 以前无脑mAdapter.notifyDataSetChanged()有两个缺点: 不会触发RecyclerView的动画(删除.

JavaScript代码优化(下载时间和执行速度优化)

JavaScript代码的速度被分成两部分:下载时间和执行速度. 下载时间 Web浏览器下载的是js源码,因此所有长变量名和注释都回包含在内.这个因素会增加下载时间.1160是一个TCP-IP包中的字节数.最好能将每个javascript文件都保持在1160字节以下以获得最优的下载时间.    由于这个原因,要删除注释.删除制表符和空格.删除所有的换行.将长变量名缩短. 遵循这4条比较困难.因此用外部程序(ECMAScript Cruncher)来帮助我们. 要运行ESC,必使用Windows系