我希望开发一个JavaScript游戏引擎,该引擎使用C ++作为后端进行渲染/更新/碰撞等。几乎所有繁重的工作。
然后会有一些C ++类/函数通过修改isolate
变量(或者可能只是一个本地nodejs模块)公开。其中的某些类(例如Sprite
类)的update
函数可能会被JS子类覆盖,以允许用户自定义行为。
最后,游戏引擎将在JavaScript中循环运行,但是每一帧都会调用C ++上下文进行更新/渲染,并且所有内容加上调用将大量检查输入,碰撞等。 。更不用说每个子类对用C ++编写的父类进行的所有回调。
我担心的是,我已经读过从JS上下文(无论是ffi还是本机模块)调用C ++时,存在大量开销(比正常情况多)。通常对于性能而言这是值得的,但是考虑到每帧两种语言之间会来回调用多少次,也许这不是最好的主意?取而代之的是,也许像Python之类的东西由于其零开销(虽然Python通常来说速度要慢得多)或一起使用其他JS解释器会更合适?
答案 0 :(得分:2)
这个答案将是非常主观的,这是基于我的经验观察得出的,我不会说这是非常严格的,我现在正在自己解决这个问题,并且我还没有用基准来验证我的主张。那就是...
是的,从JS到C ++的调用相对昂贵。当然,比纯JS内的调用还要重要。实际上,实际上比从C ++到JS的另一方向的调用要重要得多。我认为造成效率低下的主要原因是JavaScript引擎失去了一些优化机会。
但是,假设您坚持使用V8引擎,那么从JS到C ++的调用将比使用任何其他语言的调用快得多。