资讯专栏INFORMATION COLUMN

不得不提的前端性能优化

xushaojieaaa / 1134人阅读

摘要:对于广大的前端开发人员来说,网站构建本是家常便饭其中也不得不涉及到性能优化的问题。将不影响首屏的资源和当前屏幕资源不用的资源放到用户需要时才加载,可以大大提升重要资源的显示速度和降低总体流量按需加载会导致大量重绘,影响渲染性能。

对于广大的前端开发人员来说,网站构建本是家常便饭;其中也不得不涉及到性能优化的问题。之前也有接触过,今天总结一下这方面的技巧,下面是我的一下认知,欢迎探讨:

 

Number One:加载优化

  1. 减少HTTP请求。

    因为手机浏览器同时响应请求为4个请求(Android支持4个,iOS 5后可支持6个),所以要尽量减少页面的请求数,首次加载同时请求数不能超过4个。a) 合并CSS、JavaScript;b) 合并小图片,使用雪碧图(CSS SPRITE);

  2. 缓存。

    使用缓存可以减少向服务器的请求数,节省加载时间,所以所有静态资源都要在服务器端设置缓存,并且尽量使用长Cache(长Cache资源的更新可使用时间戳)。

    a) 缓存一切可缓存的资源;b) 使用长Cache(使用时间戳更新Cache);c) 使用外联式引用CSS、JavaScript;

  3. 压缩HTML、CSS、JavaScript

    减少资源大小可以加快网页显示速度,所以要对HTML、CSS、JavaScript等进行代码压缩,并在服务器端设置GZip。a) 压缩(例如,多余的空格、换行符和缩进);b) 启用GZip;

  4. 确保无阻塞

    写在HTML头部的JavaScript(无异步),和写在HTML标签中的Style会阻塞页面的渲染,因此CSS放在页面头部并使用Link方式引入,避免在HTML标签中写Style,JavaScript放在页面尾部或使用异步方式加载

  5. 使用首屏加载

    首屏的快速显示,可以大大提升用户对页面速度的感知,因此应尽量针对首屏的快速显示做优化。

  6. 按需加载

    将不影响首屏的资源和当前屏幕资源不用的资源放到用户需要时才加载,可以大大提升重要资源的显示速度和降低总体流量(PS:按需加载会导致大量重绘,影响渲染性能)。

    a) LazyLoad;b) 滚屏加载;c) 通过Media Query加载;

  7. 预加载

    大型重资源页面(如游戏)可使用增加Loading的方法,资源加载完成后再显示页面。但Loading时间过长,会造成用户流失。对用户行为分析,可以在当前页加载下一页资源,提升速度;a) 可感知Loading(如进入空间游戏的Loading);b) 不可感知的Loading(如提前加载下一页);

  8. 压缩图片

    图片是最占流量的资源,因此尽量避免使用他,使用时选择最合适的格式(实现需求的前提下,以大小判断),合适的大小,然后使用智图压缩,同时在代码中用Srcset来按需显示(PS:过度压缩图片大小影响图片显示效果)。

    a) 使用智图(雪碧图);

    b) 使用其它方式代替图片(1. 使用CSS3 2. 使用SVG 3. 使用IconFont);

    c) 使用Srcset;

    d) 选择合适的图片(1. webP优于JPG 2. PNG8优于GIF);

    e) 选择合适的大小(1. 首次加载不大于1014KB 2. 不宽于640(基于手机屏幕一般宽度));

 

减少Cookie、避免重定向以及异步加载第三方资源

Cookie会影响加载速度,所以静态资源域名不使用Cookie。此外,重定向也会影响加载速度,所以在服务器正确设置避免重定向。最后,第三方资源不可控会影响页面的加载和显示,因此要异步加载第三方资源。

 

Number Two:脚本执行优化

* 脚本处理不当会阻塞页面加载、渲染,因此在使用时需当注意:

1.· CSS写在头部,JavaScript写在尾部或异步。

2. 避免图片和iFrame等的空Src

空Src会重新加载当前页面,影响速度和效率。

3. 尽量避免重设图片大小

重设图片大小是指在页面、CSS、JavaScript等中多次重置图片大小,多次重设图片大小会引发图片的多次重绘,影响性能。

4. 图片尽量避免使用DataURL。 

DataURL图片没有使用图片的压缩算法文件会变大,并且要解码后再渲染,加载慢耗时长。

 

Number Three:css优化

1. 尽量避免写在HTML标签中写Style属性。

· 避免CSS表达式CSS表达式的执行需跳出CSS树的渲染,因此请避免CSS表达式

· 移除空的CSS规则空的CSS规则增加了CSS文件的大小,且影响CSS树的执行,所以需移除空的CSS规则

· 正确使用Display的属性Display属性会影响页面的渲染,因此请合理使用a) display:inline后不应该再使用width、height、margin、padding以及floatb) display:inline-block后不应该再使用floatc) display:block后不应该再使用vertical-alignd) display:table-*后不应该再使用margin或者float

2.不滥用Float。

Float在渲染时计算量比较大,尽量减少使用

3. 不滥用Web字体。

Web字体需要下载,解析,重绘当前页面,尽量减少使用

4. 不声明过多的Font-size

过多的Font-size引发CSS树的效率

