Web Workers 会对 ionic 应用程序有益吗?

Will web workers beneficial on ionic app?

最近我遇到了 web workers,这是一种让你的脚本 运行 并行的方法。在没有 "freezing" 用户界面的情况下在后台将脚本提供给 运行。当我发现这一点时,我想我已经找到了一种可以在我的离子应用程序中实施的新技术,它应该会带来显着的用户体验性能改进。

但是经过一番搜索,我几乎找不到任何关于ionic中的web workers的文章。 Web Workers 不是什么新鲜事物,为什么在 ionic 甚至 Angular 中几乎没有提及它?离子不适合实施吗?或者,这是我忽略的其他事情?

Will web workers beneficial on ionic app?

这完全取决于您是否有一些繁重的处理可以卸载给网络工作者。

As web workers isn't something very new, why there hardly any mention about it in ionic or even Angular?

因为 web worker 与 UI 框架无关,因为 web worker 中的代码不能直接操作浏览器的 UI (例如,不能操作 DOM,或执行 alerts,播放音频等)。因此,Web Worker 代码几乎没有用 UI 框架库,因为该库的工作主要是做 Web Worker 不能做的事情。相反,有一个主 UI 线程(页面的默认 JavaScript 线程)允许使用 DOM 等,因此有理由使用 UI框架库。

详情:

最初,JavaScript 在网络浏览器中 运行 在单线程上,这也更新了 UI。这形成了一个没有并发问题的非常简单的模型,并且非常简单和成功。但它也有局限性:随着 JavaScript 开始用于越来越多的事情,一个 UI 线程在处理过程中陷入困境,浏览器必须实施启发式方法来发出 "slow script" 警告等所以用户认为浏览器没有冻结。

引入 Web worker 是为了让我们在浏览器托管 JavaScript 中拥有线程,同时保持单个 UI 线程的强大简单性而没有并发问题(这也是他们不这样做的原因' 与其他线程共享一个全局数据区)。他们让我们在其他线程中进行繁重的处理,但 不允许 允许我们更新这些线程中的 UI。

该作品可能 间接 与 UI 相关。例如,在现代浏览器上,可以将某些类型的对象(称为 transferrable objects)从主 UI 代码发送到网络工作者代码。 IIRC,canvases 是 t运行sferrable。我们解决了并发问题,因为一旦您 post 一个 t运行sferrable 对象从一个线程到另一个线程,它就只能在目标中访问,不再在源中访问。所以允许直接与 UI 交互的主 UI 线程可以获取一些东西(比如 canvas),然后 t运行 将它传递给 web worker 以对它做一些事情(也许是一个 t运行sform)然后把它发回去。但由于这项工作不会涉及直接操纵浏览器 UI(DOM 等),因此不太可能使用 UI 框架库。