React Advanced London 2022前端技术

深入 React 的并发性

2022-11-13  本文已影响0人  吴摩西

常见并发机制

手机端的长任务(Long Task)是电脑端的 12 倍。
一般来讲,任务执行策略分为三种。


Screen Shot 2022-11-12 at 12.40.38.png

平行 (Parallelism)

平行 (Parallelism),即多个 task 同时在多个 CPU 执行。
在浏览器端通过 Worker 实现。有如下特点:

Actors

Shared Memory

Web Assembly

Worker 和 WASM 知名库

Worker

并发 (Concurrency)

只有一个 CPU,通过时间分片执行多个任务。

时序调度 (Scheduling)

类似并发,不过有一个程序专门负责调度其他任务,例如制定任务优先级等。

React concurrency = Scheduling in React

主要机制

React 并发,指的是 React 的时序调度,包括一下主要特性:

React 时序调度

Heuristics 启发性

Priority Level 优先级

react / scheduler / src / SchedulerPriorities.js

export type PriorityLevel = 0 | 1 | 2 | 3 | 4 | 5;

export const NoPriority = 0;
export const ImmediatePriority = 1;
export const UserBlockingPriority = 2;
export const NormalPriority = 3;
export const LowPriority = 4;
export const IdlePriority = 5;
优先级 超时 时机
Immediate 同步执行 (Synchronously) 需要立即执行的任务
UserBlocking 250ms 用户操作产生的结果 (例如按钮点击)
Normal 5S 无需实时的更新
Low 10S 可以延迟却必须完成的任务 (例如某些页面通知)
Idle 无延迟 根本无需执行的任务 (例如屏幕外的更新)

Render Lanes 渲染通道

Render Lanes 是在位掩码上构建的一种抽象。

有啥用

可以使用 useTransition 处理大量数据。

能绘制更多的数据点,或在 canvas 上绘制,或者进行数据处理

使用 useSyncExternalStore 防止无用的渲染

function Pathname() {
  const { pathname } = useLocation();
  return <Badge title={pathname} subTitle="pathname" />;
}
function Hash() {
  const { hash } = useLocation();
  return <Badge title={hash} subTitle="hash" />
}

通过 const { hash } = useLocation();,即使是 hash 没有变化,location 的其他部分有变化,后续组件也会重新渲染。
可以通过一个新的 hook 来提升效能。

function usHistorySelector(selector) {
  const history = useHistory();
  return useSyncExternalStore(history.listen, () => selector(history));
}
function Pathname() {
  const pathname = usHistorySelector(history => history.location.pathname);
  return <Badge title={pathname} subTitle="pathname" />;
}
function Hash() {
  const pathname = usHistorySelector(history => history.location.hash);
  return <Badge title={hash} subTitle="hash" />
}

通过选择性的 hydration 和 React 并发 提升 hydration 效能

以前必须全部 hydration 才可以,现在可以选择性的 hydration。原来快的组件需要等慢的组件,现在也无需等待。

更强大的分析器,检查 Transition,得到更多 Warns,以及更多

Screen Shot 2022-11-13 at 16.06.34.png

展望

浏览器原生支持的时序调度

主要 API

总结

上一篇下一篇

猜你喜欢

热点阅读