web前端性能优化方案

前端性能优化方案

测试代码性能的工具:

 

1. Profiler

2. JSPerf(http://jsperf.com/nexttick-vs-setzerotimeout-vs-settimeout)

3. Dromaeo

目的:

① 从用户角度而言,优化能让页面加载得更快、对用户得操作响应更及时,能为用户提供更友好的体验

②从服务商角度而言,优化能减少页面请求次数,减少请求所占带宽,能够节省可观的资源。

前端优化的途径大致可以分为两种

①页面级别的优化:例如HTTP请求数、脚本的无阻塞加载、内联脚本的位置优化

②代码级别的优化:js中的DOM操作,CSS选择符优化以及HTML结构优化

瓶颈:

1、缓存

分析:大多数页面没有对动态HTML页面进行缓存,因为html页面是变化的。这将对站点的Speed Index(速度参数)造成直接的影响,Speed Index能够反映视觉元素的平均完成程度,这是提升用户体验的一个重要方面

解决方案:

 

  • 利用低TTL(Time To Live生存时间值)对基础页面进行缓存---减少HTML请求次数进而卸载资源站的负载
  • ajax---利用ajax动态创建多页面组件,这使我们可以对多种存储进行缓存响应,包括session storage和local storage。可缓存的ajax可以减少发往源站服务器的请求次数

2、压缩

分析:很多站点没有对字体进行压缩

解决方案:

 

  • 对于自有的字体,可以在源站服务器进行压缩,或者在使用代理和CDN的前提下,在最后一公里进行压缩。
  • 使用GZIP

3、使用多重JS框架

解决方案:

  • js脚本合并
  • 将外部脚本置底
  • 异步js
  • Lazy Load Javascript和mini库

页面级优化(7个)

1、减少HTTP请求数

  • 合理设置HTTP缓存:能缓存的越多越好,能缓存的越久越好。
  • 资源合并和压缩:如果可以的话,尽可能的将外部的脚本、样式进行合并(CSS Sprites:合并css图片);另外css、js、image都可以用相应的工具进行压缩
  • Inline Images:使用data:URL scheme的方式将图片嵌入到页面或者CSS中

2、异步请求callback、异步执行脚本

3、Lazy Load Javascript:只有在需要加载的时候加载

随着js框架流行,越来越多的站点使用起了框架,不过一个框架往往包括很多的资源,这些功能并不是每个页面都需要的。为了节省资源和时间,目前有两种做法:mini版本和Lazy Load

4、避免重复的资源请求:这种情况主要是由于疏忽或者页面由多个模块拼接而成,然后每个模块都请求了同样的资源

代码级别优化(也可作为写代码的规范)

Javascript 

1、避免DOM操作,因为DOM操作很费时,如果脚本中包含大量的DOM操作需要注意以下几点:

a. HTML Collection(HTML收集器,返回的是一个数组内容信息)

在脚本中,docement.images、getElementByTagname()返回的都是一个HTMLCollection类型的集合,类似数组。不过在访问性能上则比数组差的多,因为这个集合并不是静态的。每次访问该集合都会重新执行这个查询从而更新查询结果

b. reflow 和repaint

不要使用document.write()---会重绘整个页面

2、不要使用eval()、with()语句

3、对象声明直接用{},数组声明直接用[],不需要实例化,因为浏览器对常用的数据类型做了优化处理

4、字符串拼接:在js中使用“+”来拼接效率比较低,因为每次运行都要开辟新的内存。可以使用join()方法

5、事件委托,解决了“事件处理程序过多”的问题,因为每个函数都是对象,都会占用内存,内存的对象越多,性能就越差。利用事件委托可以设置更少的事件处理程序,来管理更多的事件

6、

  • 能用原生js实现的,就不要用第三方的插件,因为原生的方法执行效率更高
  • js代码压缩
  • js文件写在body底部

jQuery

1、使用#id去寻找element

jQuery中最快的选择器是ID选择器($("#id")),因为他直接映射为js的getElementById()方法,id唯一

2、在class前边使用Tags

<input class = "on">

$("input.on")

jQuery中最慢的选择器是class选择器,在IE中它循环整个DOM。

3、缓存jQuery对象

$(".id").css("font-size","20px");


//使用缓存
var $a = $(".id");     //保存jQuery变量到一个本地变量中
$a.css("font-size","20px");

4、利用链式结构

写更少的代码,是js更轻量

5、事件委托

6、

  • 代码压缩
  • js文件写在body底部

CSS

1、能使用css实现的效果,就不要使用js,因为css的性能比js的性能高

2、尽量将样式写在单独的css文件里,在head中引用:如果css放在其他的地方,浏览器可能还没有下载和解析到CSS就已经开始渲染页面了,这就导致页面从无CSS状态跳转到CSS状态,用户体验比较糟糕。

将代码写在单独的css文件中的好处:

  • 内容和样式分离,易于管理和维护
  • 减少页面体积
  • css文件可以被缓存、重用,维护成本低

3、不使用@import

4、避免使用复杂的选择器,层级越少越好(最好不要超过三层)

5、精简页面的样式文件,去掉不用的样式

多个不同页面同时引用同一个css文件,会造成两个问题:

  • 样式文件偏大,影响加载速度
  • 浏览器依旧会进行多余的样式匹配,影响渲染时间

解决方法:根据当前页面需要的css去合并当前页面用到css文件

6、利用css继承减少代码量

7、慎重使用高性能属性:浮动、定位

HTML

确保占用最少的内存,可以让页面获得更好的性能,即优化内存占用,执行中的代码只保存必要的数据,一旦数据不再有用,最好将其值设置为null来释放引用---解除引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值