提高网站性能的 5 个 Grunt任务

在之前我多次提过如今关心的主要问题是,如何实现良好的性能以及你应该如何努力实现web页面的快速响应。在我的一些关于JavsScript API的文章中,比如 介绍Resource Timing API 及 深入User Timing API,我对拖慢你的项目的根源进行了全面分析。在年前,Craig Buckler在他的文章-《The Complete Guide to Reducing Page Weight》中也涉及到这个话题。

如果你没有停留在过去,你可能使用过一些任务自动管理工具(比如 Grunt 或 Gulp)来改善我们的工作流程,它们可以自动完成我们之前要手动完成的工作。在这篇文章中我将会描述5个Grunt任务,帮助我们提高我们的网页性能。

grunt-contrib-imagemin

我想说的第一个任务是 grunt-contrib-imageimin 。我想先讨论它的原因是,图片是拖慢网站性能的主要杀手!

如果你看过 HTTParchive.org 上的统计,你会发现图片占了整个页面大小的63%还多。如此臃肿的原因是图片通常没有被压缩到尽可能小的程度。grunt-contrib-imageimin是可以用来解决这个问题的其中一个任务。

这个任务拥有以下的一些优化器,它们可以压缩web上的绝大多数图片格式:

  • gifsicle压缩GIF图片
  • jpegtran压缩JPEG图片
  • optipng压缩PNG图片
  • svgo压缩SVG图片

该任务配置的一个示例如下所示:

imagemin: {
dist: {
options: {
optimizationLevel: 5
},
files: [{
expand: true,
cwd: 'src/images',
src: ['**/*.{png,jpg,gif}'],
dest: 'dist/'
}]
}
}

这个配置可以通过使用optimizationLevel选项来实现高程度的优化。这个值范围从0到7,默认为3。在这种情况下图片优化指的是对那些图片格式为png,jpg或gif,并且位于“src/images”文件夹及它的所有子文件夹的图片进行优化。优化后的图片将存储在“dist”文件夹中。

grunt-contrib-uglify

grunt-contrib-uglify 任务用来压缩JavaScript文件。这个任务删除你源码中的所有不必要的空格,并且重命名变量和函数以便使用尽可能短的名字。

你将会常常使用这个任务中的一些选项是sourceMap和banner。前者在同一目录下创建一个源映射文件作为目标文件。为了启用这个选项你必须设置它为true(默认值为false)。banner是压缩输出文件的前置字符串,你通常可以在那写上你的文件或库或框架的名称、它的版本、作者名和许可。

为了让你对压缩源有个认知,假设你拥有以下的代码:

var MyApplication = function() {
var data = 'hello';
this.sum = function(first, second) {
return first + second;
}
this.showData = function() {
return data;
}
};

压缩过程会把上面的代码转化为以下代码:

var MyApplication=function(){var a="hello";this.sum=function(a,b){return a+b},this.showData=function(){return a}};

这个工具的示例配置如下所示:

uglify: {
dist: {
options: {
sourceMap: true,
banner: '/*! MyLib.js 1.0.0 | Aurelio De Rosa (@AurelioDeRosa) | MIT Licensed */'
},
files: {
'dest/output.min.js': ['src/input.js'],
}
}
}

grunt-contrib-cssmin

顾名思义, grunt-contrib-cssmin 是用来压缩CSS文件的。跟 grunt-contrib-uglify 任务类似,它也提供一个banner选项。

这个任务的一个简单配置为:

cssmin: {
dist: {
options: {
banner: '/*! MyLib.js 1.0.0 | Aurelio De Rosa (@AurelioDeRosa) | MIT Licensed */'
},
files: {
'dist/css/style.min.css': ['src/css/**/*.css']
}
}
}

这个例子压缩存储在”src/css”及其子文件夹的所有CSS文件,并将结果存储在一个命名为“style.min.css”的样式表中,它位于“dist/css”文件夹下。另外,这个配置在这个压缩文件的顶部增加了一个banner。

grunt-uncss

另一个处理CSS的任务是 grunt-uncss 。这个任务从一个项目中删除未使用的CSS,因此会减少了最终CSS文件的大小,从而提高了下载时间。如果你正在使用一个像Bootstrap或Foundation的框架开发,它是特别适合的。通过阅读 官方文档 ,你会发现这个任务有一些重要的局限性。

一些值得一提的不错选项是ignore,它允许我们指定的选择器列表不应该被删除,ignoreSheets允许我们忽略指定样式表。

一个使用这个任务的例子如下所示:

uncss: {
dist: {
options: {
ignore: [/js-.+/, '.special-class'],
ignoreSheets: [/fonts.googleapis/],
},
files: {
'dist/css/unused-removed.css': ['src/index.html', 'src/contact.html', 'src/service.html']
}
}
}

grunt-contrib-htmlmin

在本文中我想讨论的最后一个Grunt任务是 grunt-contrib-htmlmin ,这是一个用来压缩HTML代码的任务。它不会对你的网站加速很多,因为它通常只可以为你节省几Kb内容,如果你正使用gzip压缩你的内容的话,它帮助甚至会更低。因此,如果你想要压缩你的HTML,恩……祝贺你,这意味着你的网站已经优化的相当不错啦。

尽管如此,在处理网站性能上要遵循的哲学是每个Kb都很重要。所以,让我们看看将这个任务集成到我们的工作流的一个简单的配置:

htmlmin: {
dist: {
options: {
removeComments: true,
collapseWhitespace: true
},
files: [{
expand: true,
cwd: 'src',
src: '**/*.html',
dest: 'dist/'
}]
}
}

上面的代码处理所有放在“src”目录及其子文件夹的页面,对这些页面中的每一个,这个任务删除了它找到的所有注释及不必要的空格。并将结果存储在“dist”目录中。

结语

在本文中,我向您介绍了可以轻松提高你的网站性能的五个Grunt任务。它们很简单,你真的没有借口去不使用,不去用更快的服务提供用户更好的体验。我希望你喜欢这篇文章,并尽快应用。

你曾经用过它们么?它们提高你的网站多少性能?有没有一些其他你喜欢的任务记你想要与我们分享的呢?

提高网站性能的 5 个 Grunt任务//////////////////z的更多相关文章

  1. PHP提高网站性能的一些方法

    前段时间面试问到了这个问题,回答的不是很全面,就去问了度娘,得到了一些比较全的答案,由于出处较多就没法确定原文出处了.下面是分享的答案. 一.大型网站性能提高策略: 大型网站,比如门户网站,在面对大量 ...

  2. 利用squid 反向代理提高网站性能

    部分转自:http://www.ibm.com/developerworks/cn/linux/l-cn-squid/ Squid 反向代理的实现原理 目前有许多反向代理软件,比较有名的有 Nginx ...

  3. 利用 squid 反向代理提高网站性能(转载)

    本文在介绍 squid 反向代理的工作原理的基础上,指出反向代理技术在提高网站访问速度,增强网站可用性.安全性方面有很好的用途.作者在具体的实验环境下,利用 DNS 轮询和 Squid 反向代理技术, ...

  4. 用CSS开启硬件加速来提高网站性能

    国外一篇文章,有点意思,转载过来,准备尝试下~ 中文地址:http://www.cnblogs.com/rubylouvre/p/3471490.html 原文地址:http://blog.teamt ...

  5. 用CSS开启硬件加速来提高网站性能(转)

    翻译文章,原文地址:http://blog.teamtreehouse.com/increase-your-sites-performance-with-hardware-accelerated-cs ...

  6. CSS开启硬件加速提高网站性能

    国外一篇文章,有点意思,转载过来,准备尝试下~ 中文地址:http://www.cnblogs.com/yzw7489757/ 原文地址:http://blog.teamtreehouse.com/i ...

  7. CSS开启硬件加速来提高网站性能

    原文永久链接 CSS animations, transforms 以及 transitions 不会自动开启GPU加速,而是由浏览器的缓慢的软件渲染引擎来执行. 那我们怎样才可以切换到GPU模式呢, ...

  8. 使用ant对JS/CSS 进行压缩以提高网站性能

    减少HTTP请求是优化网站速度的一个重要手段, 所以对javascript/css两种文件进行压缩或合并都是非常必要的. 这里介绍利用ANT来自动进行文件合并和压缩. 3.1. javascript文 ...

  9. 利用Apache配置http expires值提高网站性能

    HTTP头中有个expires参数,设置一个未来的时间,在这时间以前,浏览器会先从cache读取,如果没有再从服务器中读取.对于像图片,css,script等静态内容,只需发一次http reques ...

随机推荐

  1. 关于SASS--->推荐使用

    作为前端(html.javascript.css)的三大马车之一的css,一直以静态语言存在,HTML5火遍大江南北了.javascript由于NODE.JS而成为目前前后端统一开发语言的不二之选.只 ...

  2. Linux下rar命令详解

    Linux下rar命令详解 用法: rar <命令> -<选项1> ….-<选项N> < 操作文档> <文件…> <@文件列表…> ...

  3. Centos 安装了 Wkhtmltopdf 却依旧显示 无法打印pdf

    Odoo里判断wkhtmlpdf是否安装的代码在 openerp/tools/misc.py 文件中: def find_in_path(name): path = os.environ.get('P ...

  4. Daily Scrum 10.25

    今天我们在分析数据库的时候发现还有一些这方面知识上的不足,花费一些额外的时间做功课.这说明当时我们的plan没有做好,但是我们基本还处在进度上. 下面是今天的Task统计:

  5. linux笔记六-------文件权限设置

    1.文件(目录)权限本身划分:读read   写write   执行execute 权限从用户的角度划分:主人权限user    同组用户权限group    其他组用户的权限other music. ...

  6. phpwind < v6 版本命令执行漏洞

    phpwind/sort.php 会定期每天处理一次帖子的浏览量.回复量.精华版排序 代码直接使用savearray将数据库查询出来的内容写入php文件,savearray出来的参数,都使用" ...

  7. PHP后门新玩法:一款猥琐的PHP后门分析

    0x00 背景 近日,360网站卫士安全团队近期捕获一个基于PHP实现的webshell样本,其巧妙的代码动态生成方式,猥琐的自身页面伪装手法,让我们在分析这个样本的过程中感受到相当多的乐趣.接下来就 ...

  8. 配置samba服务一例

    问题: 在/data/share目录下建立三个子目录public.training.devel用途如下 public目录用于存放公共数据,如公司的规章制度 training目录用于存放公司的技术培训资 ...

  9. 数组API

    1.数组的创建 var arrayObj = new Array();//创建一个默认数组,长度是0 var arrayObj = new Array(size);//创建一个size长度的数组,注意 ...

  10. ACM Binary String Match

    #include <stdio.h> #include <string.h> #include <stdlib.h> void SubString(char sub ...