写前端的相信都遇到过要提高网页的性能,其中javascript文件越小,浏览器的下载速度面对文件的读取和解析就更快。而一般我们在开发又需要一定的代码规范来使我们的代码更加的容易维护和读懂,但是大量空格和换行又会加大文件的大小,所以在发布时进行缩编或者混淆可以减小javascript的大小,提高效率。

一、缩编

缩编就是去掉javascript代码中的空格和换行符,从而减小文件大小的目的。我们可以使用JSMin来进行代码缩编。

JSMIN的安装

  1. 安装node

  2. 安装npm

  3. 安装JSMIN

     命令行:npm install -g jsmin

    (相信现在的前端对node应该都是不陌生的,这里我就不做详细介绍,如果没了解过的建议去学一学)

JSMIN的使用

命令:jsmin -o 新文件名.js 要执行的js文件.js
例如:jsmin -o jsmin.js bootstrap.js

这里我用了bootstrap没有压缩过的bootstrap.js文件,可以看到,小了31.9%。

二、混淆

混淆是比更加高级的一种优化js代码的方法,他不仅能够去掉空格和换行,他还把一些全局变量或者是全局函数的名字重新定义为简短的名称。我们可以使用UglifyJS来进行代码混淆

UglifyJS的安装

  1. 安装node

  2. 安装npm

  3. 安装UglifyJS

     命令行:npm install -g uglify-js

    (又是node了,你知道它多方便了没-。-)

UglifyJS的使用

UglifyJS我主要两种使用,第一种是直接-o属性,和jsmin差不多,就去掉空格和换行。还是用bootstrap。
命令:uglifyjs 要执行的文件.js -o 生成的文件名.js
例如:uglifyjs bootstrap.js -o uglifyjs.js

可以看到也是减小了,但是和jsmin的效果是差不多的。

第二种是加-m属性的,这个属性可以让一些变量被重命名,这样将大大的减少js文件的大小。还是用bootstrap.js来实验。(-o后面一定要跟生成的文件)
命令:uglifyjs 要执行的文件.js -m -o 生成的文件名.js
例如:uglifyjs bootstrap.js -o uglifyjs.js

可以看到缩小了44.9%,比前两个缩小了更加多的大小。

三、总结:

这就是缩小js大小的两个方法,对于小的js文件来说,用什么其实差不多,对于比较庞大的js文件,那时用最后的方法比较的好。但是要求你的代码有一定要求,才不会再被进行重命名后引起了变量的冲突。还有一种GCC(Google Closure Compiler),这种可以更加的缩小js代码的量,更大规模更加的明显。但是我技术还差点,没法使用。

https://closure-compiler.appspot.com/home(可能需要翻墙)

这个网址就是GCC压缩的网站。之所以不使用他一个原因是要翻墙,还有一个原因是对代码的规范要求高,GCC在压缩之后破坏了原来了代码,如果没有很好的代码规范,将导致js文件出错。有兴趣的可以去百度一下。

