最近我遇到了 web workers,这是一种让你的脚本并行运行的方法。让您的脚本在后台运行而不“卡住”用户界面。当我发现这一点时,我想我已经找到了一种可以在我的 ionic 应用程序中实现的新技术,它应该会带来显着的用户体验性能改进。
但经过一番搜索,我几乎找不到任何文章谈论 ionic 中的 web worker。 Web Workers 不是什么新鲜事物,为什么在 ionic 甚至 Angular 中几乎没有提及它? ionic 不适合实现吗?或者,这是我忽略的其他事情?
最佳答案
Will web workers beneficial on ionic app?
这完全取决于您是否有一些繁重的处理可以卸载给网络 worker 。
As web workers isn't something very new, why there hardly any mention about it in ionic or even Angular?
因为 web workers 与 UI 框架无关,因为 web workers 中的代码不能直接操作浏览器的 UI(例如,不能操作 DOM,或者做 alert
、播放音频等)。所以 web worker 代码对 UI 框架库几乎没有用处,因为该库的工作主要是做 web worker 不能做的事情。相反,有一个主 UI 线程(页面的默认 JavaScript 线程)允许使用 DOM 等,因此有理由使用 UI 框架库。
详细信息:
最初,网络浏览器中的 JavaScript 在单线程上运行,同时更新 UI。这形成了一个没有并发问题的非常简单的模型,并且非常简单和成功。但它也有局限性:随着 JavaScript 开始用于越来越多的事情,一个 UI 线程在处理过程中陷入困境,浏览器不得不实现试探法来发出“慢脚本”警告等,因此用户不认为浏览器已经卡住了。
引入 Web workers 是为了让我们在浏览器托管的 JavaScript 中拥有线程,同时保持单个 UI 线程的强大简单性而没有并发问题(这也是它们不与其他线程共享全局数据区域的原因).它们让我们在其他线程中进行繁重的处理,但不允许让我们在这些线程中更新 UI。
这项工作可以间接与 UI 相关。例如,在现代浏览器上,可以发送某些类型的对象,称为 transferrable objects ,从主 UI 代码到 web worker 代码。 IIRC, Canvas 是可转让的。我们解决了并发问题,因为一旦您将一个可传输对象从一个线程发布到另一个线程,它就只能在目标中访问,而不能再在源中访问。因此,允许直接与 UI 交互的主 UI 线程可以获取某些东西(如 Canvas )并将其传输给 web worker 以对其执行某些操作(可能是转换),然后将其发回。但由于这项工作不涉及直接操作浏览器 UI(DOM 等),因此不太可能调用 UI 框架库。
关于javascript - Web Workers 会对 ionic 应用程序有益吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36531051/