React 把业务代码放进 WebWorker 里运行合适吗?

比如用 react-webworker-hook 、chikeichan/redux-worker 、GoogleChromeLabs/comlink…
关注者
74
被浏览
17,477

5 个回答

之前调研过一些在 Worker 中进行的有趣实践:

其中 Google AMP 的 WorkerDOM 很有意思:

主要思路是在 Worker 中进行相对开销较大的 DOM Diff,将 patch 结果发回主线程,由主线程在真实 DOM 上应用修改。因此需要在 Worker 中实现 virtual DOM,相信这也是 WorkerDOM 名称的由来吧。

由于在 Worker 中并不能直接操作 DOM,WorkerDOM 也无法突破这个限制,但是它在 Worker 执行环境中 Mock 了 DOM API,因此在官方的例子中你能看到将 React 放在 Worker 中执行。

当然这个方案也是有一定局限性的,比如一些涉及滚动和视口的属性和操作无法 mock:

// https://github.com/ampproject/worker-dom/blob/master/src/worker-thread/dom/Element.ts#L106
// Unimplemented properties
// Element.clientHeight
// Element.clientLeft