怎么在iOS和Android上选择JavaScript引擎进行应用开发

发布时间:2021-11-20 14:02:26 作者:iii
来源:亿速云 阅读:365

这篇文章主要介绍“怎么在iOS和Android上选择JavaScript引擎进行应用开发”,在日常操作中,相信很多人在怎么在iOS和Android上选择JavaScript引擎进行应用开发问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么在iOS和Android上选择JavaScript引擎进行应用开发”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

怎样在IOS/Android上使用JavaScript

主要有两种方法。一种是使用系统的浏览器组件(IOS中的UIWebView和Android中的WebView),另一方法就是使用整合好的JavaScript引擎。

使用系统的浏览器组件比较容易实现但是更复杂,效率也低。 WebView提供了 addJavascriptInterface 把Java
classes注入到JavaScript文本的方法。但是它只支持最原始的几种数据类型,因此也局限了API设计。并且在Android 2.3模拟器上不稳定,在真机上也会遇到 issue
#12987的问题。在IOS上更糟 UIWebView没有公共的APIs支持JavaScript到Objective-C的交互(你必须使用似有的APIs才能达到与addJavascriptInterface相同的功能)。

PhoneGap 是基于 UIWebView and WebView的比较出名的项目。开发者被迫使用回调函数从JavaScript
APIs得到返回值。这在游戏上效率极低,也更为复杂。

早期的ngCore同样依赖UIWebView来支持iOS。但是这个机制由于其糟糕的表现被取代。

为了获得更好的表现、灵活性、兼容性,嵌入全功能的JavaScript引擎变得更为有效。

选择JavaScript 引擎

据我所知,iOS 或 android 上能够运行的JavaScript 引擎有4个: JavaScriptCore, SpiderMonkey, V8 and Rhino.下面这个表格展示各个引擎在iOS
和 Android 的兼容性 


iOSAndroid
JavaScriptCoreInterpreter onlyInterpreter and JIT
SpiderMonkeyInterpreter onlyInterpreter and JIT
V8JIT only for jailbroken devicesJIT
RhinoUnsupportedInterpreter


当我设计 OpenAphid-Engine 成为一个合适的Javascript的引擎的时候,我主要考量以下指标: 

Rhino和 V8出现的最早,但是不支持iOS。我非常希望可以使用 V8开发 OpenAphid-Engine ,在初次使用时就发现它拥有优雅的代码结构,良好的表现,但是我非常失望,因为 V8只能在JIT模式下使用,而IOS不支持。除非你使用jailbroken设备。(详情请参考 issue
#1312)

我在JavaScriptCore和SpiderMonkey间纠结了很久。在成功部署了Android和IOS项目后,我通过实验找到更好的一个。

SpiderMonkey 容易得到开发权限,但是在与JavaScriptCore比较时甘拜下风。SpiderMonkey产生了大量的二进制文件
(在ARMv7上大约1.3MB);JavaScript执行得更慢,在JavaScript和C++的桥接表现更为重要。另外一个让我远离SpiderMonkey的原因是在iOS模拟器上出现随机崩溃现象。

JavaScript引擎会受很多东西影响,比如交叉编译器的版本、引擎的版本和操作系统的种类等。下表列举了几种运行在iPod Touch 4上引擎的运行时间。(有兴趣请于Google
Doc查看精确的时间)

怎么在iOS和Android上选择JavaScript引擎进行应用开发

对于JavaScript Code 的挑战

在我专心于 JavaScriptCore之后,我的研究更进了一步:

1. 它在运行 一百万 次 native_function和 一百万次Math.abs(0)  的时间六倍于 使用 JavaScriptCore.我观察到同样的性能问题出现在通过注入的方式访问对象的属性。

2. 利用 C
APIs 进行设计虽然开发简单,但是缺乏灵活的内存管理机制。缺乏一个高级的内部垃圾回收机制很难解决类似于 circular
references 的问题。 

3. 众多的 JavaScriptCore 正式版本都是可用的
。 不过 OpenAphid-Engine 是更好的一个,它不但速度快,而且相当小。 

我抛弃了原来的使用 C
APIs 方案因此解决了 问题 1 和 2.  使用的JSC 版本来自于iOS4.3.3,因为同样在解析器模式下这个版本相比来自于iOS 5 的版本更快,执行文件更小。 

在其他产品上使用的JS引擎

在开发OpenAphid-Engine期间,我一直保持对其他引擎的关注,以下这个表格总结了其他JS引擎的使用情况


iOSAndroid
ngCore 1.6 and aboveUIWebViewV8
ngCore 1.7 and laterSpiderMonkeyV8
TitaniumJavaScriptCoreV8 or Rhino
PhoneGapUIWebViewWebView
Cocos2D-x JavaScriptSpiderMonkeySpiderMonkey
CocoonJSJavaScriptCoreJavaScriptCore
EjectaJavaScriptCoreUnsupported
directCanvasJavaScriptCoreNo clue

到此,关于“怎么在iOS和Android上选择JavaScript引擎进行应用开发”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. IOS和Android图标尺寸
  2. 如何在Android和iOS设备上录制游戏?

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

javascript android ios

上一篇:Java中泛型机制有什么用

下一篇:Java中String类怎么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》