性能优化(更新中)

59 阅读2分钟

网络通信 http1.1协议优化:

  1. 多域名;css / js 一个接口,图片一个接口,接口一个域名。底层逻辑是在http1.1协议下一个tcp链接只能建立4-8个请求,多域名能提供并发请求的可能性。
  2. 精灵图/雪碧图,将多个图片合成一个图片。
  3. 合并小文件,跟精灵图一个道理。

http2.0协议优化 http1.1的优化都不管用了,他跟http1.1的区别是:

  1. http1.1是以文件的形式传输,2.0是以二进制来传输。
  2. http2.0 是用帧和流进行传输,他没有tcp的链接数限制,可以发出多个请求,1.1是用字符串进行传输。
  3. 2.0会压缩首部字段/服务器推送
  4. http缓存:cache-control:max-age()

资源加载

  1. API 请求

(1)使用promise并发请求 (2)取消重复的请求(比如tab切换) (3)浏览器缓存api接口,比如5分钟以内再次访问接口都走缓存 (4)如有必要可以使用serverce worker(pwa)

  1. 静态资源加载

    (1)走cdn,开启负载均衡 (2)动态加载(用到的时候再加载) (3)引用资源的时候开启预加载/预解析(preload/preFetch) (4) js资源可以使用defer,在浏览器解析渲染页面的时候并行下载js但是不执行

  2. 图片文件

    (1)图片选择优先顺序:webp -> jpg(看格式) -> png (2)图片使用渐进式加载(先模糊后清晰);一点一点显示的加载方式因为用户思维角度已经放弃 (3)图片的大小尽量和显示时的大小尽量一致


代码优化

  1. CSS优化

(1)少用通配符和标签选择器:选择器是从右往左解析的 (2)less嵌套层级不要太深 (3)写通用css

  1. JS优化
  • 使用预先执行模式:不同环境下取不同的配置,可以使用立即执行,而不是用的时候再去走函数然后执行js.
  • 适当使用代理模式,比如查找本地存储数据的时候,可以用map代理一下。因为map访问速度很快
  • 能用css3做动画的地方就不要使用js。一定要使用也尽量使用requestAnimationFrame
  • 使用switch代替if esle;使用for of代替for in和for循环
  • 不要再render里写三目运算符/函数,因为这样写会让里面的代码每次都重新渲染
  • 模块代码的解藕