通过压缩组件,可以显著减少HTTP请求和响应事件。这也是减小页面大小最简单的技术,但也是效果最明显的。

压缩JS,CSS代码有几种常用插件,YUI Compressor是个不错的选择。通过maven的YUI Compressor plugin可以方便的压缩项目中的前端代码。最简单便是将所有的文件一一压缩,看下pom.xml的配置:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 

    <groupId>KUI_demo</groupId> 

    <artifactId>KUI_demo</artifactId> 

    <version>1.0</version> 

    <packaging>jar</packaging> 

    <build> 

        <plugins> 

            <plugin> 

                <groupId>net.alchim31.maven</groupId> 

                <artifactId>yuicompressor-maven-plugin</artifactId> 

                <version>1.3.0</version> 

               <executions>

                <execution>

                    <!-- YUI Compressor has two goals: compress and jslint -->

                    <goals>

                        <goal>compress</goal>

                    </goals>

                </execution>

            </executions>

            <configuration>

                <failOnWarning>false</failOnWarning>

                <!-- Break contiguous output at this column number. -->

                <!-- If this is zero, you will get line breaks after every line in the aggregated file. -->

                <linebreakpos>-1</linebreakpos>

                <!-- Set your own suffix. [default: "-min"]-->

                <nosuffix>true</nosuffix> 

            </configuration>

            </plugin> 

        </plugins> 

        <resources> 

            <resource> 

                <directory>${basedir}/webapp</directory> 

                <includes> 

                    <include>**/*.js</include> 

                    <include>**/*.css</include> 

                </includes> 

            </resource> 

        </resources> 

    </build> 

</project> 

更进一步,将所有文件合并到同一个文件,可以减少HTTP请求。由于项目开发阶段并不会压缩所有代码,因此,可以采取通过一个JS引进所有其他文件。后期压缩的时候,将所有代码压缩进该文件。

看看复杂一点的需求:

  1. 先压缩文件,并排除部分已压缩的文件。
  2. 合并已压缩文件,并排除部分不需要合并的文件。
  3. 将压缩好的文件放到指定文件夹。

先看看合并的基本配置:

<project>

...

  <build>

    <plugins>

...

      <plugin>

        <groupId>net.alchim31.maven</groupId>

        <artifactId>yuicompressor-maven-plugin</artifactId>

        <executions>

          <execution>

            <goals>

              <goal>compress</goal>

            </goals>

          </execution>

        </executions>       

        <configuration>

          <nosuffix>true</nosuffix>

          <aggregations>

            <aggregation>

              <!-- remove files after aggregation (default: false)

              <removeIncluded>true</removeIncluded>

              -->

              <!-- insert new line after each concatenation (default: false) -->

              <insertNewLine>true</insertNewLine>

              <output>${project.build.directory}/${project.build.finalName}/static/all.js</output>

              <!-- files to include, path relative to output's directory or absolute path-->

              <!--inputDir>base directory for non absolute includes, default to parent dir of output</inputDir-->

              <includes>

                <include>${basedir}/src/licenses/license.js</include>

                <include>**/*.js</include>

              </includes>

              <!-- files to exclude, path relative to output's directory

              <excludes>

                <exclude>**/*.pack.js</exclude>

                <exclude>**/compressed.css</exclude>

              </excludes>

              -->

            </aggregation>

          </aggregations>

        </configuration>

      </plugin>

...

    </plugins>

  </build>

...

</project>

注意aggregation的inputDir非常重要,它默认为outputDir的上一层。并且aggregation的动作是在yuicompression之后的。因此,上面的配置实际上是先将代码压缩到${project.build.directory}/${project.build.finalName}目录下再进行aggregation。

          <configuration>

               <!-- exclude file witch not need to compress -->

                <excludes>

                    <exclude>**/*.min.js</exclude>

                    <exclude>**/KUI.js</exclude>

                </excludes>

                <includes>

                    <include>**/*.js</include>

                    <include>**/*.css</include>

                </includes>

                <linebreakpos>-1</linebreakpos>

                <nosuffix>false</nosuffix> 

                <suffix>.min</suffix> 

                <preProcessAggregates>false</preProcessAggregates>

                <preserveAllSemicolons>true</preserveAllSemicolons>

                <failOnWarning>false</failOnWarning>

                <aggregations>

                    <!--  JS concatenation -->

                    <aggregation>

                        <inputDir>${project.build.directory}</inputDir>

                        <!-- Insert a new line after each concatenation. -->

                        <insertNewLine>true</insertNewLine>

                        <removeIncluded>false</removeIncluded>

                        <!-- Pathname of final output. -->

                        <output>${basedir}/webapp/KUI.min.js</output>

                        <!-- Files to include, path relative to output directory OR absolute path -->

                        <includes>

                            <inlcude>**/*.min.js</inlcude>

                        </includes>

                        <excludes>

                            <exclude>**/KUI.js</exclude>

                            <exclude>**/KUI.min.js</exclude>

                        </excludes>

                    </aggregation>

                    <!--  CSS concatenation -->

                    <aggregation>

                        <inputDir>${project.build.directory}</inputDir>

                        <!-- Pathname of final output. -->

                        <output>${basedir}/webapp/content.min.css</output>

                        <!-- Files to include, path relative to output directory OR absolute path -->

                        <includes>

                            <include>**/*.min.css</include>

                        </includes>

                    </aggregation>

                    <excludes>

                        <exclude>**/content.min.css</exclude>

                    </excludes>

                </aggregations>

            </configuration>

