我如何实现这一点:我有一些可能很长的计算(例如,巨大的 JSON 解析为 http resp.)并且想以非阻塞的方式进行。
我试着领养multithread.js lib 使用 web worker 做后台工作。这个库需要 JSON 可序列化对象传递给执行函数,它不知道闭包、DOM 或任何其他全局变量。
例如。 MT.process(longRunningJob, doneCallback)(jsonSerializableArgForBGJob)
。
但是这个库很旧(3 年前最后一次提交)。有没有更好的替代品更适合angular2?我需要针对最广泛的浏览器,包括较旧的浏览器(IE/Edge 除外),因此使用它的 service worker 或 lib 可能不是一个选项。
为了序列化,我找到了这个 cerialize lib 通过装饰它们的 Prop 来序列化自定义对象。这实际上可行,但它添加了相当多的代码并且似乎容易出错。我的另一个担心是我使用继承和多态性,不确定库是否已准备好用于此类 UC。人们会期望从 Java 中获知的机制:可序列化接口(interface)和覆盖的序列化/反序列化方法。有没有办法在 typescript/angular2 中完成这个?
最佳答案
只要您的代码是异步的,JavaScript 就是单线程和异步的。这意味着如果您的代码正在阻塞(长时间运行的循环),那么您正在阻塞要执行的其他代码。
RxJS 不使用 WebWorkers,因此您所做的一切都会阻塞执行线程。
我认为如果你想以非阻塞的方式处理数据,目前除了自己使用 WebWorkers 实现之外别无他法。
另请注意,异步并不意味着并行。
关于javascript - angular2 在具有自定义可序列化对象的后台线程中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40488724/