`
wdp107
  • 浏览: 144369 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

第一部分:如何在iOS和Android上选择一个JavaScript 引擎进行应用开发

 
阅读更多
英文原文: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. 请期待!
分享到:
评论

相关推荐

    《新手学HTML 5移动开发 面向iOS和Android平台》源码

    HTML5移动开发是现代Web应用开发的关键技术,尤其在面向iOS和Android平台时,它能够帮助开发者构建跨平台的应用程序,极大地提高了开发效率。《新手学HTML 5移动开发 面向iOS和Android平台》这本书正是为了指导初学...

    TitaniumMobile开发跨平台iOS和Android应用

    ### 关于Titanium Mobile开发...通过使用JavaScript,开发者能够快速构建功能丰富的应用程序,并且能够在iOS和Android两个主要平台上运行。虽然存在一些局限性,但总体而言,Titanium Mobile是一个值得考虑的强大工具。

    一个reactnativeApp模拟JueJinApp可运行在Android和iOS之上

    React Native 是Facebook推出的一款开源框架,它允许开发者使用JavaScript和React来构建原生的iOS和Android应用程序。这个项目“一个react-native App模拟JueJinApp”显然利用了React Native的强大功能,创建了一个...

    大前端的工程实践:iOS 篇 Android 篇 混合式开发篇 - ReactNative、Weex、Weapp.zip

    在IT行业中,前端开发已经不再仅仅局限于Web领域,随着移动设备的普及,iOS开发成为了一个重要的分支。同时,为了实现跨平台的开发需求,混合式开发技术也得到了广泛应用。本资料包“大前端的工程实践:iOS篇 ...

    React Native 用JavaScript开发移动应用.pdf

    React Native 不仅允许开发者为 iOS 和 Android 平台创建应用,还能共享大部分的代码基础,这对于想要同时发布到两个平台的应用开发者来说是一个巨大的优势。 知识点概览: 1. React Native 的概念和起源。 2. ...

    uniapp +上传文件+安卓、ios文件选择

    在开发跨平台应用时,uniapp是一个非常受欢迎的框架,它允许开发者用一套代码同时构建Android、iOS和Web应用。本教程将详细讲解如何在uniapp中实现文件上传功能,特别是针对Android和iOS设备,以及如何处理不同类型...

    ReactNative开发的iOS和Android弹出对话框

    React Native是一种由Facebook开发的开源框架,它允许开发者使用JavaScript来构建原生的iOS和Android应用程序。这个项目“jacklam718-react-native-popup-dialog-0b79c20”显然是一个专门针对React Native的弹出...

    Boostnote的iOS和Android应用采用ReactNative构建

    这个项目的iOS和Android应用程序选择了React Native作为其开发框架,这表明了React Native在跨平台移动开发中的强大能力。React Native是由Facebook开发并维护的一个开源库,它允许开发者使用JavaScript和React的...

    GithubBrowser,答:feet:github存储库浏览应用程序,用于ios和android,使用react native开发。.zip

    GithubBrowser是一款专为iOS和Android平台设计的GitHub存储库浏览应用程序,它采用了React Native框架进行开发。React Native是由Facebook推出的开源框架,允许开发者使用JavaScript和React语法构建原生移动应用,...

    使用HTML,CSS,JavaScript开发Android应用程序

    由于屏幕尺寸和分辨率的不同,为了确保应用在Android设备上具有良好视觉效果,建议为Android设备准备一个独立的样式表。这样可以根据设备特性定制样式,比如调整字体大小、按钮尺寸等。 **示例代码**: ```css /* ...

    一个reactnative模块用于显示网格视图适用于iOS和Android

    这个框架的核心理念是“Learn once, write anywhere”,意味着开发者只需掌握一次技术,就能在iOS和Android两个平台上进行开发。在这个特定的场景中,我们关注的是一个名为“netyouli-react-native-whc-grid”的...

    移动开发技术培训课件Android 与IOS概述及移动开发相关技术概述

    移动开发技术培训课件主要涵盖了Android与iOS的概述以及移动开发的相关技术,旨在为学习者提供全面的移动应用开发知识。以下是对各个部分的详细解释: **第一部分:移动开发平台介绍** 移动开发平台是为移动应用...

    JavaScript和React Native:小程序、iOS App、Android App全搞定

    不过对于程序员来说,可又多了一个任务,除了要开发iOS App和Android App外,可能老板还会要求开发程序员开发同样功能的小程序,如果公司不另外招人的话,那么这些任务就都落到了原来的程序员头上。如果使用标准的...

    JavaScript_React Native Advanced Guide Book iOS Android成为2024年的

    12. **实战项目**:通过一个实际的应用开发案例,将所学知识应用于实践中,提升综合开发能力。 通过阅读和实践《JavaScript_React Native Advanced Guide Book》,开发者不仅能深入理解JavaScript和React Native,...

    Android-基于iOS和Android的react-native跨平台漫画App

    《基于iOS和Android的react-native跨平台漫画App》是一款利用React Native技术实现的漫画阅读应用,旨在为用户提供在iOS和Android设备上无缝切换的漫画阅读体验。React Native是由Facebook开发的开源框架,它允许...

    基于ReactNative实现的iOS和Android的动画TabBar

    在移动应用开发中,TabBar 是一种常见的导航组件,它允许用户在多个视图之间轻松切换。本项目基于React Native,一个由Facebook推出的开源框架,实现了可在iOS和Android平台上运行的动画TabBar。React Native利用...

    WORKSHOP ON ANDROID AND IOS APPLICATION ... ANDROID和IOS应用研讨会.pdf

    根据提供的文档信息,本次研讨会的主题是“使用Flutter系统进行Android和iOS应用开发”。研讨会由Adi Shankara Institute of Science and Technology电子与通信工程系组织,并得到了IEEE的支持。研讨会的时间为2020...

    Android 平台 HTML5 应用开发

    通过以上介绍,我们可以了解到在 Android 平台上使用 PhoneGap 进行 HTML5 应用开发的基本流程和技术要点。从环境搭建、应用编写到测试部署,每个环节都需要仔细操作。掌握了这些知识后,开发者就可以轻松地开发出高...

Global site tag (gtag.js) - Google Analytics