本系列最開始是爲了本身面試準備的.後來發現整理愈來愈多,差很少有十二萬字符,最後決定仍是分享出來給你們.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
操做不會引起迴流和重繪。整篇文章基本都是摘自下面文章,這裏表示感謝!