还有一点要注意,如果对象的属性名为Javascript的保留字,并且没有用引号引住属性名,那么在压缩的时候会抛出错误。

var test = {

long : “test”  // throw error when compress

}

var test = {

“long” : “test”  // correct.

}

前端代码优化: 使用YUI Compressor的更多相关文章

  1. YUI Compressor for Sublime text2

    YUI Compressor 是一个用来压缩 JS 和 CSS 文件的工具,采用Java开发. 最近压缩文件,常使用在线压缩的方式来压缩文件,一来多有不便,二来如果没有网络,只能搁置了.本文来描述如何 ...

  2. GitHub 上一份很受欢迎的前端代码优化指南

    http://segmentfault.com/a/1190000002587334?utm_source=weekly&utm_medium=email&utm_campaign=e ...

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

    一.Asp.Net 自带静态文件压缩工具包 Microsoft.AspNet.Web.Optimization http://www.nuget.org/packages/Microsoft.AspN ...

  4. YUI Compressor压缩失效的场景-eval和with

    一.官方文档的说明 in the face of evil features such as eval or with, the YUI Compressor takes a defensive ap ...

  5. YUI Compressor

    简介 根据雅虎卓越性能团队的说法,40%到60%的雅虎用户拥有空闲缓存体验,所有页面浏览量中约有20%是使用空缓存完成的(请参阅Tenni Theurer在YUIBlog上的这篇文章)有关浏览器缓存使 ...

  6. YUI Compressor JS和CSS压缩工具使用方式(使用前安装JDK)

    压缩测试: 选中 test.js, 执行右键菜单“Process with &YUICompressor”,会生成 test-min.js. 注意事项: 1. 需要安装 JDK >= 1 ...

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

    在开发中编写的js.css发布的时候,往往需要进行压缩,以减少文件大小,减轻服务器的负担.这就得每次发版本的时候,对js.js进行压缩,然后再发布.有没有什么办法,让代码到了服务器上边,它自己进行压缩 ...

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

    YUI Compressor 压缩 JavaScript 的内容包括: 移除注释 移除额外的空格 细微优化 标识符替换(Identifier Replacement) YUI Compressor包括 ...

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

    YUI Compressor 压缩 JavaScript 的内容包括: 移除注释 移除额外的空格 细微优化 标识符替换(Identifier Replacement) YUI Compressor 包 ...

随机推荐

  1. PyDev-Python的Eclipse插件安装

    PyDev官网:http://marketplace.eclipse.org/node/114 安装方法: 1,打开Eclipse,如果是初次使用,关闭欢迎页面,否则无法按照我说的方法安装. 2,打开 ...

  2. 对 HTTP 304 的理解(转-并增加自己的测试)

    作者:吴俊杰 性别:男 邮箱:sshroot@126.com 文章类型:原创 博客:http://www.cnblogs.com/voiphudong/ 转自: http://www.cnblogs. ...

  3. DimDate

    CREATE TABLE [dbo].[DimDate]( [DateKey] int NOT NULL , [FullDate] DATE NOT NULL , [MonthNumberOfYear ...

  4. HDU 5834 [树形dp]

    /* 题意:n个点组成的树,点和边都有权值,当第一次访问某个点的时候获得利益为点的权值 每次经过一条边,丢失利益为边的权值.问从第i个点出发,获得的利益最大是多少. 输入: 测试样例组数T n n个数 ...

  5. Codeforces 519E A and B and Lecture Rooms [倍增法LCA]

    题意: 给你一棵有n个节点的树,给你m次询问,查询给两个点,问树上有多少个点到这两个点的距离是相等的.树上所有边的边权是1. 思路: 很容易想到通过记录dep和找到lca来找到两个点之间的距离,然后分 ...

  6. springMVC整合spring和hibernate4(适合于框架的搭建)

    基础的东西不再详细说明,只在这里说明一下主要的配置文件,如何通过配置文件取得sessionFactory . 步骤: 1:在web.xml中引入springmvc的配置文件springmvc.xml( ...

  7. cocos2dx一个场景添加多个层

    首先创建两个layer,以下是头文件 #pragma once#include "cocos2d.h"USING_NS_CC;class BackgroundLayer : pub ...

  8. [HDU 4787] GRE Words Revenge (AC自动机)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4787 题目大意: 给你若干个单词,查询一篇文章里出现的单词数.. 就是被我水过去的...暴力重建AC自 ...

  9. [原]iptables的NAT策略

    #*nat #:PREROUTING ACCEPT [:] #:POSTROUTING ACCEPT [:] #:OUTPUT ACCEPT [:] # #-A PREROUTING –s IP1 - ...

  10. ORACLE快速彻底Kill掉的会话(转载)

    转载:http://www.cnblogs.com/kerrycode/p/4034231.html 在ORACLE数据库当中,有时候会使用ALTER SYSTEM KILL SESSION 'sid ...