缩小javascript文件大小之缩编、混淆的更多相关文章

  1. 如何在Visual Studio 2012中发布Web应用程序时自动混淆Javascript

    同Java..NET实现的应用程序类似,Javascript编写的应用程序也面临一个同样的问题:源代码的保护.尽管对大多数Javascript应用公开源代码不算是很严重的问题,但是对于某些开发者来说, ...

  2. 12.06 JavaScript

    任务 掌握JavaScript基础知识,能够使用JavaScript编写一些复杂度不大的交互功能. 任务: JavaScript基础 做完任务一的时候深深地感觉到自己的基础非常的薄弱,在这里再次感谢一 ...

  3. Javascript 相关文章 —— 性能

    在 IBM Bluemix 云平台上开发并部署您的下一个应用. 开始您的试用 概览 无论当前 JavaScript 代码是内嵌还是在外链文件中,页面的下载和渲染都必须停下来等待脚本执行完成.JavaS ...

  4. 顶级的JavaScript框架、库、工具及其使用

    几乎每隔一个星期,就有一个新的 JavaScript 库席卷网络社区!Web 社区日益活跃.多样,并在多个领域快速成长.想要研究每一个重要的 JavaScript 框架和库,是个不可能完成的任务.接下 ...

  5. 悟透JavaScript

    要理解JavaScript,你得首先放下对象和类的概念,回到数据和代码的本原.前面说过,编程世界只有数据和代码两种基本元素,而这两种元素又有着纠缠不清的关系.JavaScript就是把数据和代码都简化 ...

  6. 悟透JavaScript(理解JS面向对象的好文章)

    引子 编程世界里只存在两种基本元素,一个是数据,一个是代码.编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力. 数据天生就是文静的,总想保持自己固有的本色:而代码却天生活泼,总想改变这个 ...

  7. JavaScript 的性能优化:加载和执行

    随着 Web2.0 技术的不断推广,越来越多的应用使用 javascript 技术在客户端进行处理,从而使 JavaScript 在浏览器中的性能成为开发者所面临的最重要的可用性问题.而这个问题又因 ...

  8. JavaScript的作用域和提升机制

    JavaScript的作用域和提升机制 你知道下面的JavaScript代码执行时会输出什么吗? 1 2 3 4 5 6 7 8 var foo = 1; function bar() {     i ...

  9. 《JavaScript模式》第2章 基本技巧

    @by Ruth92(转载请注明出处) 第2章 基本技巧 一.编写可维护的代码 阅读性好 具有一致性 预见性好 看起来如同一个人编写 有文档 编写注释 编写 API 文档 @namespace:用于命 ...

随机推荐

  1. vue axios ajax引擎

    0.调用 1.axios api axios.request(config) axios.get(url[,config]) axios.delete(url[,config]) axios.head ...

  2. DP【洛谷P3089】 [USACO13NOV]POGO的牛Pogo-Cow

    [洛谷P3089] [USACO13NOV]POGO的牛Pogo-Cow FJ给奶牛贝西的脚安装上了弹簧,使它可以在农场里快速地跳跃,但是它还没有学会如何降低速度. FJ觉得让贝西在一条直线的一维线路 ...

  3. 缩点【洛谷P2921】 [USACO08DEC]在农场万圣节Trick or Treat on the Farm

    [洛谷P2921] [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N< ...

  4. bash 中 trim 字符串(去除首尾空格) - grep 去空行

    在 bash 下如何去除一个字符串首尾的空格(也就是 trim)呢?其实有一个简单的办法: $ echo $STR 注 意 $STR 不要带引号.因为 $STR 展开后,会作为 echo 的参数.那么 ...

  5. java中Runtime类和Process类的简单介绍

    在java.lang包当中定义了一个Runtime类,在java中对于Runtime类的定义如下: Java code public class Runtime extends Object 每个 J ...

  6. 关于 java中的SecureRandom在linux中每次生成不同结果

    使用AES算法的时候,会发现下面的代码在windows每次产生确定的结果,但Linux就不同,导致无法正确解密 public static String encrypt(String content, ...

  7. LeeCode(5. Longest Palindromic Substring)

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  8. disruptor 问题排查

    需求:收到银行异步通知,要在2秒内将结果返回银行,同时还要根据银行返回的交易状态更新数据库订单状态和其他业务. 采用disruptor,其实最好使用独立MQ产品.本次用的是disruptor,遇到了一 ...

  9. Linux ps命令记录

    ps命令:查看当前系统进程状态 ps -a   显示当前所有进程ps -ax 显示没有控制终端的进程ps -u better   查看用户better的进程ps  aux|less 通过cpu和内存来 ...

  10. Yii2 前台控制器访问权限控制

    class BaseController extends Controller { public function behaviors() { return [ 'access' => [ 'c ...