基于GruntJS前端性能优化
在本文中,如何使用GruntJS为了使治疗简单的前端性能优化自己主动,我写了一个完整的样本放在Github上。能够參考一下。关于Yahoo的前端优化规则请參考:Best
Practices for Speeding Up Your Web Site
前端性能主要有图片的压缩。JS和CSS的合并、压缩。对全部静态文件的文件依据其内容加上hash,然后把CSS、HTML等文件里对全部的静态文件名称替换成加上hash的新文件名称。对全部的静态内容的路径上加上CDN的URL。最后将全部的静态文件上传到七牛CDN上去。以下我们按功能来说一下。
图片压缩
很多图片尤其是png图片有时候含有大量无意义的填充,添加图片的大小。我们能够通过contrib-imagemin对全部的图片进行压缩优化,从而减小图片的大小。
依据我们使用经验来看,一般能够压缩5%到10%左右。
JS和CSS的文件的合并压缩
合并JS和CSS能够大量的降低HTTP请求,达到优化前端性能的目的。
同一时候CSS和JS文件是静态文件,能够压缩到很小的大小。
GruntJS官方提供了contrib-concat,contrib-cssmin,contrib-uglify等相应的插件来做相应的事情。我们这里由于要文件名称的替换,使用了usemin插件,它会自己主动调用上述几个插件的。所以在我们的Gruntfile.js里并没有这3个插件的配置信息,而仅仅是在task列表里调用了这几个插件。
详细请參考:usemin。
静态文件缓存处理
为了最大程度的提高浏览器的载入速度,最好的方法是让浏览器将全部的静态文件都缓存在client。这里的缓存是指expire和cache-control的max-age,而不是Last-Modified。由于使用Last-Modified 和 If-Modified-Since还是会发出请求的,仅仅是没有更新就返回304状态码而max-age则是不会发出请求的,而是直接使用本地的缓存。
使用缓存的面临的一个比較在的问题是假设文件有更新假设清理缓存或者假设让用户下载最新的文件。
一种做法是静态文件加上版本,比如 style.css?v=1.1。这样的做法能够达到清除缓存的目的。可是维护起来相对麻烦。比較版本没有办法自己主动化,没有办法推断文件是否有更新。第二种做法是对文件内容进行hash。然后将hash值增加到文件名称中。比如style.abd1q2.css。这样就非常easy进行自己主动化处理。我们这里使用了yeoman开发的filerev插件,它能够对文件内容进行MD5运算,然后将运算后的hash加到文件名称中去,这样就非常easy推断文件是否被改动,同一时候它能够和usemin进行完美的结合起来。
Hash处理后文件名称的替换
对CSS和JS进行压缩合并以及对全部静态资源进行filerev处理后,原来HTML、CSS、JS等静态资源的引用文件名称就须要替换成新的文件名称了。比如HTML中对CSS和JS的引用,CSS中对图片的引用。我们使用了Yeoman开发的usemin进行替换。它的工作原理是,对须要处理的文件里的静态资源,在指定的目录查找经过filerev处理过的相应文件。假设找到则替换成相应的文件。
比如。我们在代码中对CSS的引用代码例如以下:<link
type="text/css" href="style.css">,usemin会在指定的目录以下寻找类似style.abd1q2.css的文件,假设找到则会把我们的CSS引用代码自己主动替换成:<link type="text/css" href="style.abd1q2.css">。
详细请參考:usemin。
CDN路径的替换
开发过程中对全部静态资源的引用都是指向项目自己的domain。假设要使用CDN,则须要将全部静态资源的引用Domain指向CDN的domain。这里使用GruntJS插件cdn来对全部静态资源进行全局替换。
上传静态资源到CDN
当以上步骤完毕后就能够将全部的静态文件上传到CDN了。
七牛官方提供了NodeJS的SDK,可是貌似比較难用。我们样例里使用了第三方开发的NodeJS模块qn,很easy,详见:qn。我的方法是画面和CSS/JS穿越了那里上传的文件夹,图片和CSS/JS加上不同的前缀分别为。由于7牛不具备的build文件夹内。见cdn.js文件。
说明
- grunt build
- grunt upload
基于GruntJS前端性能优化的更多相关文章
- CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化
一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...
- 移动H5前端性能优化指南
移动H5前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loading4. 基于联通3G网 ...
- CSS3与页面布局学习笔记(八)——浏览器兼容性问题与前端性能优化方案
一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...
- web前端性能优化指南(转)
web前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loading4. 基于联通3G网络 ...
- Web前端性能优化教程04:压缩组件
本文是Web前端性能优化系列文章中的第四篇,主要讲述内容:压缩组件.完整教程可查看:Web前端性能优化 基础知识 gzip编码:gzip是GUNzip的缩写,是使用无损压缩算法的一种,最早是用于Uni ...
- 移动H5前端性能优化指南(转载)
移动H5前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loading4. 基于联通3G网 ...
- 前端性能优化(三)——传统 JavaScript 优化的误区
注:本文是纯技术探讨文,无图无笑点,希望您喜欢 一.前言 软件行业极其缺乏前端人才这是圈内的共识了,某种程度上讲,同等水平前端的工资都要比后端高上不少,而圈内的另一项共识则是--网页是公司的脸面! 几 ...
- web前端性能优化指南
web前端性能优化指南 web前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loadin ...
- Web前端性能优化——如何提高页面加载速度
前言: 在同样的网络环境下,两个同样能满足你的需求的网站,一个"Duang"的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒, ...
随机推荐
- 理解和运用javascript中的call及apply
call是为了改变函数上下文context而存在的,换言之,就是改变函数内部this的指向.因为javascript存在[定义时上下文],[运行时上下文]及[上下文]是可以改变的.例如:var fun ...
- uva 10817 Headmaster's Headache 出发dp 位计算
出发dp,用在一些议题的操作非常~ 给出s个课程.m个教师.n个求职者,教师必须招聘.然后招聘一些求职者,使得每一门课都至少有两个老师能教.问题就转换成了招聘哪些求职者使得花费最少.由于s范围小于8 ...
- POJ 3422 Kaka's Matrix Travels(费用流)
POJ 3422 Kaka's Matrix Travels 题目链接 题意:一个矩阵.从左上角往右下角走k趟,每次走过数字就变成0,而且获得这个数字,要求走完之后,所获得数字之和最大 思路:有点类似 ...
- 乐在其中设计模式(C#) - 状态模式(State Pattern)
原文:乐在其中设计模式(C#) - 状态模式(State Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 状态模式(State Pattern) 作者:webabcd 介绍 允 ...
- 双链表---LinkedList的重写
重写Linkedlist类,改写为MyLinkedList,未继承Iterable类. public class MyLinkedList<AnyType> { private int t ...
- grep在一个特定的文件搜索文件夹keyword
grep -R --include="*.*"(文件名匹配) key(keyword) dir(夹) eg.在当前文件夹搜索xml关键文件172.19.32.22 grep -R ...
- IE6浏览器的一些问题
背景图像缓存 // IE6 background image caching fix. try { document.execCommand("BackgroundImageCache&qu ...
- JCombox
A component that combines a button or editable field and a drop-down list. The user can select a val ...
- “MEAN”技术栈开发web应用
“MEAN”技术栈开发web应用 上一篇我们讲了如何使用angular搭建起项目的前端框架,前端抽象出一个service层来向后端发送请求,后端则返回相应的json数据.本篇我们来介绍一下,如何在no ...
- 照片教你eclipse通过使用gradle 打包Android
gradle其他优点不说,在android当应用程序公布.假设你要算一些渠道,gradle 在节目包装散装优势:下面给大家介绍的图形 按eclipse当出口 选择Android:例如下面的附图 一步一 ...