webapp 不像传统页面,它生命周期更长,在手机端上,硬件环境并没有pc上那么好。所以性能的优化尤为重要。 webapp的性能优化主要分为两个方面 网络请求优化 和 页面渲染优化 , 我们对于性能优化主要通过这连个方面来处理。

压缩资源文件

我们在使用某些框架的时候(例如:JQuery), 会发现有两个文件 jquery.js 和 jquery.min.js, jquery.min.js 的体积会小很多,这样在请求的时候会比较快。

所以在项目中使用到的资源文件(js、css、image)在发布之前需要进行压缩处理, 这里有些在线的压缩的工具 在线压缩, 如果使用写项目管理工具, 可以考虑用 gulp 请求。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var gulp = require('gulp'),
uglify = require('gulp-uglify'),
rename = require('gulp-rename'),
sourcemaps = require('gulp-sourcemaps'),
minifycss = require('gulp-minify-css'); gulp.task('js', function(){
return gulp.src('./test.js')
.pipe(sourcemaps.init())
.pipe(rename({suffix: '.min'}))
.pipe(uglify())
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('./'));
}); gulp.task('css', function(){
return gulp.src('./test.css')
.pipe(rename({suffix: '.min'}))
.pipe(minifycss())
.pipe(gulp.dest('/'));;
});

合并请求

开发过程中,维护一个很长的js或是css文件是一个很困难的事情,常常会吧它分为很多的小得js和css文件,但是如果按照传统的方式写script/link 标签加载,会多很多请求,有http 1请求的原因,每个请求都会有一个rtt(请求回路)时间,一旦请求数量增多,那么请求的时间也会变长。 在发布之前我们可以使用一些工具将这些资源文件合并为一个, 我们常使用gulp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var gulp = require('gulp'),
uglify = require('gulp-uglify'),
rename = require('gulp-rename'),
concat = require('gulp-concat'),
sourcemaps = require('gulp-sourcemaps'),
minifycss = require('gulp-minify-css'); gulp.task('js', function(){
return gulp.src('./app/**/**.js') //app 下所有的js 文件
.pipe(sourcemaps.init())
.pipe(concat('./app.js')) //合并所有文件
.pipe(gulp.dest('./'))
.pipe(rename({suffix: '.min'}))
.pipe(uglify())
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('./'));
}); gulp.task('css', function(){
return gulp.src('./app/**/*.css')
.pipe(concat('./app.css')) //app 下所有的 css文件
.pipe(gule.dest('./'))
.pipe(rename({suffix: '.min'}))
.pipe(minifycss())
.pipe(gulp.dest('/'));;
});

cdn 和 gzip

CDN 的全称是 Content Delivery Network ,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

GZIP 最早由 Jean-loup Gailly 和 Mark Adler 创建,用于UNⅨ系统的文件压缩。我们在Linux中经常会用到后缀为.gz的文件,它们就是GZIP格式的。现今已经成为Internet 上使用非常普遍的一种数据压缩格式,或者说一种文件格式。
HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来.一般对纯文本内容可压缩到原大小的40%.这样传输就快了,效果就是你点击网址后会很快的显示出来.当然这也会增加服务器的负载. 一般服务器中都安装有这个功能模块的。

我们可以将静态的资源发布到cdn上,并开启 gzip 会大大的提高页面加载数据

lazyLoad

webapp 首屏加载速度是一个重要的指标,那么怎么让我们首页最快速度加载出来呢?首页中我们能直接看到的只有一屏,那么剩下的我们可以做 lazyload, 先加加载能直接看到,让后异步延迟加载剩下的内容。

数据缓存

webapp 中有很多和后台的交互,首页加载的时候可以先使用上次的缓存数据,等请求成功后再刷新这部分的显示, 在一些短暂时间的重复请求,可以使用 sessionStorage 缓存这些数据, 使用 一些手段 设置缓存时间,短暂时间的内的重复请求就可以直接从缓存中获取数据了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//封装请求方法
function getData(url, params, onloadSuccess){
var key = url; //使用 url + params 做key
for(var str in params){
key += str += params[str];
}
if(sessionStorage.getItem(key)){
//如果有缓存直接从缓存中取
onloadSuccess(JSON.stringify(sessionStorage.getItem(key)));
reutrn ;
}
$.ajax({
url: url,
data: data,
dataType: 'json',
type: 'post',
success: function(data){
sessionStorage.setItem(key, data); //缓存数据
onloadSuccess(data);
}
});
}

css动画GPU加速消除闪屏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.animate{
-webkit-transform: translate3d(0, 0, 0);
-moz-transform: translate3d(0, 0, 0);
-ms-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
backface-visibility: hidden; -webkit-perspective: 1000;
-moz-perspective: 1000;
-ms-perspective: 1000;
perspective: 1000;
}

js动画

有些动画需要一些js控制无法使用css动画的情况,我们可以考虑使用js动画来做。可以使用window.requestAnimationFrame.

window.requestAnimationFrame() 这个方法是用来在页面重绘之前,通知浏览器调用一个指定的函数,以满足开发者操作动画的需求。这个方法接收一个函数作为参数,改函数在重绘前调用。

它稳定性比 setTimeout 要好,但是并不是所有的浏览器都支持这个api, 我们需要一个兼容性代码处理。

1
2
3
4
5
6
7
8
9
10
window.requestAnimationFrame = (function() {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback) {
return window.setTimeout(callback, 1000 / 60);
};
})();

布局优化

