基于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秒, ...
随机推荐
- acdream 1211 Reactor Cooling 【边界网络流量 + 输出流量】
称号:acdream 1211 Reactor Cooling 分类:无汇的有上下界网络流. 题意: 给n个点.及m根pipe,每根pipe用来流躺液体的.单向的.每时每刻每根pipe流进来的物质要等 ...
- _00013 一致性哈希算法 Consistent Hashing 新的讨论,并出现相应的解决
笔者博文:妳那伊抹微笑 博客地址:http://blog.csdn.net/u012185296 个性签名:世界上最遥远的距离不是天涯,也不是海角,而是我站在妳的面前.妳却感觉不到我的存在 技术方向: ...
- Nginx+Varnish
Nginx+Varnish 实现动静分离,为服务器分流,降低服务器负载 相必大家在看加快网站响应速度方面的文章时,都提过这么一条:动静分离.那怎样实现动静分离呢,这里笔者就亲自搭建相关服务实现动静分离 ...
- 左右xcode的重构选项的一些理解
Rename(重命名):对标示符进行重命名,以获得更好的代码可读性,这些标示符包含类,方法或者函数的名称. Extract(抽取):将你在XCode种选择的代码抽取到一个新的方法或函数中. Creat ...
- 从控制台读取password - C#
Tip : 从控制台读取password 语言: C# ______________________________________________________________ 在登陆Lin ...
- C和指针 (pointers on C)——第十四章:预处理器
第十四章 预处理器 我跳过了先进的指针主题的章节. 太多的技巧,太学科不适合今天的我.但我真的读,读懂.假设谁读了私下能够交流一下.有的小技巧还是非常有意思. 预处理器这一章的内容.大家肯定都用过.什 ...
- 邮箱password复位图
blog宗旨:用图说话 辅助文字说明: 长处:用户系统完毕接口部分.界面留给业务自行设计. 缺点:邮箱发送邮件定制模板,没有完毕松耦合. 改进点:邮箱的准备发送邮件模板. 版权声明:本文博客原创文章, ...
- Xamarin.Android 在VS下调试时提示 In mgmain JNI_OnLoad 程序“Mono”已退出 解决办法
原因是使用了破解版的 Xamarin,调试时不能使用共享库
- 使用DbUtils实现CRUD
commons-dbutils 这是 Apache 提供了一个开源组织 JDBC工具库,它是JDBC简包,学习成本低,和使用dbutils可以大大简化jdbc的工作量,同一时候也不会影响程序的性能.因 ...
- w3wp与w3svc
如何找到w3wp与w3svc的对应关系 在生产环境中,一般会有多个IIS进程在运行,这里面可能是有Web Garden的设置,也可能是有多个application pool在运行.而我们经常在 ...