2KB项目,专业的源码交易网站 帮助 收藏 每日签到

第一部分:怎么在iOS和Android上选择一个JavaScript 引擎实行使用开辟

  • 时间:2019-03-15 08:24 编辑:2KB 来源:2KB.COM 阅读:377
  • 扫一扫,手机访问
  • 分享
摘要:
Android iOS JavaScript 英文原文:Part I: How to Choose a JavaScript Engine for iOS and Android Development

在我开端运用OpenAphid-Engine的时分,曾经有几品种似的iOS/Android 项目.这些贸易项目或许开源项目运用JavaScript完成代码特征。比方,TitaniumPhoneGap 答应开辟者运用JavaScript开辟当地 iOS/Android apps; ngCore 更是可使用纯粹的JavaScript构建跨平台的游戏。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 的兼容性

iOS Android
JavaScriptCore Interpreter only Interpreter and JIT
SpiderMonkey Interpreter only Interpreter and JIT
V8 JIT only for jailbroken devices JIT
Rhino Unsupported Interpreter

当我设计 OpenAphid-Engine 成为一个适宜的Javascript的引擎的时分,我首要考量以下目标:
  • 兼容性:同时支撑iOS 和 Android 在x86 和 ARM 平台上的 模仿器和 装备。

  • 波动性. 波动的运转在对应的平台和CPU的架构上。
  • 扩大性. 可以很便利的应用当地特征实行扩大。例如OpenAphid-Engine 经过一个桥接层,完成了经过Javascript 实行OpenGL ES 的运用。
  • 功能好:一个疾速的Javascript 引擎首要归结为两个要素:有效的绑定机制和实行较低的开支。. OpenAphid-Engine 在衬着一帧页面的时分经过JavaScript触发数百个OpenGL ES挪用来实行衬着。这点长短常成心义的,假如只是把开支放到纯真的履行JavaScript长进即将会招致衬着很慢,。
  • 体积小.:在内存的占用上和本身的履行文件上都要比拟小。


其它翻译版本 (1) 加载中

RhinoV8呈现的最早,可是不支撑iOS。我十分盼望可使用 V8开辟 OpenAphid-Engine ,在初度运用时就发明它具有优雅的代码构造,杰出的表示,可是我十分绝望,由于 V8只能在JIT形式下运用,而IOS不支撑。除非你运用jailbroken装备。(概况请参考 issue #1312)

我在JavaScriptCoreSpiderMonkey间纠结了好久。在胜利安排了Android和IOS项目后,我经过试验找到更好的一个。

SpiderMonkey 轻易失掉开辟权限,可是在与JavaScriptCore比拟时心悦诚服。SpiderMonkey发生了大量的二进制文件 (在ARMv7上约莫1.3MB);JavaScript履行得更慢,在JavaScript和C++的桥接表示更加主要。别的一个让我阔别SpiderMonkey的缘由是在iOS模仿器上呈现随机解体景象。

JavaScript引擎会受非常多工具影响,比方穿插编译器的版本、引擎的版本和操纵系统的品种等。下表罗列了几种运转在iPod Touch 4上引擎的运转工夫。(有兴味请于Google Doc检查准确的工夫)

benchmark

  • JavaScriptCore 大比分抢先。

  • 我没有找到SpiderMonkey,所以就运用了下面的三种自界说搭建Cocos2d-iPhone-2.1-beta4Cocos2d-x-2.1-beta3iMonkey

  • 一切测试的apps都基于LLVM 4.1版本,一切的引擎都运转在说明器形式(iOS受限)。

  • 几种基准的引见:

    • 1m-js_loop履行空轮回一百万次。

    • 1m-native_function恳求挪用一百万次前往undefined的当地函数

    • 1m-js_function跟上面一个类似,只是换成了JavaScript。

    • fib(30)递归的方法盘算Fibonacci(30)。

    • sudoku-5用这里的算法处理Sudoku问题。

  • 1m-native_function JavaScriptCore运用可移植的C APIs完成,固然这不是最有效引入当地函数的办法。

  • SpiderMonkey 在台式电脑上因为初级的JIT追踪办法运转更快,可是在IOS装备上却与之相反。

  • 在大部分的基准上,运用iMonkeySpiderMonkey更快

  • 很分明的,运用SpiderMonkey将会在iOS上取得更好的表示。ngCore 1.10在iOS上参加自界说功用,所以要更优于像SpiderMonkey如许的变体。

关于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引擎的运用状况


iOS Android
ngCore 1.6 and above UIWebView V8
ngCore 1.7 and later SpiderMonkey V8
Titanium JavaScriptCore V8 or Rhino
PhoneGap UIWebView WebView
Cocos2D-x JavaScript SpiderMonkey SpiderMonkey
CocoonJS JavaScriptCore JavaScriptCore
Ejecta JavaScriptCore Unsupported
directCanvas JavaScriptCore No clue

接下来的事

我将对比 ngCore 把我本人的设法放到OpenAphid-Engine. 请等待!

本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。 2KB翻译任务按照 CC 协定,假如我们的任务有进犯到您的权益,请实时联络我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部