本系列最开始是为了本身面试准备的.后来发现整理愈来愈多,差很少有十二万字符,最后决定仍是分享出来给你们.html
为了分享整理出来,花费了本身大量的时间,起码是只本身用的三倍时间.若是喜欢的话,欢迎收藏,关注我!谢谢!前端
前端面试查漏补缺--Index篇(12万字符合集) 包含目前已写好的系列其余十几篇文章.后续新增值文章不会再在每篇添加连接,强烈建议议点赞,关注合集篇!!!!,谢谢!~vue
后续还会继续添加设计模式,前端工程化,项目流程,部署,闭环,vue常考知识点 等内容.若是以为内容不错的话欢迎收藏,关注我!谢谢!面试
目前本人也在准备跳槽,但愿各位大佬和HR小姐姐能够内推一份靠谱的武汉 前端岗位!邮箱:bupabuku@foxmail.com.谢谢啦!~算法
浏览器的渲染机制通常分为如下几个步骤:设计模式
注意:前端工程化
通常来讲,能够把普通文档流当作一个图层。特定的属性能够生成一个新的图层。不一样的图层渲染互不影响,因此对于某些频繁须要渲染的建议单独生成一个新图层,提升性能。但也不能生成过多的图层,会引发副作用。跨域
经过如下几个经常使用属性能够生成新图层浏览器
translate3d
、translateZ
will-change
video
、iframe
标签opacity
动画转换position: fixed
重绘和回流是渲染步骤中的一小节,可是这两个步骤对于性能影响很大。缓存
注意: 回流一定会发生重绘,重绘不必定会引起回流。回流所需的成本比重绘高的多,改变深层次的节点极可能致使父节点的一系列回流。
DOM
元素CSS
伪类(例如::hover
)一些经常使用且会致使回流的属性和方法:
clientWidth
、clientHeight
、clientTop
、clientLeft
offsetWidth
、offsetHeight
、offsetTop
、offsetLeft
scrollWidth
、scrollHeight
、scrollTop
、scrollLeft
scrollIntoView()
、scrollIntoViewIfNeeded()
getComputedStyle()
getBoundingClientRect()
scrollTo()
不少人不知道的是,重绘和回流其实和 Event loop 有关。
resize
或者 scroll
,有的话会去触发事件,因此 resize
和 scroll
事件也是至少 16ms 才会触发一次,而且自带节流功能。requestAnimationFrame
回调IntersectionObserver
回调,该方法用于判断元素是否可见,能够用于懒加载上,可是兼容性很差requestIdleCallback
回调。translate
替代 top
使用 visibility
替换 display: none
,由于前者只会引发重绘,后者会引起回流(改变了布局)
把 DOM 离线后修改,好比:先把 DOM 给 display:none
(有一次 Reflow),而后你修改 100 次,而后再把它显示出来
不要把 DOM 结点的属性值放在一个循环里当成循环里的变量
不要使用 table 布局,可能很小的一个小改动会形成整个 table 的从新布局
动画实现的速度的选择,动画速度越快,回流次数越多,也能够选择使用 requestAnimationFrame
CSS 选择符从右往左匹配查找,避免 DOM 深度过深
将频繁运行的动画变为图层,图层可以阻止该节点回流影响别的元素。好比对于 video
标签,浏览器会自动将该节点变为图层。
CSS
table
布局。DOM
树的最末端改变class
。position
属性为absolute
或fixed
的元素上。CSS
表达式(例如:calc()
)。JavaScript
style
属性,或者将样式列表定义为class
并一次性更改class
属性。DOM
,建立一个documentFragment
,在它上面应用全部DOM操做
,最后再把它添加到文档中。display: none
,操做结束后再把它显示出来。由于在display
属性为none
的元素上进行的DOM
操做不会引起回流和重绘。整篇文章基本都是摘自下面文章,这里表示感谢!