ReactDOM.render 串联渲染链路 —— 概览

2021-01-21  本文已影响0人  弱冠而不立

一个简单的 React Demo (react 版本 v17)

// App.js
import React from "react";
function App() {
  return (
    <div>
      <span>sibiling1</span>
      <span>sibiling2</span>
    </div>
  );
}

export default App;
//index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';

ReactDOM.render(
  <App />,
  document.getElementById('root')
);

启动该Demo,然后打开Chrome 的 Performance 面板,点击下图红色圈圈所圈住的这个“记录”按钮:

然后重新访问 Demo 页面对应的本地服务地址,待页面刷新后,终止记录,便能够得到如下图右下角所示的这样一个调用栈大图:

放大红框中的部分

定位“src/index.js”这个文件路径,我们就可以找到 ReactDOM.render 方法对应的调用栈,如下图所示:

图中 scheduleUpdateOnFiber 方法的作用是调度更新,在由 ReactDOM.render 发起的首屏渲染这个场景下,它触发的就是 performSyncWorkOnRoot。performSyncWorkOnRoot 开启的正是我们反复强调的 render 阶段;而 commitRoot 方法开启的则是真实 DOM 的渲染过程(commit 阶段)。

因此以scheduleUpdateOnFiber 和 commitRoot 两个方法为界,我们可以大致把 ReactDOM.render 的调用栈划分为三个阶段:

  1. 初始化阶段
  2. render 阶段
  3. commit 阶段
上一篇下一篇

猜你喜欢

热点阅读