前端性能优化

前端性能优化的方法
1.减少HTTP请求次数

   基本原理:在浏览器和服务器之间发生信息交换时,需要耗费大量时间,而一个正常的http请求是比较复杂的,平凡的发送http请求会大大降低运行速度;而当我们请求的网页中有多个图片、css、js时会频繁的与服务器建立连接,释放连接,会造成资源的浪费,所以减少http请求次数会提高性能;

   具体方法:尽量和并图片、css、js。

                   网速相同的情况下,加载一个100kb的图片比加载两个50kb的图片要快的多;

                   如果加载一个页面有5个css文件,则会发出5次http请求,如果合并成一个文件,只会发送一个http请求;

2.使用CDN加速

  基本原理:CDN是内容分发网络,网络上的静态资源即css、js均使用CDN分发,图片亦然;

                  将css放在顶部:网页上的资源加载是从上往下顺序加载的,所以css放在页面的顶部能够优先渲染页面,让用户感觉                    页面加载很快。

                   将js放在底部:加载js时会对后续的资源造成阻塞,必须得等js加载完才去加载后续文件,所以就把js放在页面底部                      最后加载。

3.减少DOM操作

   基本原理:对DOM操作的代价是非常大的,也是网页应用中的一个性能瓶颈;

   解决方法:修改和访问DOM元素会造成页面回流和重绘,所以需要合理的使用js变量存储内容,考虑大量DOM元素中循环的性能开销、减少DOM元素的查询和修改,查询时可将其赋值给局部变量。

4.正确理解重排和重绘

    基本原理:重绘就是在一个元素的外观被改变,但没有改变布局(宽高)如改变visibility、outline、背景色等等。

                    重排就是DOM的变化影响到了元素的几何属性(宽和高),浏览器会重新计算元素的几何属性,会使渲染树中受                       到影响的部分失效,浏览器会验证DOM树上的所有其他节点的visibility属性,这也是重排低效的原因。如:改变窗                     口大小、改变文字大小、内容的改变、浏览器窗口变化、style属性的改变等等。如果重排过于频繁,cpu使用率就                     会噌噌网上涨。

    解决办法:上面提到通过设置style属性改变节点样式的话,每设置一次都会导致一次重排,所以最好通过设置class的方式;                       有动画效果的元素,它的position属性应该设为fixed或absolute,这样不会影响其它元素的布局;如果功能需求上                     不能设置fixed或absolute,那么就权衡速度的平滑性.

                    总之:因为reflow有时不可避免,所以只能尽可能限制重排的影响。

5.使用JSON格式进行数据交换

     基本原理:JSON是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是                        Javascript原生格式,这意味着在javascript中处理JSON数据不需要任何特殊的API或工具包。

                 与XML序列化相比,JSON序列化后产生的数据一般要比XML序列化后数据体积小,所以在Facebook等知名网站                  中都采用lJSON作为数据交换方式。

    JS操作JSON:

                 在JSON中,有两个结构:对象和数组。

                 一个对象以 “ { ” 开始,“ } ” 结束。每个“名称”后跟一个 “ : ” ;“名称/值 对”之间使用 “ , ”(逗号)分隔。 名                 称用引号括起来;值如果是字符串则必须用引号括起来,数值型则不需要。如:
                var obj={"name":"darren","age":24,"location":"beijing"}
                数组是值(value)的有序集合。一个数组以 “ [ ” 开始, “ ] ” 结束。值之间使用 “ , ” (逗号)分隔。如:

                var jsonlist=[{"name":"darren","age":24,"location":"beijing"},    

                {"name":"weidong.nie","age":24,"location":"hunan"}];

               对这种数组和对象字面量的操作是非常方便且高效的。如果预先知道JSON结构的情况下,使用JSON进行数据传递                简直是太美妙了,可以写出很实用美观可读性强的代码。如果你是纯粹的前台开发人员,一定会非常喜欢JSON。
6.高效使用HTML和CSS样式

               基本原理:HTML是一门描述网页的语言,它使用标记标签描述网页;

                            CSS指层叠样式表;

               解决方法:精简CSS和JS,对css和js进行压缩,如可以使用grunt,glup等工具,也可以较为简单的人为的把css                               文件中的空格以及不需要的部分去掉。

                            删除重复的JS和CSS,重复调用脚本,除了增加额外的http请求,多次运算也会浪费时间,在IE和火狐                               中不管脚本是否缓存,他们都在重复运算js的问题。

7.图片压缩和使用Sprite

               基本原理:1.缩小图片分辨率;

                            2.改变图片格式;

                            3.降低图片保存质量

               图片精灵技术:把许多图片放到一张大图片里,通过CSS来显示图片的一部分; 

8.注意控制cookie大小和污染

                每次请求时都会带着cookie跑,所以要尽量减少cookie的大小,尽可能除去没用的cookie;

                cookie是有生命周期的,所以要注意设置合理的时间,可以提高用户的相应时间。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值