多线程或不多线程 - JavaScript

时间:2013-03-21 21:31:42

标签: javascript multithreading

我目前正在尝试类似于太空入侵者的JavaScript射击游戏。它现在的编码方式,无论是移动的抛射物还是船只。任何玩过原版的人都知道这不好。我记得在我的Java课程中进行多线程处理,并想知道这是否是正确的方法,还是有另一种方法可以做到这一点?例如:

Thread Move start;
Thread Move run;
Thread Shoot start;
Thread Move run;
Thread Shoot run;
Thread Shoot end;
Thread Move run;
Thread Move end;

2 个答案:

答案 0 :(得分:2)

您可以在Javascript中使用WebWorkers,但它们与真正的多线程环境无关,就像在java中一样。您将不得不采用不同的方法进行游戏开发,使用一种循环技术在同一个线程下更新游戏的逻辑,抱歉。 :(在javascript中为线程添加的支持仍然非常笨拙,而且在我看来几乎是一个噱头,唯一一个有Chrome的人,因为你不一定要复制传递给线程的所有数据。这就是为什么线程在javascript中是hamstrung:

  1. 无法真正访问dom
  2. 大多数(如果不是全部)(取决于引擎)数据必须复制到其他线程,这意味着如果您想在后台处理大量数据,则必须先对该数据执行复制
  3. WebWorkers上的错误并不总是非常明显(有时你会得到随机的,难以理解的错误)
  4. 由于WebWorkers具有巨大的潜力,但对我而言,他们的使用受到此时对他们的限制的严重限制。也许你可以在游戏中找到聪明的用途。

答案 1 :(得分:2)

传统上,JavaScript是单线程的,因此使用Java中习惯的线程是不可行的。 JavaScript的最新成员是web worker(spec here),它提供了真正的多线程。但是,support among browsers在某种程度上是可变的,你对工作线程可以做的事情有所限制,并且线程之间的通信是痛苦的。

您还可以使用Clumpy.js之类的东西来模拟异步执行。

无论你做什么,重要的是不要阻止主线程。整个浏览器窗口都没有响应。