5. 值为0时不需要任何单位。

为了浏览器的兼容性和性能,值为0时不要带单位

6. 标准化各种浏览器前缀

a) 无前缀应放在最后

b) CSS动画只用 (-webkit- 无前缀)两种即可

c) 其它前缀为 -webkit- -moz- -ms- 无前缀 四种,(-o-Opera浏览器改用blink内核,所以淘汰)

7. 避免让选择符看起来像正则表达式

高级选择器执行耗时长且不易读懂,避免使用

 

Number Four:JavaScript执行优化

1. 减少重绘和回流

a) 避免不必要的Dom操作

b) 尽量改变Class而不是Style,使用classList代替className

c) 避免使用document.write

d) 减少drawImage

2. 缓存Dom选择与计算。

每次Dom选择都要计算,缓存它

3. 缓存列表.length。

每次.length都要计算,用一个变量保存这个值

4. 尽量使用事件代理,避免批量绑定事件

5. 尽量使用ID选择器。

ID选择器是最快的

6. TOUCH事件优化

使用touchstart、touchend代替click,因快影响速度快。但应注意Touch响应过快,易引发误操作

 

Number Five:渲染优化

1. HTML使用Viewport

Viewport可以加速页面的渲染,请使用以下代码

2. 减少Dom节点

Dom节点太多影响页面的渲染,应尽量减少Dom节点

3. 动画优化

a) 尽量使用CSS3动画b) 合理使用requestAnimationFrame动画代替setTimeoutc) 适当使用Canvas动画 5个元素以内使用css动画,5个以上使用Canvas动画(iOS8可使用webGL)

4. 高频事件优化

Touchmove、Scroll 事件可导致多次渲染a) 使用requestAnimationFrame监听帧变化,使得在正确的时间进行渲染b) 增加响应变化的时间间隔,减少重绘次数

5. GPU加速。

CSS中以下属性(CSS3 transitions、CSS3 3D transforms、Opacity、Canvas、WebGL、Video)来触发GPU渲染,请合理使用(PS:过渡使用会引发手机过耗电增加)

 

大致就这些吧,不一定能用上但是肯定有能用的上的,希望对大家有所帮助。

 

 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/1590.html

相关文章

  • 前端性能优化之Lazyload

    摘要:前端性能优化之前端冬晨技术分享懒加载简介前端工作中,界面和效果正在变得越来越狂拽炫酷,与此同时性能也是不得不提的问题。这样相对于直接性能得到更进一步提升,在功能上也没有什么问题。结语历史潮流浩浩荡荡,前端技术的发展也是日新月异。 前端性能优化之Lazyload @(Mob前端-冬晨)[JavaScript|技术分享|懒加载] [TOC] Lazyload 简介 前端工作中,界面和效果...

    charles_paul 评论0 收藏0
  • 前端性能优化之Lazyload

    摘要:前端性能优化之前端冬晨技术分享懒加载简介前端工作中,界面和效果正在变得越来越狂拽炫酷,与此同时性能也是不得不提的问题。这样相对于直接性能得到更进一步提升,在功能上也没有什么问题。结语历史潮流浩浩荡荡,前端技术的发展也是日新月异。 前端性能优化之Lazyload @(Mob前端-冬晨)[JavaScript|技术分享|懒加载] [TOC] Lazyload 简介 前端工作中,界面和效果...

    huaixiaoz 评论0 收藏0
  • Mysql范式与数据类型选择

    摘要:数据类型支持的数据类型有很多种,所以选择正确的数据类型对提高性能有着至关重要的作用。定长字符串类型,分配固定长度的空间。在保存某些定长字符串时比更有优势比如定长字符串,因为定长类型字符串不容易产生碎片。关于的数据类型选择,就写到这里。 良好的逻辑设计与物理设计是高性能的基石,当我们在设计数据表结构的时候,应该跟根据业务逻辑来分析具体情况,然后设计出比较合理,高效的数据表结构 在数据表结...

    Kross 评论0 收藏0
  • 拒信收割机の前端面经(CVTE,唯品会,百度)

    摘要:另外回答的时候要淡定,一些问题就算不懂也不能慌,要和面试官谈笑风生,然后尽量扯回到自己懂的东西上面大公司比如百度给我的感觉就是很重视基础思维和潜力。 —— 虽然我的offer少,但是我的拒信多啊 这几天终于闲下来,做一点微小的工作,整理了一些之前几家公司的前端面试题和个人经验,想做前端的师弟妹可以参考,也欢迎各同行大神来指教~ (以下问题不分先后,时间久远难免有些遗漏;很多问题面试官都...

    yzd 评论0 收藏0
  • 拒信收割机の前端面经(CVTE,唯品会,百度)

    摘要:另外回答的时候要淡定,一些问题就算不懂也不能慌,要和面试官谈笑风生,然后尽量扯回到自己懂的东西上面大公司比如百度给我的感觉就是很重视基础思维和潜力。 —— 虽然我的offer少,但是我的拒信多啊 这几天终于闲下来,做一点微小的工作,整理了一些之前几家公司的前端面试题和个人经验,想做前端的师弟妹可以参考,也欢迎各同行大神来指教~ (以下问题不分先后,时间久远难免有些遗漏;很多问题面试官都...

    callmewhy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<