requestAnimationFrame

當流暢地設定 DOM 元素的動畫時,我們僅限於以下 CSS 轉換:

  • 位置 - transform: translate (npx, npx);
  • SCALE - transform: scale(n);
  • 旋轉 - transform: rotate(ndeg);
  • OPACITY - opacity: 0;

但是,使用這些並不能保證你的動畫會流暢,因為它會導致瀏覽器啟動新的 paint 週期,無論其他內容是什麼。基本上,paint 製作效率低,你的動畫看起來很笨拙,因為每秒幀數(FPS)會受到影響。

為了保證儘可能平滑的 DOM 動畫,requestAnimationFrame 必須與上述 CSS 過渡一起使用

這樣做的原因是因為 requestAnimationFrame API 讓瀏覽器知道你希望動畫在下一個週期 8 發生,而不是在呼叫非 RAF 動畫時中斷正在進行的操作以強制新的繪製週期

參考 網址
什麼是 jank? http://jankfree.org/
高效能動畫 http://www.html5rocks.com/en/tutorials/speed/high-performance-animations/
https://developers.google.com/web/tools/chrome-devtools/profile/evaluate-performance/rail?hl=en
分析關鍵渲染路徑 https://developers.google.com/web/fundamentals/performance/critical-rendering-path/analyzing-crp?hl=en
渲染效能 https://developers.google.com/web/fundamentals/performance/rendering/?hl=en
分析油漆時代 https://developers.google.com/web/updates/2013/02/Profiling-Long-Paint-Times-with-DevTools-Continuous-Painting-Mode?hl=en
識別油漆瓶頸 https://developers.google.com/web/fundamentals/performance/rendering/simplify-paint-complexity-and-reduce-paint-areas?hl=en