GWT svn 的 Workers JSNI 看起来 WebWorkers 还没有完全实现。我知道 elemental 处于开发的早期阶段,但可能有人已经尝试过让它工作?
1 回答
Web Worker 的问题在于它们并不真正适合标准的 GWT/Java 模型——在我看来,它们几乎不适合标准的 JS 模型。
Web Worker 通过在本质上不同的 JavaScript VM 之间来回传递数据来工作。该数据必须是字符串的形式,并且每个工作人员必须单独加载其 JS。这意味着在一个工作程序(或主页)中声明的变量不能从另一个工作程序访问,除非它作为字符串数据的一部分传递,在工作程序之间来回推送。
那么当您考虑 GWT/Java 时,这是如何工作的呢?从Java的角度来看,这不等于多线程,而是多JVM!不同的进程只能通过来回传递字符串(或更重要的是,不是 Java 对象)进行通信,并且不能共享任何其他状态。甚至两个虚拟机之间的静态变量也可能不同。
从您发布的链接中,查看JsWorker的来源- 您可以通过JsWindow.newWorker使用 JS 脚本的 url 创建一个实例,并且 JsWorker 支持侦听响应并将消息发送到的方法让它工作。
该脚本可能是一个 GWT 编译的对象 - 但它将是一个与原始应用程序不同的模块和入口点,因此它只有可以合理运行的代码,并且在加载时不会尝试在页面上开始绘图。它可能需要使用只加载 JS 的链接器,并且不会在“页面”上假设 iframe。
GWT-NS项目已经有一些 web worker 示例,使用它们自己的链接器构建 js 文件以加载到 worker 中,以及其他一些便利部分。