前端性能优化

149 阅读2分钟

全局负载均衡和缓存系统

  • CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术
  • CDN的缓存主要关注两个点(命中率和回源率),系统中命中率越高越好回源率越低越好,一般系统的回源率在5%以下

服务器通信层面

  • 资源合并
    雪碧图
  • 域名分片(浏览器对同一域名最多同时发起6-8个tcp链接)
    域名切分

数据传输层面

  • 强缓存
    <-- cache-control:max-age = 600
    <-- expire: Mon, 4 Set 2020:01:01 GMT

  • 协商缓存
    <-- last-modify:
    --> if-modify-since:
    <-- etag: W/"5f2cbe0f-2382"
    --> if-none-match: W/"5f2cbe0f-2382"

数据传输层-压缩

  • 数据压缩
    GZIP压缩或者br压缩
  • 代码文件压缩
    HTML\CSS\JS中的注释、空格、长变量名等等
  • 静态资源
    字体图标,去除元数据,缩小尺寸及分辨率,使用jpg或者webp格式
  • 头与报文 http1.1中减少不必要的头
    减少cookie的数据量

HTTP2头部压缩

  • 臃肿的请求头
    平均460字节的首部
  • 专门的HPACK压缩算法
    索引表: 客户端和服务端会共同维护一个静态索引表和一个动态索引表,静态的包含61中常见的头部字段信息
    霍夫曼编码

HTTP2 二进制帧

  • http1.x 文本字符分割的数据流
    解析慢且容易出错
  • 二进制
    帧长度、帧类型、帧标识

HTTP2 链路复用

http2.0采用服务器响应等待的时间利用tcp链接传输信息

node如何监测性能

node --prof index.js node --prof-process ./isolate.latev8.log > profile.txt

下面的代码可以分析node日志

前端代码层面

  1. html语义化标签加强dom解析
  2. 多使用伪元素,减少js多dom的查找遍历
  3. 尽量使用css实现效果,不用js实现效果
  4. 逻辑与展示解耦,避免不必要的js引擎启动(dom解析的过程中尽量避免js引擎的启动,比如html中直接嵌入js代码)
  5. 减少作用域查找和闭包,避免==,使用块级作用域

vue、react等客户端渲染(CSR)

  • “白屏”时间更长,用户体验不好
    SSR:首页的数据由服务端整合好
  • html中无内容,SEO不友好

主流服务端渲染方案

vue nuxt.js
react next.js

静态站点生成方案(SSG)

  • 专门的SSG方案(框架)
    Gatsby vue
    Gridsome react

总体优化方案

  1. 编码层面
  2. 编译打包阶段
  3. 网络层面