PC 上有很多用float来做的布局,float的布局在需要更大的计算量,在页面渲染的时候严重影响到了加载速度,尽量考虑用 inline 和 inline-block 替代, flex box 是专为响应式设计布局方式,在移动端兼容性良好,可以考虑大范围使用,这里推荐下阮一峰大大的教程 Flex 布局教程:语法篇

优化页面上的dom数量

在mobile端,如果页面中的dom数量过多,在页面滚动的时候会出现卡顿,闪烁等等不良的情况,所以我们要删除一些页面上不必要的dom元素或者将一些dom元素作为延迟加载。

优化dom查询性能

先看一下这个部分的代码

1
2
3
for(var i = 0; i< 100; i++){
var a = $('.test');
}

上面的代码每次循环的时候都会去进行一次dom查询,显然是不必要的消耗,我们需要在dom查询之前缓存,避免不必要的dom操作。

1
2
3
4
var a = $('.test');
for(var i = 0; i< 100; i++){
// do somethings
}

webapp 性能优化的更多相关文章

  1. cordova/phonegap/webapp性能优化方法

    1.有条件可以自己做UI,不要用框架.用框架的话不要用jquery mobile,用sencha touch或者jqmobi(app framework) 2.不要在服务器生成UI,在本地生成. 3. ...

  2. 移动H5前端性能优化指南

    移动H5前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loading4. 基于联通3G网 ...

  3. H5 缓存机制浅析 移动端 Web 加载性能优化

    腾讯Bugly特约作者:贺辉超 1 H5 缓存机制介绍 H5,即 HTML5,是新一代的 HTML 标准,加入很多新的特性.离线存储(也可称为缓存机制)是其中一个非常重要的特性.H5 引入的离线存储, ...

  4. javascript基础-性能优化

    优化点 性能检测 基调网络 http://www.cesule.com/cesule/status/show/3496d91653a14743af2bd2e261aee204 阿里测 http://a ...

  5. tomcat之性能优化

    tomcat是我们常用的web容器,它的性能高低直接影响到应用对外提供服务的能力和用户的体验,所以tomcat的优化至关重要.对于单台tomcat服务器而言,优化主要是两方面:内存优化和配置优化(例如 ...

  6. cordova性能优化方法

    做了几个cordova的项目,觉得webapp性能的确是比不上原生,在IOS上还好,安卓上特别的明显.技术群里面很多人都在说cordova是个渣,没用之类的.其实只是很多人没有深入去了解,做点小优化, ...

  7. 移动H5前端性能优化指南[转]

    移动H5前端性能优化指南 米随随2015.01.23 移动H5前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首 ...

  8. 移动 H5(PC Web)前端性能优化指南

    原文地址https://zhuanlan.zhihu.com/p/25176904?utm_source=wechat_session&utm_medium=social&utm_me ...

  9. [转]移动H5前端性能优化指南

    移动H5前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loading4. 基于联通3G网 ...

随机推荐

  1. CSDN 正整数异或值问题

    题目详情: http://student.csdn.net/mcs/programming_challenges?page=4 给你n个正整数,请你计算出有多少对数的异或值小于等于k. 输入描写叙述: ...

  2. Ubuntu的防火墙UFW

    这是个简单的防火墙,可以直接在命令行启停,也可安装提图形端gufw *安装 sudo apt-get install ufw gufw *常用命令 sudo ufw enable //启动 ufw d ...

  3. WEB服务器3--IIS7.0安装和配置

    安装Web服务器(IIS) 点击开始菜单->所有程序->管理工具->服务器管理器,启动服务器管理器,界面如下: 在服务器管理器中,选择角色,你将可以看到角色总视图. 点击添加角色,会 ...

  4. Day_8.《无懈可击的web设计》-巧妙地浮动效果

    > 本章内容略显陈旧,主要描述如何用浮动替代表格布局,并没有什么出彩的地方.不过其间提到了清楚浮动的几种方法,那么今天就总结一下如何清楚浮动吧. #### 为什么要清除浮动?虽说是清除浮动,其实 ...

  5. winsocket <研究了一天的成果>

    首先,这都是套路( ▼-▼ ) 头文件     #include <WinSock.h> #include <Winsock2.h> 用这个,这个是升级版 各个函数解释 1.W ...

  6. CDZSC_2015寒假新人(1)——基础 i

    Description “Point, point, life of student!” This is a ballad(歌谣)well known in colleges, and you mus ...

  7. hadoop官网介绍及如何下载hadoop(2.4)各个版本与查看hadoop API介绍

    1.如何访问hadoop官网?2.如何下载hadoop各个版本?3.如何查看hadoop API? 很多同学开发都没有二手资料,原因很简单觉得不会英语,但是其实作为软件行业,多多少少大家会英语的,但是 ...

  8. [ZooKeeper研究]二 ZooKeeper协议介绍

    前面介绍了ZooKeeper的基本知识,这一节我们介绍一下ZooKeeper使用的协议.只有了解了ZooKeeper的协议,才能更好得理解ZooKeeper源代码的实现.ZooKeeper使用的是Za ...

  9. Can't create/write to file '/tmp/#sql_3105_0.MYI' (Errcode: 13)

    最近的项目中由于临时存储空间太大了.索性把tmp目录删除了.结果访问出现 Can't create/write to file '/tmp/#sql_3105_0.MYI' (Errcode: 13) ...

  10. js判断字符串中的英文和汉字

    有时需要判断一个字符是不是汉字,比如在用户输入含有中英文的内容时,需要判断是否超过规定长度就要用到.用 Javascript 判断通常有两种方法. 方法一 正则表达式,test()方法返回true 或 ...