Android开发者的担心:PhoneGap替代Android原生?

2022-05-06 11:03:39 浏览数 (2)

最近接触了PhoneGap,也顺带了解了Mobile Web.

他们出现的目的就是为了让Web开发者使用HTML、Javascript、CSS等Web APIs开发跨平台的移动应用程序。

现在很多软件,比如说腾讯新闻,就是采用Web技术开发,然后在PhoneGap上打包成APK。

(找不到腾讯新闻的图片对比,先用个别的):

从样式上看起来,给人的感觉和用原生技术开发的差不多嘛。而且重要的是MobileWebApp的优势真的很诱人,现在一般公司开发软件都是Android和iOS两套,成本很高。采用MobileWebApp后的确可以节省很多开销。

那么问题来了,作为正在Android原生技术开发道路上的一直菜鸟,我很担心:

会不会哪天我好不容易把原生技术学的差不多了,duang!一下子PhoneGap可以完全替代Android原生了。

我可不想像塞班垮台时那些可怜的程序员一样,苦苦修炼二十年,一夜回到解放前。

带着这种恐惧我遍访名医啊,各种百度,终于找到了让我可以心安的答案:

的确比起手机App,网站有一些明显的优点。

  • 跨平台:所有系统都能运行
  • 免安装:打开浏览器,就能使用
  • 快速部署:升级只需在服务器更新代码
  • 超链接:可以与其他网站互连,可以被搜索引擎检索

但是,现实是怎样呢?

  • (1)体验差。手机App的操作流畅性,远超网站。
  • (2)业界不支持。所有公司的移动端开发重点,几乎都是原生app。
  • (3)用户不在乎。大多数用户都选择使用手机app,而不是网站。

如果将来有一天,Web app会成为主流,一定有一个前提,那就是它的性能可以赶上Native app。

注意了,关键在于目前移动app“性能”不足。

那么性能问题是什么原因呢?

Web app的性能瓶颈,主要有以下原因。

  • (1)Web基于DOM,而DOM很慢。浏览器打开网页时,需要解析文档,在内存中生成DOM结构,如果遇到复杂的文档,这个过程是很慢的。可以想象一下,如果网页上有上万个、甚至几十万个形状(不管是图片或CSS),生成DOM需要多久?更不要提与其中某一个形状互动了。
  • (2)DOM拖慢JavaScript。所有的DOM操作都是同步的,会堵塞浏览器。JavaScript操作DOM时,必须等前一个操作结束,才能执行后一个操作。只要一个操作有卡顿,整个网页就会短暂失去响应。浏览器重绘网页的频率是60FPS(即16毫秒/帧),JavaScript做不到在16毫秒内完成DOM操作,因此产生了跳帧。用户体验上的不流畅、不连贯就源于此。
  • (3)网页是单线程的。现在的浏览器对于每个网页,只用一个线程处理。所有工作都在这一个线程上完成,包括布局、渲染、JavaScript执行、图像解码等等,怎么可能不慢?
  • (4)网页没有硬件加速。网页都是由CPU处理的,没用GPU进行图形加速。 上面这些原因,对于PC还不至于造成严重的性能问题,但是手机的硬件资源相对有限,用户互动又相对频繁,结果跟Native app一比,就完全落在了下风。

以上几点原因好像短时间不能解决呢,我可以放心喽?

目前来看好像是的,虽然对于自己的私心来说希望他发展的慢一点。

但是站在互联网发展的角度,还是希望有一天可以实现完全替代原生,毕竟可以节省许多不必要的开销。

James Long对FlipBoard的尝试,写了一篇评论《Radical Statements about the Mobile Web》。在文中,James Long对未来的Web app提出了几点预测,我认为很值得分享。

  • (1)多线程浏览器。每个网页应该由多个线程进行处理,主线程只负责布局和渲染,而且应该在16毫秒内完成,JavaScript由worker线程执行,这样就不会发生堵塞了。Mozilla正在开发的Servo就是这样一个项目。
  • (2)DOM的异步操作。JavaScript对DOM的操作不再是同步的,而是触发后,交给Event Loop机制进行监听。
  • (3)非DOM方案。浏览器不再将网页处理成DOM结构,而是变为其他结构。React的Virtual DOM方案就是这一类的尝试,还有更激进的方案,比如用数据库取代DOM。
MobileWeb发展内容借鉴自http://www.ruanyifeng.com/blog/2015/02/future-of-dom.html ,我只是一只可爱的搬运工~

0 人点赞