性能优化-WEB篇

本文介绍了WEB性能优化的七大策略,包括Minify资源文件、合并资源、使用CDN、调整script位置、模块化JS、缓存管理和进度提示。推荐使用Grunt进行资源压缩,通过CDN提高加载速度,将script置于页面底部,利用RequireJS等实现模块化,并通过Pace.js和ProgressBar.js展示加载进度。同时,文章提出通过WebPageTest和Chrome Developer Tool检查优化效果,预告了下篇将探讨Server端优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



由于系统的WEB层直接面向用户,所以在优化中是重中之重,不废话,直接上干货。

1. Minify 资源文件以加快资源下载
Minify资源文件目前有两种方案:
第一种是使用后台语言,例如Google的Closure,YUI的Compressor,它们都可以和Ant完美结合。但是这种方式有一个致命的弱点,就是效率非常慢!一个项目动不动就要半个小时,如果中间遇到压缩错误,需要重新来过,中间的痛苦可谓谁用谁知道。
第二种是使用目前大行其道的Grunt,Grunt基于NodeJS,灵活可配置,效率更是不可同日而语。上面半个小时的时间,Grunt只要2秒!而且Grunt能做到的可不仅仅是这些....


2.合并资源文件
HTTP每次请求都要进行三次握手,消耗性能。所以尽量合并一些常用的JS为一次请求,可以大大提高页面的加载速度。比如JQuery,Fileupload等这些所有页面都需要的类库。

3.CDN加速,CND全称内容分发网络
这个词后面的水很深,我就不详细的讲了
简单来说,浏览器对每个域名有限制并发请求个数,可以使用CDN来消除这方面的限制,另一方面分散各个服务器的压力。
目前国内比较出名的百度静态资源CDN http://cdn.code.baidu.com/,有兴趣可以看一下。
淘宝首页的资源文件加载,N多的域名,代表N多的服务器...


4.Script标签放置页面尾部
这个非常重要,但是最容易被忽视!script标签加载时会Hold住整个页面,导致页面空白。大家可以尝试移动script标签到页面底部,加载显示速度绝对上升。
百度首页,script全都放在了页面底部


5. 模块化JS
JS的不易管理一直为开发人员所诟病,在架构上本身已经是一种挑战,在大型项目中,如果可以模块化JS,本身就受益无穷。在模块化JS后,就可以轻松实现动态加载,受益无穷
模块化JS可以使用RequireJS,SeaJS等相关框架

6.缓存
前台缓存在现在的开发中已经无处不在,加之HTML5 Storage,IndexedDB的盛行,将来更多的数据可以缓存在前台。浏览器自带的缓存机制不太合理,所以建议搭配后台处理。
浏览器在缓存文件时,是以请求的URL为主键的。我们可以在每个资源文件的请求中,加上系统的版本号,并在Server端filter相关的请求,设置资源永不失效。
这样在系统升级时,不再需要用户清除页面缓存,也可以灵活的管理资源文件。
Spring的mvc-resource是这方面的经典案例
百度的JQuery文件在本地缓存180天。


7. 告诉用户,需要等待多久...
这个就不用多说,页面多加一些小菊花,用户就不觉得慢了。
很多ProgressBar都只只提供样式,而不提供逻辑。
这里推荐两款非常好用的Progressbar:Pace.js以及ProgressBar.js ,加入页面,自动监控页面请求,显示进度。非常好用。


前六条都是通过各种方式提升系统的吞吐量和并发量,来达到优化的效果。这些方式都是很粗放简单的,有兴趣可以直接在系统中尝试一下。

很多读者独到这里,不免要问,这些我都做了,如何验证我优化的效果呢?
如果你的系统是在线上,可以使用WebPageTest来检验你的系统,它会告诉你性能的瓶颈在哪里

如果你的系统是线下,可以使用Chrome Develop Tool来检验。

下一篇,将讲解Server端的优化,内容涉及缓存,并发,数据库访问等内容,敬请期待。

如果您有兴趣,请关注我的微信公众号,谢谢。








由于系统的WEB层直接面向用户,所以在优化中是重中之重,不废话,直接上干货。

1. Minify 资源文件以加快资源下载
Minify资源文件目前有两种方案:
第一种是使用后台语言,例如Google的Closure,YUI的Compressor,它们都可以和Ant完美结合。但是这种方式有一个致命的弱点,就是效率非常慢!一个项目动不动就要半个小时,如果中间遇到压缩错误,需要重新来过,中间的痛苦可谓谁用谁知道。
第二种是使用目前大行其道的Grunt,Grunt基于NodeJS,灵活可配置,效率更是不可同日而语。上面半个小时的时间,Grunt只要2秒!而且Grunt能做到的可不仅仅是这些....


2.合并资源文件
HTTP每次请求都要进行三次握手,消耗性能。所以尽量合并一些常用的JS为一次请求,可以大大提高页面的加载速度。比如JQuery,Fileupload等这些所有页面都需要的类库。

3.CDN加速,CND全称内容分发网络
这个词后面的水很深,我就不详细的讲了
简单来说,浏览器对每个域名有限制并发请求个数,可以使用CDN来消除这方面的限制,另一方面分散各个服务器的压力。
目前国内比较出名的百度静态资源CDN http://cdn.code.baidu.com/,有兴趣可以看一下。
淘宝首页的资源文件加载,N多的域名,代表N多的服务器...


4.Script标签放置页面尾部
这个非常重要,但是最容易被忽视!script标签加载时会Hold住整个页面,导致页面空白。大家可以尝试移动script标签到页面底部,加载显示速度绝对上升。
百度首页,script全都放在了页面底部


5. 模块化JS
JS的不易管理一直为开发人员所诟病,在架构上本身已经是一种挑战,在大型项目中,如果可以模块化JS,本身就受益无穷。在模块化JS后,就可以轻松实现动态加载,受益无穷
模块化JS可以使用RequireJS,SeaJS等相关框架

6.缓存
前台缓存在现在的开发中已经无处不在,加之HTML5 Storage,IndexedDB的盛行,将来更多的数据可以缓存在前台。浏览器自带的缓存机制不太合理,所以建议搭配后台处理。
浏览器在缓存文件时,是以请求的URL为主键的。我们可以在每个资源文件的请求中,加上系统的版本号,并在Server端filter相关的请求,设置资源永不失效。
这样在系统升级时,不再需要用户清除页面缓存,也可以灵活的管理资源文件。
Spring的mvc-resource是这方面的经典案例
百度的JQuery文件在本地缓存180天。


7. 告诉用户,需要等待多久...
这个就不用多说,页面多加一些小菊花,用户就不觉得慢了。
很多ProgressBar都只只提供样式,而不提供逻辑。
这里推荐两款非常好用的Progressbar:Pace.js以及ProgressBar.js ,加入页面,自动监控页面请求,显示进度。非常好用。

前六条都是通过各种方式提升系统的吞吐量和并发量,来达到优化的效果。这些方式都是很粗放简单的,有兴趣可以直接在系统中尝试一下。

很多读者独到这里,不免要问,这些我都做了,如何验证我优化的效果呢?
如果你的系统是在线上,可以使用WebPageTest来检验你的系统,它会告诉你性能的瓶颈在哪里

如果你的系统是线下,可以使用Chrome Develop Tool来检验。

下一篇,将讲解Server端的优化,内容涉及缓存,并发,数据库访问等内容,敬请期待。

如果您有兴趣,请关注我的微信公众号,谢谢。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值