我正在编写一个CPU密集型的javascript应用程序。我遇到了一个问题,有时UI被锁定,而CPU密集型计算发生时。我知道解决这个问题的标准方法是调用setTimeout
并让事件循环响应UI事件。但是,这对我不起作用,这就是原因。
当页面加载时,javascript vm需要进行一堆解析和分析数据块。这是真正的背景内容,我正在调用setTimeout
来运行每个块。但是,这意味着用户获得非常不稳定的UI体验,直到所有块完成(对于大文件可能长达10秒)和每次保存。这是不可接受的。
我可以想到两种解决方案,我都不喜欢这两种解决方案:
setTimeout
将使其更加复杂修复此问题对于传统的基于线程的VM来说是微不足道的。我该怎么做Javascript?
更新:
我忘了提到的一些观点:
Webworkers可能是解决方案,但它们看起来仍然很脆弱。有人有经验吗?他们稳定吗?哪些现代浏览器不支持它们?他们有任何一般性问题吗?
答案 0 :(得分:4)
根据此应用程序是否会公开,您必须决定是否可以使用Web Workers,更多地分割数据或进行服务器端处理。对于真实世界的应用程序,真正的解决方案是在服务器上进行繁重的计算,因为你不能指望用户拥有最新的处理器,它可能只是上网本,可能只会咳嗽几次然后崩溃。
当您可以确定用户拥有支持它的最新浏览器时,Web工作人员将是一个解决方案,但如果不是这样,则无法像大多数HTML5那样对其进行填充。
根据我对您的应用程序的了解,我会说您应该将预先计算的数据发送到客户端。此外,Node.js不善于进行核心计算,因此您可能希望查看服务器上的不同数据处理选项。此外,我认为带宽不会成为问题,因为无论如何你必须给客户端提供初始数据。处理后的数据有多大?