• 前端性能优化的点


    前端性能优化的点:

       网络层面

       构建层面

       浏览器渲染层面

       服务端层面

    涉及的功能:

     资源的合并与压缩

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

        浏览器渲染机制

        懒加载预加载

        浏览器存储

        缓存机制

        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

           

      

  • 相关阅读:
    迁移到MSYS2 与 Qt 工具链注意的几个事情(g++在链接时,符号依赖项查找遵循从左至右的顺序,但qmake会自动合并造成错误。使用脚本给Mingw32-make创造出一个局部的VC编译环境)
    MSYS2 瘦身小攻略(使用junction)
    Boost.Http
    MySQL中临时表的基本创建与使用教程(CREATETEMPORARY TABLE)
    Javascript设计模式
    CORS
    axure & Markman
    JSON序列化那点事儿
    软件开发生涯
    CoffeeScript NgComponent
  • 原文地址:https://www.cnblogs.com/zhuMother/p/13283270.html
Copyright © 2020-2023  润新知