我一直在阅读有关 Javascript 语言中的两个(相对)新概念的文章——Web Workers 和 John Resig 的超棒 Processing.js(好吧,并不是一个真正的新“Javascript 概念”,但你明白我的想法)。两者都在互联网上徘徊的一些很好的例子,但我还没有找到一个有效地使用这两种技术的例子。它对我来说看起来很有趣且功能强大,所以我想我最好尝试一下。
但是,我真的想不出将它们两者结合起来的最佳脚本设计……在我看来,通常在使用 Processing.js 时,一些类是在“处理应用程序”中定义的。它允许您使用类似 Java 的语法来解决这个问题。然而,这些类只能在处理应用程序中访问——这是显而易见的。但是我们有了 Worker……在这个惊人的例子中,一个 Javascript 函数对象首先在一个单独的脚本中定义,如果需要 Worker 使用,Worker 脚本会导入该对象的原型和某种“螺栓”自己到它上面。
对我来说,这两者似乎不能“互换”,因为当您在 Worker 脚本中时,您无法访问您在 Processing-application 中定义的类。可能是有原因的,因为类处理类绝对不是很像 Javascript。据我所知,我必须在我的 Worker 脚本中对类进行类似的定义(以新函数原型的形式)——这对可维护性不是很好,而且看起来是非常糟糕的设计对我来说,即使我还是这个主题的新手。
我忽略了什么吗?我想要一些不应该的东西吗?还是我只是误解了一些基本概念?
谢谢您的帮助!
编辑:
继续尝试弄乱 Worker 的原型,以便像它应该为它工作的对象那样“塑造”它,但很快意识到这不是要走的路。
让我们尝试使用一个大纲:我有一个类“Ball”,除了存储一个二维位置之外,它几乎什么都不做。在每个draw()
循环中,Processing.js 都会调用它的update()
方法,这会使 Ball 采用一个新的位置。之后,display()
调用该方法,让 Ball 在其当前位置画一个小圆圈。
没有什么复杂的开始。现在,假设确定球的新位置是一项非常昂贵的操作——例如,如果它涉及球在“复杂”引力场中的运动。如果必须在绘制之前每次都进行此计算,则至少会导致一些延迟。但是,如果您设法同时执行这些操作,则运行可能会更顺畅。所以,我想我可以在它的属性列表中给 Ball 类一个额外的“位置”数组,它将保存它所有的连续位置。当 Ball 被实例化时,它会创建一个新的 Worker,它将开始计算位置,并且每次完成后,它都会向 Ball 回传一条消息,其中包含一个新的二维位置。然后球将把这个推到它的位置数组上,
总而言之——好主意还是坏主意?如果好的话,关于如何设计这个有什么建议吗?