[react] react 为什么要提出 Expiration Time,并废弃 ReactPriorityLevel 模块(注意没有废弃 priority 这个概念)?

77 阅读2分钟

"React 在 16 版本中引入了 Expiration Time 的概念,并废弃了 ReactPriorityLevel 模块,但没有废弃 priority 这个概念。这个变化是为了更好地支持异步渲染和调度。

Expiration Time 是 React 内部用于调度更新的一种机制。它表示当一个更新被创建后,需要等待多长时间才能被处理。通过 Expiration Time,React 可以根据更新的优先级和时间戳来确定处理的顺序,从而更加灵活地调度更新。

在之前的版本中,React 使用 ReactPriorityLevel 模块来表示更新的优先级。但是这种方式存在一些问题,比如无法细粒度地控制更新的优先级和无法轻松地支持异步渲染。为了解决这些问题,React 引入了 Expiration Time。

使用 Expiration Time 的好处是可以将更新划分为不同的优先级,从而更好地控制更新的调度。优先级高的更新会优先处理,而优先级低的更新会在有机会时被处理。这种机制可以更好地适应复杂的应用场景,提高用户界面的响应性能。

另外,Expiration Time 还可以与 React Fiber 架构相结合,支持异步渲染。在 React 中,渲染过程是一个同步的过程,会阻塞主线程,导致用户界面无法响应。通过使用 Expiration Time,React 可以将渲染过程拆分为多个小的任务,将这些任务分散到多个帧中执行。这样就可以在每个帧之间留出时间给浏览器处理其他任务,提高用户界面的流畅度。

总之,通过引入 Expiration Time 的概念,并废弃 ReactPriorityLevel 模块,React 在异步渲染和调度方面有了更好的支持。这样可以更灵活地调度更新,提高用户界面的响应性能,同时还可以支持异步渲染,提高用户界面的流畅度。这些变化是为了更好地适应复杂的应用场景,提升 React 的性能和用户体验。

注意:以上内容是根据对 React 官方文档和源代码的理解撰写的,可能存在理解上的偏差。建议查阅官方文档和源代码以获得更准确的信息。"