性能优化八股

针对CSS,如何优化性能

  1. 减少选择器的数量:其直接影响到页面的加载速度
  2. 避免使用复杂的CSS属性:如 border-radius、box-shadow、filter、:nth-child 等,需要浏览器进行较多的计算;
  3. 使用CSS压缩工具,移除未使用的CSS代码减少文件体积
  4. 使用缓存,可以将常用CSS文件存储在用户本地
  5. 避免重绘与回流

针对HTML,如何优化性能

  • 优化图片
    1. 压缩图片
    2. 选择正确的图片格式
    3. 懒加载图片
  • 合并css和js以减少HTTP请求,避免重复加载资源
  • 缓存策略
    1. 通过HTTP设置缓存头,让浏览器缓存静态资源
    2. 利用CDN来缓存和分发静态资源
  • 异步加载和延迟加载
    1. 将非关键资源异步加载
    2. 实现延迟加载
  • 通过优化和合并DNS查找,减少页面加载的DNS延迟
  • 减少重绘和回流:避免频繁操作DOM,尽量使用CSS3动画和过渡
  • 避免使用内联样式,减少HTML文件大小
  • 使用语义化标签
  • 使用性能分析工具,Chorome Devtools,lighthouse等

针对Javascript,如何优化性能

  • 减少DOM操作:频繁的DOM操作会导致页面的重绘和回流,会消耗大量性能
  • 使用事件委托:将事件监听器绑定在父元素,利用事件冒泡机制来处理子元素事件,减少事件处理函数的数量
  • 使用节流和防抖:处理一些高频触发的事件时,使用防抖和节流可以限制事件处理函数的执行次数
  • 避免内存泄露:及时清理不再使用的变量和对象,避免占用内存
  • 代码优化和压缩:使用压缩工具和代码优化工具对Javascript代码优化压缩,减小文件体积
  • 代码拆分和懒加载:将大型代码库拆分为较小的模块,并用懒加载来按需加载这些模块
  • 使用性能分析工具:使用Chorome DevTools,Lighthouse等工具来识别和优化性能瓶颈

哪些操作会造成内存泄露?

内存泄露是指本应该被垃圾回收器回收的内存,因为某些原因未被回收,导致内存持续占用。

  1. 全局缓存,一个对象不再需要却没有被清除
  2. 闭包,过度使用闭包可能会持续持有引用,导致外部上下文无法被回收
  3. 给元素添加了事件监听器,但当元素不再使用时,未移除这些监听器
  4. 设置了定时器setInterval未在适当时候使用clearInterval清除
  5. 某些DOM元素从文档中移除了,但是其引用未被释放
  6. 创建了全局变量来长期存储数据,不需要时未适当清理
    一句话总结(面试背)

    “前端内存泄漏就 6 大坑:全局缓存、闭包循环、事件未 off、定时器未清、DOM 游离引用、window 大数据
    定位用 Performance + Memory 快照,修复就一句话:“用完置 null / removeEventListener / clearInterval”。”

前端性能优化从哪些方面考虑

  1. 减少HTTP请求:合并文件,使用雪碧图等方法
  2. 利用缓存:使用浏览器缓存,服务端缓存,减少重复请求
  3. 压缩资源:压缩CSS,JS,HTML文件减少文件大小
  4. 异步加载:用异步方式加载JS,避免阻塞页面渲染
  5. 延迟加载:对不立即需要的资源,可以延迟加载,比如图片懒加载
  6. 代码分隔:按需加载,将代码分隔成小块,只加载用户需要的部分
  7. 优化CSS选择器:编写高效的CSS选择器,避免复杂选择器影响性能
  8. 减少重绘和回流:优化DOM操作
  9. 使用CDN:通过内容分发网络加速资源加载
  10. 优化图片:使用合适格式和大小,如WebP格式