基于 PhoneGap 与 Java 开发的 Android 应用的性能对比

标签: 未分类 | 发表时间:2011-10-21 11:07 | 作者:editor jinn
出处:http://stblog.baidu-tech.com

     

        此次的调研的重点是针对一个Android应用的基础需求,用phonegap与Java实现的应用在性能及开发成本等方面的对比。    

       开发一个应用的最基本需求应该是浏览性需求,而在Android开发中ListView比较常用的控件,广泛被用于数据列表的展现上,而且也比较灵活。所以本次选择用phonegap和Java各自实现一个ListView的内容展现功能的应用;同时引入另外一个常用组件GridView来实现图片浏览的功能应用。  

Delicious书签订阅应用

  

一、应用功能描述

  

         Delicious书签订阅应用。进入应用首先展现订阅的书签源列表,点击书签源项,进入书签源书签列表页,共展现最新的20条书签。    

         数据来源由Delicious提供的JSON格式的数据。参考地址(http://www.delicious.com/help/json)    

二、应用界面截图

1、PhoneGap delicious bookmark

  

    

     

2、Java delicious bookmark

  

     

 
三、功能测试对比

  

【测试机器为 Google Nexus One G5】  

Android应用类型 Html5 (phonegap) Java
功能实现 Html + jQuery基础库 ListView组件
文件大小 159KB 23KB(只用了系统的原生界面)
内存占用 45.37MB(RSS) 27.02MB(RSS)
数据通信 Ajax Apache http Java功能包
启动速度 打开相同订阅源2.7秒 打开相同订阅源2.3秒
操作响应速度 正常操作速度流畅,频繁操作响应会变慢 操作速度流畅
Monkey注入5万个事件测试结果 Events injected: 50000:Dropped: keys=17 pointers=43 trackballs=0 flips=0     ## Network stats: elapsed time=1108130ms (0ms mobile, 1099670ms wifi, 8460ms not connected)      

// Monkey finished      

Events injected: 50000:Dropped: keys=28 pointers=53 trackballs=0 flips=0     ## Network stats: elapsed time=1216977ms (0ms mobile, 1216977ms wifi, 0ms not connected)      

// Monkey finished      

稳定性 在Monkey测试注入大约4万个事件时,整个应用已经处于空白无响应状态。有连接超时情况发生。手动频繁操作会引起,响应速度变慢,webkit的WebView不能很好释放内存,甚至会引起应用的crash。   能较好处理Activity切换延时等待。运行较为流畅。Monkey测试时书签列表页切换时有时候会出现黑色背景,然后再载入列表,比正常速度稍慢。能够比较好的释放内存,没有出现过应用crash的情况。  
资源占用 对于频繁操作时,内存释放不够理想,导致内存占用上升。 内存占用相对比较稳定。
开发成本 运用html +  css  + javascript开发,适合前端人员开发。由于webkit在不同的终端机发行版本不一样,所以需要针对不同的机型进行适配。同时对于不同屏幕大小在适配上也只能通过Javascript进行控制实现。 适合有Java开发经验的程序员,可以充分利用Android提供的组件进行开发。但是开发学习成本较高。
开发难度 目前phonegap只使用一个WebView,开发时需要使用OPOA(One Page, One Application)的模式,对代码的组织方式及开发方式有较高要求。同时介于手机的资源有限,对如何管理和分配内存提出了要求。目前phonegap可以在控制台输出简单的JS调试日志,但是并不方便。   需要有Java开发经验,同时对Android开发体系有较深入的了解。
多人协作 OPOA模式并不利于多人协作并行开发,只能通过基础的javascript的设计模式来解决多人协作的问题。 比较方便支持多人协作并行开发。
其它问题 1、需要通过Javascript来管理操作的历史记录,并保证返回键能够正常使用;同样也包括选项键。2、不提供调用新的WebView,不能把现有的wap版的内容直接包装到应用当中。    

空间图片浏览应用

  

一、应用功能描述

  

      在应用中创建一个gridview方式展示的图片列表。 图片总数 48, 16行3列。 原生app使用gridview布局和渲染。webapp使用了jquery和jquery.mobile(后者依赖前者)  

二、应用界面截图   

  

1PhoneGap mm100 photo viewer   

  

     

2、Android Java  mm100 photo viewer   

  

     

三、功能测试对比

 
【测试机器为 Google Nexus One G5】    

Android应用类型 Html5 (phonegap) Java
功能实现 jQuery与jQuery Mobile基础库 GridView组件
文件大小 220KB 72KB
内存占用 40.6MB(RSS) 29.9MB(RSS)
启动速度 约7秒(js大小会直接影响速度) 约3秒
操作响应速度 在内容比较多的时候,都不是很流畅。调用外部交互:弹窗提示为例,会比原生大约有1s的延迟。 在内容比较多的时候,都不是很流畅。调用外部交互:原生app基本上瞬间响应。
Monkey注入5万个事件测试结果 Events injected: 50000:Dropped: keys=20 pointers=72 trackballs=0 flips=0     ## Network stats: elapsed time=1460305ms (0ms mobile, 1440448ms wifi, 19857ms not connected)      

// Monkey finished      

Events injected: 30002:Dropped: keys=7 pointers=10 trackballs=0 flips=0     ## Network stats: elapsed time=230436ms (0ms mobile, 230436ms wifi, 0ms not connected)      

** System appears to have crashed at event 30002 of 50000 using seed 0      

稳定性 由于交互深度较浅,所以整个Monkey测试过程较为流畅,但是还测试完毕后还是存在WebView内存无法释放的情况。 整个Monkey测试过程较流畅。
资源占用 Webapp占用内存约40.6M,占用应该主要是由于webapp是基于浏览器的,并且加载了一个java库所致。所以资源占用应该不是线性的。 占用内存约29.9M,内存占用相对比较稳定。
开发难度 对于比较简单的应用,在同样具备完善基础库的条件下,两者开发难度基本一致。
其它问题  1.内存优化:webapp因为是基于浏览器的,而浏览器自身是进行了相应的优化的,所以在图片显示上很不错。     原生app如果在一页中显示比较多的图片的时候,必须比较细致完善的进行内存优化工作,否则极易出现因为图片资源过大而引起的崩溃问题。      

2.图片缩放裁切 webapp一般情况下通过js和css来进行缩放裁切。在进行图片动态缩放的时候,页面显示情况不是很正常(抖动,跳跃)。最好的办法是后端服务器对图片处理后再发送给手机端。      

原生app可以直接通过java来对图片进行处理。      

3.布局 原生app可以利用android提供的特殊技术方案,来自动适应多种分辨率的屏幕。如9png 和 多drawable目录。 相当简单方面。 但是在交互方面,原生app的开发量会比较大。      

webapp就比较杯具一些了,需要开发者比较多的关注。 可以通过js来动态的获取屏幕尺寸进行资源调整和加载(开发几套不同的ui,然后根据分辨率js动态加载),这个会花费比较多的时间。      

4.调试      

webapp js调试不太方便,特别是调用外部应用的时候。如果是本应用内部,可以通过firebug进行调试。      

总结   

  

        此次对比主要集中在对大量数据通信下web app UI性能。通过与Java app相比较,web app的UI性能会比Java app的UI性能差。主要原因是依赖webkit浏览器内核的渲染解析能力。同时在只有一个WebView的情况下,如何控制内存的上涨速度以无法释放内存的情况无缝地重新启动WebView从而不影响用户体验,是一个现实待解决问题。  

         在非大数据量且不需要频繁更新UI的情况下,基于wekit浏览器phonegap模式还是可以满足Android开发应用的需求。同时应用的实现的效率还依赖于OPOA开发模式的Javascript基础架构是否强大和高效。  

         对于不同分辨率的屏幕,需要通过JS或者通过要集成的框架封装来解决适配的问题。同时由于不同版本的Android所集成的webkit的版本不同,同样也需要处理不同版本的在JavaScript和CSS支持上不同的兼容性问题。还有解决开发时多人协作及方便的调试工具集成,也是进行html5 app开发的重要前提条件。   

此次对比主要集中在对大量数据通信下web app UI性能。通过与Java app相比较,web appUI性能会比Java appUI性能差。主要原因是依赖webkit浏览器内核的渲染解析能力。同时在只有一个WebView的情况下,如何控制内存的上涨速度以无法释放内存的情况无缝地重新启动WebView从而不影响用户体验,是一个现实待解决问题。   

         在非大数据量且不需要频繁更新UI的情况下,基于wekit浏览器phonegap模式还是可以满足Android开发应用的需求。同时应用的实现的效率还依赖于OPOA开发模式的Javascript基础架构是否强大和高效。  

         对于不同分辨率的屏幕,需要通过JS或者通过要集成的框架封装来解决适配的问题。同时由于不同版本的Android所集成的webkit的版本不同,同样也需要处理不同版本的在JavaScriptCSS支持上不同的兼容性问题。还有解决开发时多人协作及方便的调试工具集成,也是进行html5 app开发的重要前提条件。  

  

相关 [phonegap java 开发] 推荐:

基于 PhoneGap 与 Java 开发的 Android 应用的性能对比

- jinn - 搜索研发部官方博客
        此次的调研的重点是针对一个Android应用的基础需求,用phonegap与Java实现的应用在性能及开发成本等方面的对比.        开发一个应用的最基本需求应该是浏览性需求,而在Android开发中ListView比较常用的控件,广泛被用于数据列表的展现上,而且也比较灵活. 所以本次选择用phonegap和Java各自实现一个ListView的内容展现功能的应用;同时引入另外一个常用组件GridView来实现图片浏览的功能应用.

Phonegap + HTML5 开发经验小结

- - Miller
        去年曾对 Phonegap做过一次调研,当时还是1.1版本,印象也一般. 对他的性能以及真实的跨平台能力都不太确定. 今年过完春节至今正好有机会参与了一个纯Phonegap + HTML5开发的项目,项目至今已经完成了一期的App Store提交,所以也正好能抽时间来小结一下. 一个月左右的开发过程让我对这种开发模式有了更深的认识,这对于前端开发人员而言绝对是一个大的机会.

基于phonegap开发app的实践

- - CSDN博客Web前端推荐文章
app开发告一段落,期间遇到不少问题,写篇文章记录一下. 为虾米要用phonegap. 开发app,至少要考虑android和ios两个版本吧,android偶可以应付,ios表示完全木有接触过,于是时间成本、开发成本上去了. phonegap则解决了这个问题,而且对po主而言,用web开发的方式来搞app很爽啊有木有.

phonegap使用的java与js互相调用的原理

- - 移动开发 - ITeye博客
phonegap使用的java与js互相调用的原理. phonegap实现的模型刚也说了,有同步和异步两种. js实现的api,所以是js先会调用java代码,然后再返回给js. 对于同步的而言,就是js调用java,然后java返回一个结果作为返回值. 对于异步的而言,可能js掉了很多java代码,但是立即返回,然后java代码执行结束后再回调js代码,这里就涉及到js调java,然后java再调用js.

PhoneGap:免费开源的 HTML5 移动应用开发平台

- - HTML5研究小组
PhoneGap 是一个免费开源的开发框架,让 Web 开发人员能够使用熟悉的 HTML,. JavaScript 构建跨平台的移动本地应用. 通过 PhoneGap 框架提供的 JavaScript API 能够以非常简单的方式调用移动设备的核心功能,包括地理位置,摄像头,加速器,通讯录,多媒体,文件和网络等功能.

PhoneGap开发不可或缺的五件装备

- - 方糖气球
1 轻量级的JQuery兼容库:JQ.mobi/Zepto. JQuery已经成长的得非常强大了,但在移动设备上有些臃肿. 如果你的应用只运行在WebKit内核的机器上,那么我强烈建议你换用移动版本的JQuery兼容库. Zepto和 JQ.mobi都是专门为移动设备优化后的JQ兼容库. Zepto我不是特别熟悉,JQ.mobi我用得比较多,官方提供的数据称,JQ.mobi比JQueryMobile快3倍以上.

phonegap开发app中踩过的那些坑

- - CSDN博客Web前端推荐文章
把遇到的问题列出来,如果有解决方案的,偶也会写下来,如果大家有更好解决方法的,欢迎留言噢. phonegap 2.9无法触发deviceready事件. 亲们可以看下控制台有木有报错,如果有提示cordova_plugins.json 404 (Not Found) ,就在www目录下新建个空文件,命名为cordova_plugins.json就好了,cordova初始化的时候会请求这个文件,但po主还没发现这个文件有啥用,但是没有这个文件的话,cordova初始化失败,自然不会触发deviceready事件.

PhoneGap 1.0 让手机程序开发者横扫七个平台!(影片)

- Yihui - Engadget 中国版
目前手机程序开发者的开发模式:先开发 iOS 的程序,然后再将程序移植到 Android 上,其他平台要再等一下. 但是,Nitobi 公司的最新软件开发工具可能可以改变这个局面了. Nitobi 的 PhoneGap 1.0 可以将以 HTML、JavaScrpt 或 CSS 语言写成的程序转换为可以在 iOS、Android、BlackBerry、Windows Phone 7、webOS、Bada、和 Symbian 上运行的程序,一举多得.

看看国外的phonegap和ionic移动app开发框架有多火

- - Web前端 - ITeye博客
下面给大家分享一下外的phonegap和ionic移动app开发框架到底有多火:. phonegap网站的日访问量:  ip:555000. 基于phonegap 以及angularjs 的移动app  html5开发框架 Ionic 的日访问量  ip:492000. 大家都懂的,下面给大家简单介绍一下  phonegap   Angularjs    ionic  懂的可以不看.

初识PhoneGap

- - IT技术博客大学习
标签:   PhoneGap.      一、PhoneGap是什么.     PhoneGap是一个标准的开源框架,用PhoneGap开发移动应用是免费的,无论是商业或是开源;一个用基于HTML,CSS和JavaScript的,创建跨平台移动应用的 快速开发平台. 它使开发者能够利用iPhone、Android、Palm、Symbian、WP7、Bada和Blackberry智能手机的核心功能——包括地理定位,加速器,联系人,声音和振动等,此外PhoneGap拥有丰富的插件,可以以此扩展无限的功能.