收藏
回答

worker 能否global

框架类型 问题类型 操作系统 操作系统版本 手机型号 微信版本
小游戏 需求 iOS iOS 10.1.2 iphone 6.5.3

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

回答关注问题邀请回答
收藏

1 个回答

  • 王召伟
    王召伟
    2020-03-16

    目前的worker在数据传输性能上比较差,主要原因在于数据传输需要转换为字符串。我们有考虑过使用共享内存来解决数据传输性能不高的问题。但是数据传输性能并不是性能最大的瓶颈,尤其是在ios上,性能最大的瓶颈还是因为ios系统不支持jit的问题。这块我们一直在探索新的方案来尝试解决

    2020-03-16
    有用
    回复 1
    • kubility
      kubility
      2020-03-17
      是的,正是因为jit在ios的不支持,所以我们运算部分外加逻辑部分的在ios上开销,显得额外的高,远高于场景和ui渲染的开销,所以才想要把这部分迁移到worker中,但是worker的数据传输又有性能问题,才有后面想把整块东西东西迁移到woker中的想法,都是一连串连锁问题,只要jit或者类似WebAssembly又或者jsbinding类似的功能得到支持的话,一切都迎刃而解。就是不晓得现在是否已经有个可行的方向了?
      2020-03-17
      回复
登录 后发表内容
问题标签