YUI Compressor 压缩 JavaScript 原理-《转载》

YUI Compressor 压缩 JavaScript 的内容包括

  • 移除注释
  • 移除额外的空格
  • 细微优化
  • 标识符替换(Identifier Replacement)

YUI Compressor包括哪些细微优化呢?

  • object["property"] ,如果属性名是合法的 JavaScript 标识符(注:合法的 JavaScript 标识符——由一个字母开头,其后选择性地加上一个或者多个字母、数字或下划线)且不是保留字,将优化为: object.property 。
  • {"property":123} ,如果属性名是合法的 JavaScript 标识符且不是保留字,将优化为{property:123} (注:在对象字面量中,如果属性名是一个合法的 JavaScript 标识符且不是保留字,并不强制要求用引号引住属性名)。
  • ‘abcd\‘efgh‘,将优化为 "abcd‘efgh"。
  • "abcd" + "efgh",如果是字符串相连接,将优化成 "abcdefgh"(注:所有在使用 YUI Compressor 的前提下,对于脚本中的字符串连接,使用连接符 “+” 的效率和可维护性最高)。
  • 对于 JavaScript 最有效的压缩优化,当属标识符替换。

比如:

复制代码如下:

(function() {
    function add(num1, num2) {
        return num1 + num2;
    }
})();

进行属标识符替换后:

复制代码如下:

(function() {
    function A(C, B) {
        return C + B;
    }
})();

再移除额外的空格,最终成了:

代码如下:

(function(){function A(C,B){return C+B;}})(); 

YUI Compressor 标识符替换仅替换函数名和变量名,那哪些不能被替代呢?

  • 原始值:字符串、布尔值、数字、null 和 undefined。一般来说字符串占的空间最多,而非数字字面量其次(true、false,null,underfinded)。
  • 全局变量:window、document、XMLHttpRequest等等。使用最多的就是 document、window。
  • 属性名:比如:foo.bar。占据的空间仅次于字符串,”.” 操作符无法被代替,且 a.b.c 更加费空间。
  • 关键字:经常被过度使用的关键字有:var、return。最好的优化方法:一个函数仅出现一次 var 和 return 关键字。

对于原始值、全局变量、属性名的优化处理方式大致相同:任何字面量值、全局变量或者属性名被使用超过 2 次(包括2次),都应该用局部变量存储代替。

但有部分情况下是禁止使用标识符替换的:

  • 使用 eval() 函数。解决方法:不使用或者创建一个全局函数封装 eval()。
  • 使用 with 语句。解决方法:方法同上。
  • JScript 的条件注释。唯一解决的方法:不使用。

由于 YUI Compressor 是建立在 rhino interpreter 基础上的,所以上述所有的优化都是安全的。

时间: 2024-10-24 01:51:56

YUI Compressor 压缩 JavaScript 原理-《转载》的相关文章

YUI Compressor是如何压缩JS代码的?

