前端性能优化的点

前端性能优化的点:

   网络层面

   构建层面

   浏览器渲染层面

   服务端层面

涉及的功能:

 资源的合并与压缩

 图片编解码原理和类型选择

    浏览器渲染机制

    懒加载预加载

    浏览器存储

    缓存机制

    PWA

    Vue-SSR 

    React-SSR

性能调优工具

 performance

 layers

1、dns是否可以通过缓存减少dns查询时间?

2、网络请求的过程走最近的网络环境?

3、相同的静态资源是否可以缓存?

4、能否减少请求http请求大小?

5、减少http请求?

6、服务端渲染?

一、资源合并与压缩

BS架构

深入理解http请求是前端优化的核心,web前端是动态增量加载静态资源的过程。

1.资源的合并与压缩

 html压缩---->包括空格---->使用在线网站进行压缩

 css压缩----->无效代码的删除

 js压缩与混乱---->无效字符的删除,缩减和优化--->代码保护,使用uglifyjs对js进行压缩

 文件合并------>合并成一个js文件--->几个js文件增加了n-1个网络延迟

          经过代理服务器

首屏渲染问题 ===》公共库合并,不同页面的合并,见机行事,随机应变

 缓存失效问题  ===》

 开启gzip

2.图片相关的优化

一张jpg图片的解析过程

png8-->256色+支持透明

png24--->2^24色 + 不支持透明

png32--->2^24色 + 支持透明

jpg不透明的

png支持透明,浏览器支持好

webp压缩程度好(有兼容性问题)

svg矢量图,代码内嵌,相对较小,图片样式相对简单的场景

jpg-->不需要透明的时候用

png-->透明图片

webp-->安卓支持的好(如果支持webp就用这个格式)

svg矢量图-->图片样式相对简单的业务场景

优化点:

      进行图片压缩

      css雪碧图:多张图合成一张图

      image inline==>base64内嵌到html中,减少网站的http请求数量

      转成webp

3.css和js的装载与执行

     html ,css,js加载过程

     HTML--->DOM -->

            ====>renderTree-->Layout--->paint

     CSS--->CSSOM-->

     HTML渲染过程:

      顺序执行,并发加载 :词法分析,并发加载,并发上限

      是否阻塞 

      依赖关系

      引入方式

   CSS阻塞:

      CSS head中阻塞页面的渲染

      CSS阻塞 js 的执行

      CSS不阻塞外部脚本的加载

  JS阻塞: 直接引入的js阻塞页面的渲染(通过async,defer)

     js不阻塞资源的加载

     js顺序执行,阻塞后续js逻辑的执行

4.懒加载与预加载

   懒加载:图片进入可视区域之后请求图片资源     

      电商图片很多,页面很长的业务场景适用

      减少无效的资源的加载

      并发加载的资源过多会阻塞js 的加载,影响网站的正常使用

方法:<img src="preview.png"  data-url="" /> 监听scroll,进入可视区域

        需要明确img的height占位区域

     zepto.lazyload.js

预加载:图片等静态资源在使用之前提出请求

    资源使用到时能从缓存中加载,提升用户体验

    页面展示的依赖关系维护

方法:1.<img src=""  style="display:none" />

     2.var image = new Image() ,使用image对象

    image.src="*****"

         3.XmlHttpRequest

         4.preload.js库

5.重绘与回流

(1) .用translate替代top改变

(2).用opacity替代visibility

(3).不要一条一条的修改DOM的样式,预先定义好class,然后修改DOM的className

(4).把DOM离线后修改,比如先把DOM给display:none(有一次Reflow),然后你修改100次,然后再把它显示出来

(5).不要把DOM节点的属性放在一个循环里面,当成循环的变量

(6).不要使用table布局,可能很小的一个小改动会造成整个table的重新布局

(7).动画实现的速度的选择

(8).对于动画新建图层 transform:translateZ(0)

(9).启用GPU硬件加速   transform:translate3d(0,0,0)

6.理解localstorage,cookie,sessionstorage,indexdb

  cookies:

  localstorage:

  sessionstorage:

  理解pwa和service worker

       

  

原文地址:https://www.cnblogs.com/zhuMother/p/13283270.html