• 前端性能优化小结


    一. 浏览器渲染优化

    1. 构建DOM树

    过程:将字节转换为字符集 -> 根据w3c规定的token令牌进行词法解析生成结点 -> 根据嵌套规则生成DOM树形结构

    2. 构建CSSOM

    过程:与HTML类似

    3. 渲染树

    4. 总步骤

    • 处理HTML标记,生成DOM树
    • 处理CSS标记,生成CSSOM树
    • 将DOM树和CSSOM树融合成渲染树
    • 根据生成的渲染树计算确切位置和大小,又叫回流(重排)
    • 根据渲染树以及回流结果,得到绝对像素,进行绘制

    5. 优化方案

    • 语义化标签,如果不是w3c规定的标签,词法解析阶段会消耗更多时间

    • 避免深层嵌套,深层嵌套会导致生成DOM树过程进行多重递归,降低性能

    • 减少选择器层级,合理使用css预编译器(CSS从右往左解析选择器)

    • 尽早将CSS下载到客户端,充分利用HTTP多请求并发机制

      • 少量代码放入style,
      • 大量代码用link请求(不会阻塞),link放到头部,尽快开始请求,实现在生成DOM树同时请求数据
      • 尽量少用@import(阻塞执行)
    • 避免JS阻塞加载

      • 放到底部或者使用defer、async
    • 避免回流和重绘

      • 回流:元素尺寸或者位置改变导致重新计算位置和大小重新布局
      • 重绘:样式改变(位置、大小不变)导致重新绘制
      • 回流一定会重绘,重绘不一定回流

    避免回流的方法:

    • 使用vue/react数据驱动视图的模式开发
    • 分离读写操作:浏览器有批量渲染机制,如果连续同类型样式修改,浏览器会将其统一加载到队列中,然后进行统一渲染,如果读写穿插进行就会中断该操作,因此多次渲染
    • 样式集中改变,box.className="active"
    • 缓存布局信息,let curleft=box.offsetLeft
    • 使用文档碎片修改元素
    • 动画效果应用到脱离文档流的元素
    • CSS3硬件加速,transform/opacity/filters...

    二. DNS域名解析优化

    每次DNS解析时间预计20~200ms

    DNS解析顺序:

    • 浏览器缓存
    • 操作系统缓存
    • 路由器缓存
    • 本机hosts
    • 运营商DNS服务器缓存
    • 根域名服务器 -> 顶级域名服务器 -> 权威域名服务器

    优化:

    设置link标签执行DNS预获取,在生成DOM树的同时进行预解析并将结果写入缓存,提高响应速度

    <meta http-equiv="x-dns-prefetch-control" content="on">
    <link ref="dns-prefetch" href="//static.360buyimg.com"/>
    

    三. 网络优化

    减少http请求次数和资源大小

    • 资源合并压缩(webpack打包)
    • 字体图标和小图片base64编码
    • gzip压缩
    • 图片懒加载
    • 引入外部cdn

    应用缓存

    缓存位置:

    • Service Worker:浏览器独立线程缓存
    • Memory Cache:内存缓存
    • Disk Cache:硬盘缓存
    • Push Cache:推送缓存(HTTP2新增)

    各种操作触发的缓存处理:

    • 输入地址打开网页,查询disk Cache,若不存在则发起请求
    • F5刷新,先Memory Cache,后disk Cache
    • Ctrl+F5强制刷新,请求头设为(Cache-control:no-catche)进行请求

    传送门:HTTP缓存

  • 相关阅读:
    FRR and VFR
    MEC in 5G networks
    KNI
    SGX KMRA
    5G E2E issues
    物理层无线信道的特征
    PTP 时钟
    Ransim go through
    网页title闪动JavaScript实现消息提醒
    敏感词库
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/13234522.html
Copyright © 2020-2023  润新知