前端常见的性能优化

前端常见的性能优化

1.减少HTTP请求次数和请求的大小

  • 雪碧图(图片精灵)
  • 图片base64 (webpack中可以配置)
  • 尽量使用字体图标或者SVG等矢量图
    • 减少HTTP请求次数或者减少请求内容的大小
    • 渲染更快:因为它们是基于代码渲染的,而对于位图(png/jpg/gif)是需要先把图片编码再渲染
    • 不容易失真变形
  • 图片懒加载(延迟加载)
  • 音频取消预加载
    • preload = ' none' 这样可以增加第一次渲染页面的速度,当需要播放的时候在加载
  • 再客户端和服务器进行信息交互的时候,对于多项数据我们尽可能基于json格式来进行传送(XML格式要比JSON格式要大)
  • 用WebSocket代替ajax轮询实现消息推送
  • 把页面中的css/js/图片等文件进行合并压缩
    • 争取css和js都只能导入一个(webpack可以实现自动合并压缩)
    • 对于图片自己找工具先压
    • 还可以使用服务器的gzip压缩

2.建立缓存机制

  • DNS缓存
  • 把不经常更改的静态资源做数据缓存(一般做的是304或者ETAG等协商缓存)
  • 强缓存和协商缓存(304)
  • 离线存储(manifest)
  • 有钱就做CDN (地域分布式服务器),还有一个财大粗气的方式:加服务器
  • 建立TCP长连接
  • ....

3.代码上的优化

  • 减少DOM的重绘与回流

  • 再js中减少闭包的使用

    • 1.栈溢出:死递归 
      function func(){
          func()
      }
      func()  //不断自己执行自己
      解决方法:
      function func(){
         setTimeout(func,0);   
      }
      func()//利用了异步操作的特性
      
      2.相互引用:引用类型之间的相互调用,形成嵌套式内存
      let obj1={
          name:'obj2'
      }
      let obj ={
          name:'obj2',
          x:obj1
      }
      obj1.x = obj2
  • 避免使用iframe(因为iframe会嵌入其他页面,这样父页面渲染的时候,还要同时把子页面也渲染了,渲染进度也会变慢)

  • 低耦合高内聚(基于封装的方式,减少页面中的冗余代码,提高代码使用效率)

  • 尽可能使用事件委托

  • 函数的防抖与节流

你可能感兴趣的:(前端常见的性能优化)