worker本身是目的是为了解决高计算量的问题,但是实际项目中运算量大的大多是物理计算部分,还有多单位动画部分,具体的话就是 n个单位在一个场景中移动,当触发一次移动的时候,逻辑处理 -》物理寻路/navmesh运算=>skinning动画运算=>表现,使用worker处理之后,就变成逻辑处理 ->传到work=》物理运算=》worker传回 =》 动画运算预备 =》传到worker =》skinning运算=》传回=》表现,至少单次的操作会有4次的传输。理想状态下期望是传输一次操作信息,然后worker中运算物理和动画,然后传回,传输的数据内容和前面方式可能一直,但是传输频次少了。所以我本身是期望这样的,当然这样也是不完善的,最理想还是不涉及资源,模型,音效,网络,输入的部分等的其他全部的逻辑运算,迁移到worker中(想要做到多线程的效果),减少传输频次(比如在animationframe之后统一传输到worker),当然可能会有一些表现延迟问题,可能需要靠预测进行处理,这就是最好的想要达到的效果。但是因为实际项目中会依赖各种库插件,想要做的大部分的逻辑迁移到worker,非常困难,因为没有全局的table 能让我快速索引到注册的模块中,那只能自行实现,开发成本将会变得非常大,不使用wx 的接口,可以接受,但是没有global,有点太难了! 是否可以支持,或者已经有方式/变量可以处理?
目前的worker在数据传输性能上比较差,主要原因在于数据传输需要转换为字符串。我们有考虑过使用共享内存来解决数据传输性能不高的问题。但是数据传输性能并不是性能最大的瓶颈,尤其是在ios上,性能最大的瓶颈还是因为ios系统不支持jit的问题。这块我们一直在探索新的方案来尝试解决