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

2024-05-03 03:42

1. 如何在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引擎变得更为有效。

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

2. 如何在iOS和Android上选择一个JavaScript 引擎进行应用开发

这是个比较专业的问题 
首先我推荐一个:react native,facebook推出的一个跨平台解决方案,去年推出了iOS版,手机淘宝的有一个模块“猜你喜欢”就是用react native实现的,效果还不错,另外今年9月份,facebook推出了android版,大家不妨试一下,这里针对于webapp,做了一个比对:

相对于Webapp的优势:
不用Webview,彻底摆脱了Webview让人不爽的交互和性能问题;
有较强的扩展性,这是因为Native端提供的是基本控件,JS可以自由组合使用;
可以直接使用Native原生的「牛逼」动画(在FB Group这个app里面,面板滑出带一点果冻弹动,面板基于某个点展开这种动画随处可见,这种动画用Native code来做小菜一碟,但是用Web来做就难上加难)。
相对于Native app的优势:
可以通过服务端远程更新JS,进而直接更新app的页面;
相对于Webapp和Native的劣势:
扩展性仍然远远不如web,也远远不如直接写Native code;
从Native到Web,要做很多概念转换,势必造成双方都要妥协。最终web要用一套CSS的阉割版,Native要费劲地把这个阉割版转换成native原生的表达方式(比如iOS的Constraint\origin\Center等属性)。

另外我以前在CocoaChina上收藏过的一个帖子,整理了许多iOS和Android跨平台解决方案,感觉很不错,现在拿出来分享给大家,希望对题主有帮助。

1、jQuery Mobile 

jQuery Mobile是jQuery 在手机上和平板设备上的版本。jQuery Mobile 不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架。支持全球主流的移动平台。jQuery Mobile文档比较全面,同时有在线工具帮你快速创建自己中意的UI风格。

技术需求:HTML,CSS,jQuery
平台支持: 绝大多数移动浏览器

2、Corona SDK(使用Lua语言):

Corona SDK的优点:

稳定;支持硬件加速、GPS、指南针及照相机等;支持与Map、Facebook、OpenFient、GameCenter的集成;内建的物理集成;Lua语言比较容易学习;
已经有了一些很不错的应用,至少能够证明这个SDK是可以做出优秀应用来的;不错的社区支持。

Corona SDK不太好的地方:

只支持iOS和Android;Lua语言不是面向对象的;每年都要交授权费(99美元/年)。

另外还有其他的一些补充,比如:

对于Corona SDK不支持的第三方SDK没法自己去集成;编译项目的时候需要把代码上传到Corona的服务器上去编译,不能在本地直接编译;无法扩展Corona的功能;物理模块还有一些缺陷。

3、Airplay SDK(后来更名为Marmalade,不少大的公司在使用Airplay SDK,尤其适用于进行2D/3D游戏的开发)

目前使用Marmalade的游戏有《割绳子》、《植物大战僵尸》、《你猜我画》、Build 'n' Bash 3D、Catch the Monkey、Need for Speed Shift以及WorkSnug Pro等多款游戏。

Airplay SDK文档中还包含多个示例。“感觉受到限制”的开发者还可以在Airplay SDK上进行扩展。开发者需要对C++比较熟悉。

4、Appcelerator(Titanium)

Appcelerator允许使用HTML/Javascript来开发原生app,开发者可以免费使用。目前世界上185个国家中有超多46万的开发者在使用Appcelerator提供的解决方案。

Titanium为Appcelerator于2008年底所推出的跨平台应用程序开发解决方案,目前支持iOS/Android/Blackberry/WM7等行动平台,以及Windows/Linux/OS X这三种主流的桌上型平台。

3. 如何在iOS和Android上选择一个JavaScript 引擎进行应用开发

在我开始使用OpenAphid-Engine的时候,已经有几种类似的iOS/Android 项目.这些商业项目或者开源项目使用JavaScript实现代码特性。比如,Titanium 和PhoneGap 允许开发者使用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 的兼容性 

当我设计 OpenAphid-Engine 成为一个合适的Javascript的引擎的时候,我主要考量以下指标: 
兼容性:同时支持iOS 和 Android 在x86 和 ARM 平台上的 模拟器和 设备。
稳定性. 稳定的运行在对应的平台和CPU的架构上。
扩展性. 能够很方便的利用本地特性进行扩展。例如OpenAphid-Engine 通过一个桥接层,实现了通过Javascript 进行OpenGL ES 的使用。
性能好:一个快速的Javascript 引擎主要归结为两个因素:有效的绑定机制和进行较低的开销。. OpenAphid-Engine 在渲染一帧页面的时候通过JavaScript触发数百个OpenGL ES调用来进行渲染。这点是非常有意义的,如果只是把开销放到单纯的执行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查看精确的时间)

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这样的变体。
对于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上选择一个JavaScript 引擎进行应用开发

