protobuf js在原生平台运行效率问题

我们正在开发一款实时对战游戏,其中通信协议用的protobuf,服务器向客户端推送数据大概是每秒30次,目前出现了性能问题;在web平台解析是没有问题的,发布到Android平台后,protobuf的解析耗时就急剧增大。
测试过两种方案:
1.https://github.com/dcodeIO/protobuf.js/wiki
2.https://github.com/google/protobuf/

第二种是google官方的protobuf方案,性能比第一种要好一些,不过解析一次数据仍然在1至30毫秒波动;在web平台基本上就1毫秒以内,目前这里成了性能瓶颈,请问有什么解决方案吗?
@wangzhe @panda @zilong @nantas

看看是否报错了?如果是的话,应该是因为插件重写了 __proto__ 或者使用了 setPrototypeOf 这样的 API 吧?这样的行为在 SpiderMonkey 上是非常不推荐的。这个只能插件作者进行修改了……

没有报错呢,数据都能够正常序列化和反序列化。在浏览器上运行,效率没有问题;在Android平台上慢;我再试试用Android手机的浏览器运行

刚刚发布了一个手机web-mobile版本,运行在同样的Android手机上,使用系统自带的浏览器运行,解析非常快,也是在1毫秒左右波动,60帧率

大神能帮我看个问题吗,
assets/src/jsb_polyfill.js line:29392 msg:TypeError: cc.EventListener.create is not a function

请问这个问题可以解决吗?是否需要提供测试项目呢?

接收的速度有差别吗

接收的速度无明显差别,主要在将byte数据反序列化为js对象的时候区别大

抱歉插件千千万,我也不知道为什么这个效率会这么差。 @panda 有办法 profile JSB 里哪里慢吗?

但是手机上用web浏览器效率就很高,走native就很慢,唯一的差别感觉就是 js虚拟机的差别

是啊,就是虚拟机不太好。

引擎可以换成node吗,这个更主流啊

楼主,js解析protobuf的demo有么有一份啊

是啊,现在这个SpiderMonkey执行效率和web内核的执行效率差距还是比较明显啊,稍微复杂点的运算就hold不住了

楼主你们js怎么解析的protobuf…能请教一下不

直接用的google官方的Protobuf js方案啊,就是帖子中提到的第二种

1赞

你是说 V8 吧?在 iOS 上不知道可用不?听说现在是新增了基于解释器的编译引擎,不过不知道性能怎样毕竟不能 JIT 了

我写了个最简单的测试,循环1000W次,然后分别发布web-mobile与android版本,运行在同一台android手机(oppo r9)上,结果如下:
1.web-mobile:45ms(10次平均值)
2.android native:921ms(10次平均值)

这个效率差距20倍了啊,有点夸张
@jare @panda @zilong

是V8引擎,性能总比浏览器好吧,现在我们测下来1.4.2版本web性能很好,而且没有内存泄漏,jsb版本因为内存泄漏直接导致闪退。

嗯,不过我们现在已经在 SpiderMonkey 的对象模型上投入太多了,要调换 JSB 工作量是非常大的……