Ash*_*ain 21 javascript android phonegap-plugins cordova
我一直在开发一个PhoneGap插件来启用WebGL,用于将HTML5游戏发布到移动设备.它叫做WebGLGap.但是,PhoneGap调用插件代码的方式(通过exec)通常涉及将所有参数字符串化为JSON,然后再次在另一端解析它.根据这个问题,即使在PhoneGap 2.2中也没有改变,PhoneGap 2.2被宣传为拥有更快的桥梁.对于像WebGL这样的东西,这绝对是站不住脚的,即使对于简单的演示也会导致性能下降(<10 FPS).这是因为在许多情况下,特别是2D游戏,每个帧必须传输一大块JSON数据,表示要运行的所有WebGL命令.这包括所有顶点数据 - 想象每一帧的巨大字符串"0.959455,0.959595,0.588575,0.585858 ......"等.
显然,字符串化和解析是一个不必要且低效的步骤,但我很难找到一种方法将JSON数据从JS传递给本机,这避免了这一点.理想情况下,这应该适用于Android和iOS,但我很高兴现在坚持使用仅限Android的解决方案.有没有人对最有效的方法有任何想法?
sci*_*tai 12
Linkedin使用Web Sockets作为他们的iPad应用程序.可能值得研究:http://engineering.linkedin.com/mobile/linkedin-ipad-nativeweb-messaging-bridge-and-websockets
您正在寻找的一些好处
正如您所提到的,看看CordovaPlugin.java,一切都是String
:
public boolean execute(String action, String rawArgs, CallbackContext callbackContext) throws JSONException {
JSONArray args = new JSONArray(rawArgs);
return execute(action, args, callbackContext);
}
Run Code Online (Sandbox Code Playgroud)
例如,如果从String
到 的转换JSONArray
是唯一的瓶颈,那么您可以在插件中重写此方法并执行您自己的反序列化。这是一个很小的性能改进,但可能值得研究。
至于创建替代桥梁,那就更棘手了。我对 Cordova / PhoneGap 不太了解,但根据我收集的研究,Cordova通过addJavascriptInterface
. 如果您可以实现自己的NativetoJSMessageQueue
,那么您也许可以将它们连接在一起。
编辑
进行更多研究后,我可以提供更多方向。NativetoJSMessageQueue 真正相关的部分是它实现的各种BridgeMode(参见第 92 行)。您可以查看其他桥接模式作为示例。
不幸的是,它NativetoJSMessageQueue
恰好注册了四种桥接模式;假设您可以实现自己的桥接模式,您仍然需要了解如何将其注册为NativetoJSMessageQueue
.