假设我的系统中有以下部分:存储 (S) 和一些客户端 (C)。客户端是独立的 Web Worker,我实际上是在尝试为它们模拟共享内存之类的东西。
现在我只有一个客户端,它与存储的通信非常密集。为了测试,它在for循环中旋转,从存储中请求一些信息并处理它(处理真的很便宜)。
事实证明,这很慢。我检查了进程列表并注意到chrome --type=renderer
消耗了大量的 CPU,所以我认为它可能会在每条消息之后重绘页面或进行某种 DOM 处理,因为存储在页面上下文中运行。好的,我决定尝试将存储移动到一个单独的 Worker 以便页面现在完全空闲并且......最终获得更差的性能 - 正好慢两倍(我尝试了一个 Shared Worker 和一个 Dedicated Worker 显式MessageChannel
s 具有相同的结果)。
所以,这是我的问题:为什么从 Worker 向另一个 Worker发送消息比从 Worker 向页面发送消息要慢两倍?他们是否通过页面发送消息?它是“设计使然”还是错误?本来打算去查源代码的,但是怕是有点太复杂了,可能有人已经熟悉这部分 Chromium 内部了……</p>
PS 我正在 Linux 上的 Chrome 27.0.1453.93 和 Windows 上的 Chrome 28.0.1500.20 中进行测试。