4. JavaScript判断客户端是iOS还是Android等移动终端

 var browser={ versions:function(){ var u = navigator.userAgent, app = navigator.appVersion; return { //移动终端浏览器版本信息 trident: u.indexOf('Trident') > -1, //IE内核 presto: u.indexOf('Presto') > -1, //opera内核 webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核 gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核 mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端 ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端 android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或uc浏览器 iPhone: u.indexOf('iPhone') > -1 , //是否为iPhone或者QQHD浏览器 iPad: u.indexOf('iPad') > -1, //是否iPad webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部 }; }(), language:(navigator.browserLanguage || navigator.language).toLowerCase() } document.writeln("语言版本: "+browser.language); document.writeln(" 是否为移动终端: "+browser.versions.mobile); document.writeln(" ios终端: "+browser.versions.ios); document.writeln(" android终端: "+browser.versions.android); document.writeln(" 是否为iPhone: "+browser.versions.iPhone); document.writeln(" 是否iPad: "+browser.versions.iPad); document.writeln(navigator.userAgent); 

5. iOS上有什么软件可以做web前端开发,编译HTML、CSS和JavaScript?

vs code已经支持ios可以直接安装使用。

iOS上有什么软件可以做web前端开发,编译HTML、CSS和JavaScript?

6. 如何启用javascript在Safari和iOS设备

1.    随着在MacOS上的Safari。点击Safari菜单,选择"Preferences…"(或按Command+,)
如果您使用的是Windows上的Safari。点击Gear icon,选择"Preferences"。
2.    "Preferences"窗口中选择"Security"选项卡。
"Security"选项卡部分"Web content"标记"Enable JavaScript"复选框。
3.    关闭Preferences弹出窗口,并刷新您的网页。
适用于iOS的Safari浏览器中的JavaScript启用(iphone, ipod, ipad)
1.    命中Settings图标。
2.    向下滚动,直到您看到"Safari"点击它调出选项页。
3.    "JavaScript"选项,打开你做了iOS上的Safari中启用JavaScript。

7. 如何启用javascript在Safari和iOS设备

Apple 推出 iOS 4.3

更新包括更快的 Safari 性能、iTunes Home Sharing、AirPlay 的增强和全新的 Personal Hotspot 个人热点

(2011 年 3月 2 日,旧金山) — Apple® 今天推出了 iOS 4.3 — 世界上最先进的移动操作系统的最新版本。iOS 4.3 的新功能包括:通过 Nitro JavaScript 引擎提供的更快 Safari® 移动浏览性能;iTunes® Home Sharing;AirPlay® 增强;使用 iPad 侧边开关锁定屏幕旋转或音频静音的选择;以及通过 Wi-Fi 共享一个 iPhone® 4 移动网络数据连接的 Personal Hotspot 个人热点功能。

“全球已有超过 1.6 亿个 iOS 设备,其中包括 1 亿多部 iPhone 手机,iOS 平台的发展可谓史无前例,” Apple 首席执行官 Steve Jobs 说,“应用于三大重量级产品 — iPad、iPhone 和 iPod touch,iOS 4.3 为世界上最先进的移动操作系统添加了更多功能,建立了一个非凡的生态系统,可为用户提供难以置信的丰富体验,为开发者提供无限的机会。”

iOS 4.3 让 Safari 移动浏览体验变得尽善尽美。Apple 率先在桌面系统上采用的 Nitro JavaScript 引擎现已内置在 WebKit (Safari 的核心技术) 之中,通过利用即时编译技术使 JavaScript 执行性能翻番。借助 Nitro JavaScript 引擎,Safari 提供了更好的移动浏览体验,让你可以更快地工作,以支持你日常访问的复杂站点的交互性。

全新 iTunes Home Sharing 可让 iOS 4.3 用户通过本地 Wi-Fi 网络,在 iPad、iPhone 或 iPod touch® 上播放 Mac® 或 PC 上的 iTunes 资料库中的音乐、电影和电视剧。只需轻点一下,你就能在家里的任何角落欣赏 iTunes 资料库中的所有媒体。你可以从一个房间的 Mac 将影片传送到另一个房间的 iPad,或者从办公室将 iTunes 混音传送到厨房里的 iPod touch。使用 iPad、iPhone 或 iPod touch 上的 Home Sharing,无论身处家里的任何角落,整个 iTunes 资料库都尽在你的掌握之中。

iOS 4.3 包含了 AirPlay 增强功能,这种创新的无线技术可让用户将音乐、照片和视频传送到 Apple TV®。有了 iOS 4.3,你可以将其它的内容传送到电视上,包括第三方应用程序和网站的视频、照片应用程序中的视频以及 iTunes 应用程序中的预览。* 另外,AirPlay 还能让你利用出色的全新幻灯片过渡在电视屏幕上呈现生动的照片,或者在 iPad 2、iPhone 或 iPod touch 上拍摄视频,然后直接从照片应用程序将其传送到 Apple TV。

iOS 4.3 的全新 Personal Hotspot 个人热点功能可让你将 Wi-Fi 随身携带到任何地方,以最多 3 个 Wi-Fi、3 个 Bluetooth 和 1 个 USB 装置组合的形式,与最多 5 个装置共享一个 iPhone 4 移动网络数据连接。** 加入 Personal Hotspot 个人热点非常简单,一旦该功能启用,状态条会显示当前连接了多少个装置。每个连接均进行了密码保护,不用时,Personal Hotspot 个人热点会自我关闭以延长电池使用时间。

如何启用javascript在Safari和iOS设备

8. 如何启用javascript在Safari和iOS设备

在Safari浏览器中启用JavaScript
随着在MacOS上的Safari。点击Safari菜单,选择"Preferences…"(或按Command+,)
如果您使用的是Windows上的Safari。点击Gear icon,选择"Preferences"。

"Preferences"窗口中选择"Security"选项卡。
"Security"选项卡部分"Web content"标记"Enable JavaScript"复选框。

关闭Preferences弹出窗口,并刷新网页。
最新文章
热门文章
推荐阅读