英文原文:Part I: How to Choose a JavaScript Engine for iOS and Android Development
在我开始使用OpenAphid-Engine的时候,已经有几种类似的iOS/Android 项目.这些商业项目或者开源项目使用JavaScript实现代码特性。比如,Titanium 和PhoneGap 允许开发者使用JavaScript开发本地 iOS/Android apps; ngCore 更是可以使用纯正的JavaScript构建跨平台的游戏。JavaScript已经成为了编程语言中的佼佼者,也因为更容易学习吸引了众多开发者参与到这一领域。
Naixjs
翻译于 1个月前
0人顶
顶 翻译的不错哦!
怎样在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相同的功能)。
Naixjs
翻译于 1个月前
0人顶
顶 翻译的不错哦!
PhoneGap 是基于 UIWebView and WebView的比较出名的项目。开发者被迫使用回调函数从JavaScript APIs得到返回值。这在游戏上效率极低,也更为复杂。
早期的ngCore同样依赖UIWebView来支持iOS。但是这个机制由于其糟糕的表现被取代。
为了获得更好的表现、灵活性、兼容性,嵌入全功能的JavaScript引擎变得更为有效。
Naixjs
翻译于 1个月前
0人顶
顶 翻译的不错哦!
选择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个月前
1人顶
顶 翻译的不错哦!
其它翻译版本(1)
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模拟器上出现随机崩溃现象。
Naixjs
翻译于 1个月前
0人顶
顶 翻译的不错哦!
JavaScript引擎会受很多东西影响,比如交叉编译器的版本、引擎的版本和操作系统的种类等。下表列举了几种运行在iPod Touch 4上引擎的运行时间。(有兴趣请于Google Doc查看精确的时间)
JavaScriptCore 大比分领先。
我没有找到SpiderMonkey,所以就使用了下面的三种自定义搭建Cocos2d-iPhone-2.1-beta4, Cocos2d-x-2.1-beta3和iMonkey。
所有测试的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设备上却与之相反。
在大部分的基准上,使用iMonkey比SpiderMonkey更快
很明显的,使用SpiderMonkey将会在iOS上获得更好的表现。ngCore 1.10在iOS上加入自定义功能,所以要更优于像SpiderMonkey这样的变体。
Naixjs
翻译于 1个月前
0人顶
顶 翻译的不错哦!
对于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 的版本更快,执行文件更小。
打杂程序猿
翻译于 1个月前
0人顶
顶 翻译的不错哦!
在其他产品上使用的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. 请期待!
分享到:
相关推荐
不过对于程序员来说,可又多了一个任务,除了要开发iOS App和Android App外,可能老板还会要求开发程序员开发同样功能的小程序,如果公司不另外招人的话,那么这些任务就都落到了原来的程序员头上。如果使用标准的...
Flipper 做贡献 在这个 repo 中 入门 需求 从源代码构建 桌面运行 从源代码构建独立应用程序 iOS SDK + 示例应用程序 Android SDK + 示例应用程序文档 贡献许可证 移动开发 Flipper 旨在成为您的第一伙伴iOS 和 ...
除在保密期内的保密论文和在技术保护期限内的论文外,允许论文被查阅和借阅,可以公布(包括以电子信息形式刊登)论文的全部内容或中、英文摘要等部分内容。论文的公布(包括以电子信息形式刊登)授权东南大学研究生...
C#(读作C Sharp)是一种由微软公司开发的...移动应用开发:包括iOS开发(使用Swift或Objective-C)和Android开发(使用Java或Kotlin)等。 大数据技术:包括Hadoop、Spark、Hive等用于处理和分析大规模数据集的技术。
第3章 构建你的第一个应用 13 3.1 搭建环境 13 3.2 创建一个新的应用 17 3.3 探索示例代码 24 3.4 开发天气应用 27 3.5 小结 40 第4章 移动应用组件 42 4.1 类比HTML 元素与原生组件 42 4.2 处理触摸和手势 ...
音乐商城是一个在线平台,用于销售音乐作品...移动应用开发:包括iOS开发(使用Swift或Objective-C)和Android开发(使用Java或Kotlin)等。 大数据技术:包括Hadoop、Spark、Hive等用于处理和分析大规模数据集的技术。
iOS:比较20个UI组件和模式的第1 部分和第2部分-( 用中文撰写的原始文章)。 它显示了Android和iOS上的各种按钮组件。 以下是在本机应用程序中可以找到这些按钮样式的屏幕截图: 边框样式 的iOS 应用商店 默认...
适用于浏览器,IOS和android的Cordova Maps应用程序 1:创建Cordova项目 cordova create GMapExample com.labs.gmapexample GMapExample 2:更改工作目录 cd GMapExample 3:添加地理位置插件 cordova plugin add...
如果这是您的第一个Flutter项目,则有一些资源可帮助您入门:实验:编写您的第一个Flutter应用程序食谱:有用的Flutter示例为了帮助Flutter入门,请查看我们的在线文档,其中提供了教程,示例,移动开发指南,以及...
良好类型的React Native库提供对iOS和Android上的Apple身份验证的支持,包括对所有AppleButton变体的支持。 使用此库的先决条件 如果您不确定以下内容,则@invertase/react-native-apple-authentication库将不起...
Debug JS Remotely已知的问题 :warning: 打包程序在第一次运行时无法解析别名。 进行yarn start:reset而不是在首次启动时启动yarn start 。 使用react-native run-ios或react-native run-android运行应用程序时,也...
/ 白鹭引擎白鹭引擎是HTML5游戏引擎。 它提供了处理常见游戏开发任务的模块,例如2D和3D渲染,GUI系统以及音频和资源管理。...编写第一行代码默认情况下,白鹭游戏项目的入口点是src /Main.ts。 要编写项目
如果尚未配置,请参考和git clone https://github.com/mah93/Fastodoncd ./Fastodonflutter packages getflutter run您可以在模拟器/真实计算机(Android和iOS)上成功运行。 PS:如果遇到任何问题,您可以在提问。...
* 第一个参数为函数名称,第二个参数为需要传递的参数,必须为Object对象类型,第三个参数为回调 */ window.JSBridge.invoke('log', null, callback); // 会将原生端返回的参数在该回调中参数传入 function callback
GoalTender是一款简单的Android和iOS应用程序,旨在做一件事:通过创建和跟踪简单的每日目标来帮助您改变习惯。 有关此项目背后的灵感,请参见。 GoalTender也是我使用编写的第一个应用程序。 不知道我会推荐它作为...
HNKmobile是一个购物移动网站,主要由jQuery mobile和simplecart(js)组成,目标是与PhoneGap 一起使用,因此可以在运行于iOS,Android,Blackberry和任何PhoneGap支持的应用程序中使用。 它支持主要的支付提供商...
然后选择Open exisitng project,然后导航到项目文件夹步骤4:在iOS或Android上安装expo应用Android: : iOS: : 步骤5(Android):点击共享按钮,然后扫描QR码步骤6(iOS):登录设备上的博览会帐户,该链接应该...
适用于iOS和Android React-Native应用程序的可自定义Google地方信息自动完成组件 该库的版本2现在可用。 在 部分中查看更多信息。 预览 安装 步骤1。 npm install react-native-google-places-autocomplete --save...
这个库是将ant-design for rn里的datepicker控件独立开来的一个纯js控件,核心代码没有改动。ant-design for rn的项目地址https://github.com/ant-design/ant-design-mobile-rn; 使用中需要注意点如下 1.直接把项目...