YUI Compressor 压缩 JavaScript 的内容包括: 移除注释 移除额外的空格 细微优化 标识符替换(Identifier Replacement) YUI Compressor 包括哪些细微优化呢? object["property"] ,如果属性名是合法的 JavaScript 标识符(注:合法的 JavaScript 标识符——由一个字母开头,其后选择性地加上一个或者多个字母.数字或下划线)且不是保留字,将优化为: object.property {"

【转载】Yui.Compressor高性能ASP.NET开发:自动压缩CSS、JS

在开发中编写的js.css发布的时候,往往需要进行压缩,以减少文件大小,减轻服务器的负担.这就得每次发版本的时候,对js.js进行压缩,然后再发布.有没有什么办法,让代码到了服务器上边,它自己进行压缩呢? 有两种办法: 第一种,在css.js请求到来的时候读取一下相对应的文件,进行压缩后返回.此方法可以通过在Global.asax的Application_BeginRequest的事件中,进行处理,也可以在web.config中注册一个httpHandler进行处理. 第二种是在程序启动的时候,

C#Css/Js静态文件压缩--Yui.Compressor.Net

一.Asp.Net 自带静态文件压缩工具包 Microsoft.AspNet.Web.Optimization http://www.nuget.org/packages/Microsoft.AspNet.Web.Optimization/1.1.3 但好像没有提供可直接条用的压缩方法,并且再用mvc4.0的时候,同一个网站多个域名也出现了一些问题.于是有了下面 二.使用Yahoo for .Net 的压缩工具,Nuget包名称:YUICompressor.NET Yahoo.Yui.Compr

【JS代码压缩】使用YUI Compressor对js文件进行压缩处理

概述 在使用html5开发Hybird APP的时候,可能会引入大量的js包,另外对于一些核心的js文件,进行一些特殊的处理, 如压缩和加密就显得很重要了,YUI Compressor就是这样一个用于压缩js.css的工具(捂脸:其实我用它对代码进行 了压缩作为混淆处理的一种手段了),是采用Java开发的,因此运行的时候需要首先安装Java环境,安装完之后,运 行和配置都是比较简单的. 安装及使用 使用YUI Compressor之前必须先配置java环境,如何配置此处不说了. YUI Comp

Asp.Net使用Yahoo.Yui.Compressor.dll压缩Js|Css

网上压缩css和js工具很多,但在我们的系统中总有特殊的地方.也许你会觉得用第三方的压缩工具很麻烦.我就遇到了这样问题,我不想在本地压缩,只想更新到服务器上去压缩,服务器压缩也不用备份之类的操作.于是我就想着自己实现压缩工具. 初步需求如下: 使用Yahoo.Yui.Compressor 2.0版本 只对网站目录下指定文件夹中css和js进行压缩 使用到了JQuery插件,所以有很多都是压缩过的js.所以对文件名称中保存min的不进行压缩 不需要备份文件 如在第一次访问文件时候进行压缩或应用程序

YUI Compressor for Sublime text2

YUI Compressor 是一个用来压缩 JS 和 CSS 文件的工具,采用Java开发. 最近压缩文件,常使用在线压缩的方式来压缩文件,一来多有不便,二来如果没有网络,只能搁置了.本文来描述如何在Sbulime text2中使用YUI Compressor插件. Java的安装 官网上下载java,并安装,安装完成后进行环境变量配置: 1.我的电脑 -> 右键属性 -> 高级系统设置 -> 高级 -> 环境变量 -> 系统变量: (1)新建->变量名:JAVA_H

Spring Mvc + Maven + yuicompressor 使用 profile 来压缩 javascript ,css 文件; (十)

profile相关知识点: 在开发项目时,设想有以下场景: 你的Maven项目存放在一个远程代码库中(比如github),该项目需要访问数据库,你有两台电脑,一台是Linux,一台是Mac OS X,你希望在两台电脑上都能做项目开发.但是,安装Linux的电脑上安装的是MySQL数据库,而Mac OS X的电脑安装的是PostgreSQL数据库.此时你需要找到一种简单的方法在两种数据库连接中进行切换,你会怎么做? 此外,你的项目需要部署.为了调试,在开发时我们在Java编译结果中加入了调试信息(

使用Google的Closure Compiler,在本机上压缩javascript

2011-12-05 13:47:39 1.JAVA JDK下载地址: http://download.oracle.com/otn-pub/java/jdk/7u1-b08/jdk-7u1-windows-i586.exe 2.WIN7下JAVA环境配置: (1)用鼠标右击“计算机”—–>属性—–>选择左边导航的“高级系统设置”选项—>选择右下角的“环境变量”选项(2)进行win7下Java环境变量配置 在”系统变量”下进行如下配置:A.新建->变量名:JAVA_HOME 变量值

gzip压缩JavaScript

为了提高客户端的体验效果,RIA开发逐渐兴起.这样会项目中会充斥的大量的JavaScript代码,与此同时会消耗客户端浏览器性能.对于 Ext 实现的 one page one application ,对于外网访问也就产生了噩梦似的加载(除非你的网速足够快).为了缓解(不是解决,从代码加载方面考虑)加载慢的问题可以对JavaScript进行压缩.JavaScript的gzip静态压缩方法 一.将js格式文件压缩成gzjs格式.使用gzip.exe打包压缩后的JS文件,最后生成xx.js.gz,