Web的性能到底有多重要?有数据显示,每提高100ms的加载速度,就可以提高1.11%的转化率。下面有一些文章也阐释了性能的重要性:
https://www.doubleclickbygoogle.com/articles/mobile-speed-matters/
http://resources.mobify.com/2016-Q2-mobile-insights-benchmark-report.html
性能下降很多时候带来的最大变化就是用户体验的极度糟糕,加载页面需要等好久啦等等情况的出现,会让人没有耐心。谈到用户体验,用户体验由多方面组成,不同的因素共同作用,其中性能是其中非常重要的一个因素。
谈到Web的性能,需要考虑的点是很多很多的,性能优化是个无底洞确认无疑,但是做为一个做为一个精益求精的工程师,性能必须要考虑到。我觉得从技术的角度来说,我非常喜欢Dan Abramov的一个演讲中讲到的,他虽然讲的是用户体验的角度,但是我觉得他也是从技术的角度来讲的,任何的性能问题都可以归类为两大类:

  1. CPU
  2. IO

性能通常是由两个部分组成,一个是自身机器的限制(包括用户端的PC也好手机也好,也包括服务端的机器),还有一部分就是端之间的通信效率问题 - 通常主要是服务端和用户端之间的通信,当然服务端和服务端之间的通信也会成为瓶颈。这最会指向的一个问题就是在我们的资源是有限的,不管是计算资源、带宽资源、电量等等都是有限,我们做的就是在有限资源里面,如果达到效率最佳和体验最佳的平衡。
所以可以从两个方面来讲性能。

计算资源有限

要知道最后的最后,我们的网站都是要跑到用户的电脑或者手机上的,所以不得不考虑,用户使用的设备到底是什么情况。计算资源有限的情况下,我们需要考虑:

  • 我们引入了很多的JS库,引入了各种CSS库,这些库虽然让我们的开发变得容易了,有时候也会是性能杀手。
  • 大量的JS操作,大量的DOM操作,大量的触发重绘,这都告诉我们用户设备是吃不消的,我们必须要要在写代码的时候就考虑到这些问题,如何减少不必要的计算开支。用户的设备有的是PC,但现在的话其实是越来越移动化,大家都在用手机来浏览网页,手机的资源更加的有限。
  • CPU是有限,GPU也是有限的,磁盘的IO也是有限,所以我们需要尽可能的减少计算量。或者把不重要的计算延后,以达到最好的体验。

通信资源有限

我们现实生活中大带宽、网速都是有限制的,所以在Web应用中,获取资源的速度也是一个大问题,我们需要考虑:

  • 首页的加载速度,首页加载的重要性是不言而喻的,因为在首页加载前,什么都没有,那还谈什么用户体验啊!!!
  • 各类资源的大小:js、css文件、图片、视频。这就需要逼着我们尽可能的做到:
    • 减少js、css文件的大小,减少首次加载分文件,或者拆分这些资源文件,分批加载,懒加载,按需加载,压缩等等方法齐上阵
    • 减少大图片,压缩图片,按需加载
  • 考虑到不同通信协议,方式也会不同,比如http1.1 和 http2 不同,前者可能需要我们更多的合并文件,而后者分散为小文件更合适

对于用何种策略,还是要按照不同的情景来考虑和使用。提到了很多的点,后面也具体写写这些点该怎么做吧。。

这里只是一个overview,后面自己一点点总结一下工作、学习到的各种优化方式。