学习浏览器重排重绘心得记录

100 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

一句话说明白:理解重排和重绘可以提升页面性能!

关于具体的原理,网上有一大堆的讲解文章,在这里就不重复了,以下仅从个人学习和理解的角度,做简单的整理总结,花费5分钟理解大概的框架,快速建立起基本概念,方便以后翻看。

1、哪些情况会导致浏览器触发重排重绘?

重排:

  • 浏览器窗口放大、缩小等缩放操作改变了原来的尺寸
  • Dom 元素增加、删除,以及元素尺寸大小、内外边距、文档内容变化和属性查询等

重绘:

  • 元素背景更改
  • 文字颜色变化
  • 元素边框样式的调整

2、如何避免或降低重排重绘次数呢?

  • 首先减少元素的操作次数,比如直接用 className/id 设置样式绑定,而不是直接在元素上设置多个样式属性
  • 先隐藏元素,然后执行操作,操作完毕再显示元素
  • 利用 documentFragment 操作新增元素,尤其是列表元素生成,先在片段上操作,最后挂载到 Dom 树上
  • 用 transform 代替 top、bottom、left、right 操作

3、有没有自动化处理的方法?

  • 配置 stylelint

stylelint是一个强大的、现代的 linter 工具,可以帮助团队避免代码规则错误、统一编码风格。和 eslint 类似可以继承开源社区的 config、自定义配置、写个性化的 rules 。

参考以下配置文件:

module.exports = {
  "extends":[
    "stylelint-config-recommended-scss",
    "stylelint-config-recess-order",
    "stylelint-prettier/recommended"
  ],
  "plugins": ["stylelint-prettier"],
   rules: {
    "selector-pseudo-element-no-unknown": [
      true,
      {
        ignorePseudoElements: ["v-deep"],
      }
    ],
    "prettier/prettier": true,
    "number-leading-zero": "always",
  }
}

强烈建议多看看现代前端工程项目配套使用的相关技术、工具、插件等知识,刚开始肯定看的一头雾水,相关内容确实不少,参考以下截图:

image.png

要拿出愚公移山的精神,就没有学不会的技术,至少要理解每个文件背后代表的是什么,以及它的作用和价值,后续需要深入研究时,就可以快速上手了。