angular2在后台线程中使用自定义可序列化对象

时间:2016-11-08 13:55:09

标签: javascript angular typescript web-worker

我怎么能实现这个目标:我有一些可能很长的计算(例如,要解析为http resp的巨大JSON)并希望以非阻塞的方式进行。

我尝试使用multithread.js lib来使用web worker进行后台工作。这个lib要求JSON可序列化对象传递给执行函数,该函数不知道闭包,DOM或任何其他全局变量。 例如。 MT.process(longRunningJob, doneCallback)(jsonSerializableArgForBGJob)。 但这个lib相当陈旧(3年前最后一次提交)。还有更适合angular2的更好的选择吗?我需要针对最广泛的浏览器,包括较旧的浏览器(IE / Edge除外),因此使用它的服务工作者或lib可能不是一种选择。

对于序列化,我发现这个cerialize lib通过装饰他们的道具来序列化自定义对象。这实际上可以工作,但它添加了相当多的代码,似乎容易出错。我的另一个问题是我使用继承和多态,并且不确定lib是否已准备好用于此类UC。可以预期Java中已知的机制:Serializable接口和覆盖序列化/反序列化方法。有没有办法在typescript / angular2中实现这个目的?

2 个答案:

答案 0 :(得分:4)

只要您的代码是异步的,JavaScript就是单线程和异步的。这意味着如果您的代码阻塞(长时间循环),那么您将阻止其他代码执行。

RxJS不使用WebWorkers,因此您所做的一切都是阻止执行线程。

我认为,如果您想以非阻塞的方式处理数据,那么目前除了您自己使用WebWorkers实现数据之外别无他法。

另外,请注意,异步并不意味着并行。

答案 1 :(得分:1)

查看vkThread插件或其Angular版本ng-vkThread

使用此插件,您可以直接在线程中下载数据,处理并在UI中返回结果。

vkThread

doc and live demo

对于ng-vkThread

doc and live demo

如果您有任何疑问,请与我们联系。