前端性能优化

215 阅读3分钟

这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战

之前在做C端H5页面时,曾经做过首屏秒开的性能优化。本篇文章是对当时所做的性能优化点,做回顾和整理。

分析页面

  • 做性能优化之前,需要对页面进行做具体的分析。chrome的network可以对请求和文件做一些粗粒度的分析。细粒度的可以使用Chrome的高级功能performance。

加载资源优化

  • 加载资源的优化,主要是体现在减少资源请求和下载时间两方面。 我实践过的有:对icon图片进行合并,减少请求(现在打包工具就可以实现);背景图片使用webp格式来减少文件体积。
  •     HTML、js、css开启服务端gzip压缩。一般开启gzip压缩后文件体积会减少70左右;还有就是js、css等静态资源缓存(使用现有的浏览器缓存策略,一方面是在服务器配置里面配置缓存策略,另一方面是高级一些缓存方法,例如Service-Worker等,不过这个我还没有实际,尝试过简单的pwa,还是能看出缓存的效果的)。
  • 使用preload提前加载,prefetch预判加载,来做一些预处理,可以提高页面文件加载压力;同时使用CDN让静态资源加载更快;在分析页面资源后,将非首屏必须的资源异步加载。这个我当时是原生js直接使用的,使用的是script标签的async属性。vue项目在打包时,webpack配合import就可以实现按需加载。还可以做DNS预解析,在一些浏览器的a标签是默认打开dns预解析的,在https协议下dns预解析是关闭的,加入mate后会打开。
<meta http-equiv="x-dns-prefetch-control" content="on">

<link rel="dns-prefetch" href="//www.zhix.net">## <meta http-equiv="x-dns-prefetch-control" content="on">

<link rel="dns-prefetch" href="//www.zhix.net">

页面渲染优化

  • 页面渲染优化的话,就是一些很基础的知识,最主要的就是减少对DOM的操作。例如CSS放head中,JS放body后,主要是js是边解析边执行,会阻塞页面;减少重绘和重排;另外操作DOM对DOM操作做缓存,对多个DOM进行操作时,尽量合并在一起执行(合并DOM插入)。另外对事件节流、防抖,比如最页面滚动的监听等,就需要做节流处理。

交互上优化,提升性能体验

  • 交互上,我做的优化主要包括图片懒加载和骨架屏。这个主要是从交互体验上做提升。其实有时候技术瓶颈是一方面,如果站在用户的角度,去做改善或者解决问题,效果会非常出乎意料。

Webpack等工具,在打包过程中,做优化

这个主要是使用打包工具打包时,使用工具已有的功能,对项目打包优化,主要还是对文件进行拆分,目的在于减少文件体积。

总结

这个是我对之前做性能优化的思路和注意点的整理。不是很全,后面会再进行补充。另外具体优化细节还没有写,其实每个大点还是有很多内容,可以单独深入。