前言

  Native App:C/S架构,使用原生技术(Java/Objective-C/Swift)实现。

  Web App:B/S架构,使用浏览器技术来实现,广义上也包括phoneGap以及DP正在尝试使用的EFTE框架。

  在PC上,轻量级的应用多是B/S架构,具有轻便、速度快、无需安装、易于版本控制等优点,这种思想运用到极致就是用浏览器充当操作系统(Chromium OS)。在手机上,由于网络流量、屏幕适配、机能限制等种种原因,C/S架构的Native App目前仍然是主流。因为本blog主要专注于移动开发,下面就移动平台上,两种app的优劣做一下简单的总结,个人拙见。

Web App 的不足

  相比于原生,移动平台上的Web App应用并不是十分广泛,打开应用商店,排在前十名内并无一只严格意义上的web app。大致分析其原因,可总结为以下几点:

  1. 移动网络环境的限制。传输速度慢、不稳定、资费昂贵,这些是目前中国大部分地区移动网络的现状。相较于原生应用,web app往往需要更大的流量,所达到的渲染效果却很一般。对移动应用而言,加载速度慢是致命要害。在用户体验至上的考虑下,大部分厂商都会选择native作为实现方式。
  2. 设备本身性能有限。这一点在低端android机上尤其明显,CPU、内存、存储器、图像处理能力与PC机相比,差距是相当大的。这一点反映到用户体验上,同样是不可接受的速度拖慢。而native实现则可更多利用移动平台底层API接口,作出相应的优化。
  3. 相较于浏览器,native更容易实现一些酷炫的交互。如传感器、动画、定位、陀螺仪、拍照、录音……
  4. 移动平台碎片化严重,屏幕尺寸、分辨率千差万别,导致相同的页面放在大屏手机上展示正常,在小屏幕手机上却莫名其妙地发生换行,视觉效果糟糕,影响用户体验。而native则在适配上提供了一些措施,减少了适配方面的工作量。
  5. 同样是出于网络限制,浏览器不易于控制图片等大文件的缓存,浪费流量且加载速度慢,native可以自由制定缓存策略,且有sqlite等工具做数据存储。

  web app的不足,从另一角度讲,就是native app的优势所在。如果对以上5点进行分类的话,随着4G与wifi的普及,1、2在可以预见的未来里,相信会有一定改善,3、4两点恐怕需要相当的时间与努力,才可能完全克服。尤其是碎片化这点,加之GFW这一绊脚石,直接让谷歌统一android系统进入到困难模式。

Web App 的希望

  我是中国dota的希望尽管以上诸多方面表明,在十年(?)内,native仍旧会是主流,但web app仍然延续了PC时代一贯的优点,在一些场合,可以作为优于native的解决方案。下面也简单总结一下web app的闪光之处:

  1. 便于维护、升级。之所以把这个排在第一,是因为深受efte荼毒。每一次DP的app提交审核,都要冒着被App Store打回的风险,幸好天朝无需提Google play审核,不然android版本恐怕也要提心吊胆来发布了。efte则很好解决了这个问题,在后台更新相关模块的jar包后,前端无需提升版本,即可下载新功能使用。据说微信游戏也是类似的实现,没有研究过,不可妄下结论。不过站在用户的角度,隔三差五需要升级各种客户端,也是相当苦恼的,尤其是在没有wifi的环境下。
  2. PC时代,Trident/Gecko/KHTML/WebKit 等内核群雄逐鹿的场面,让不少前端工程师头痛不已。而在移动互联网时代,html、css、javascript技术,保持了高度一致。通过这些技术,可以消除移动平台的差异,作出一套东西同时运行在iOS与Android系统上。(感觉要失业的节奏)
  3. html5、css3等技术的发展与普及,为web app提供了更多的可能性。

认清自己的位置

  native也好,web也好,两者之间并不是谁取代谁,而是彼此协作相辅相成的关系。对于一名前端(客户端)工程师来讲,要吃透两个中的任何一个,都不是一朝一夕能够完成。学习的过程,更多的是一种提高自己学习能力与解决问题能力的过程,如同乐器,知识在某种程度上也都是相通的。想起前几天读过一段话,颇为有趣:人们总说小孩子学起东西来要比成年人快,也许是因为,小孩子在学习一项技能时,往往是一门心思日复一日去做,很少去考虑,这个东西我学了一周后就能掌握吗?一个月后就可以熟练吗?引以自勉。

参考资料

  1. web前端工程师在移动互联网时代里的地位问题 by 夏天的森林

对Native App与Web App的一些思考的更多相关文章

  1. Native App、Web App 还是Hybrid App?

    一.什么是Native App? Native App即原生应用,即我们一般所称的客户端,是针对不同手机系统单独开发的本地应用,如需使用需要先下载到手机并安装,下载Native App的最常见方法是访 ...

  2. Native App、Web App 还是Hybrid App

    Native App.Web App 还是Hybrid App? 技术 标点符 1年前 (2014-05-09) 3036℃ 0评论 一.什么是Native App? Native App即原生应用, ...

  3. Native App、Web App 还是Hybrid App?(转)

    一.什么是Native App? Native App即原生应用,即我们一般所称的客户端,是针对不同手机系统单独开发的本地应用,如需使用需要先下载到手机并安装,下载Native App的最常见方法是访 ...

  4. Do带你解析:原生APP与web APP的区别

    对于DeviceOne原生跨平台APP与WEB APP的区别,很多人还不是很清楚,下面就让小编来简单介绍DeviceOne原生APP的功能以及与WEB APP的区别. 定义,什么是原生APP和web ...

  5. 移动开发 Native APP、Hybrid APP和Web APP介绍

    高速区分定义: Native App 以基于智能手机本地操作系统如IOS.Android.WP并使用原生程式(SDK)编写执行的须要用户安装使用的第三方应用程序; Web APP 以HTML+JS+C ...

  6. Native App和Web App 的差异

    开发者们都知道在高端智能手机系统中有两种应用程序:一种是基于本地(操作系统)运行的APP:一种是基于高端机的浏览器运行的WebApp,本文将主要讲解后者. WebApp与Native App有何区别呢 ...

  7. Native APP ,Web APP,Hybrid APP三者对比

    Native APP Native APP 指的是原生程序(Android.iOS.WP),一般依托于操作系统,有很强的交互,可拓展性强,需要用户下载安装使用,是一个完整的App. 原生应用程序是某一 ...

  8. native app、web app、hybrid app、react-native 区别

    Native App:指的是原生应用程序,一般依托于操作系统,有很强的交互. 技术:Objective-C Java Native App开发的优点 提供最佳的 户体验 拥有系统级别的通知或提醒 可以 ...

  9. Native App vs Web App 以及 Hybrid App的实现原理

    移动应用基本的三种类型 1)  Native 应用程序 2)  Web 应用程序 3)  混合应用程序(Hybrid: Native应用和web应用结合) Native 应用 直接运行在电脑上或者智能 ...

随机推荐

  1. Android 抽屉类SlidingDrawer的使用

     比较简单,设置好SlidingDrawer控件的handle和content属性就可以了.  android:content="@+id/content"  android:ha ...

  2. C# .net 最大HTTP连接数

    说明:本WCF程序收到请求时会对外HTTP请求. 桌面系统默认是2个,如果是SERVER,默认是10个,超过10个就会排队,当有大量向外请求时,很多对外请求就会超时.排队的HTTP请求超时仍在计时. ...

  3. 【转】七个例子帮你更好地理解 CPU 缓存

    我的大多数读者都知道缓存是一种快速.小型.存储最近已访问的内存的地方.这个描述相当准确,但是深入处理器缓存如何工作的"枯燥"细节,会对尝试理解程序性能有很大帮助. 在这篇博文中,我 ...

  4. u-boot启动流程分析(1)_平台相关部分

    转自:http://www.wowotech.net/u-boot/boot_flow_1.html 1. 前言 本文将结合u-boot的“board—>machine—>arch—> ...

  5. 使用eclipse创建java程序可执行jar包

    一.eclipse中,在要打成jar包的项目名上右击,出现如下弹出框,选择“export”: 二.在接下来出现的界面中点击“jar file”,然后next: 三.在接下来出现的界面中,如图所示勾选上 ...

  6. RMQ问题ST算法 (还需要进一步完善)

    /* RMQ(Range Minimum/Maximum Query)问题: RMQ问题是求给定区间中的最值问题.当然,最简单的算法是O(n)的,但是对于查询次数很多(设置多大100万次),O(n)的 ...

  7. C#中abstract和virtual区别

    在C#的学习中,容易混淆virtual方法和abstract方法的使用,现在来讨论一下二者的区别.二者都牵涉到在派生类中与override的配合使用. 一.Virtual方法(虚方法) virtual ...

  8. lower_bound实现函数

    lower_bound实现 [参考链接]lower_bound二分的三种写法 我在以前,总是用lower_bound,现在发现这样不行,有些复杂的数据结构二分的时候用这个会很麻烦,不如手写二分,我接着 ...

  9. Oracle数据库 External component has thrown an exception

    出现这种错误一般是在SQL语句执行前就报出的错误.这样的错误一般需要仔细检查SQL语句,以及参数的数据类型. 而在cmd.ExecuteNonQuery()中出现的错误,则很可能就排除了语法类的错误. ...

  10. 《精通SQL Server 2008》笔记

    7.3触发器的使用 7.4游标的使用 8索引/关系图/完整性 9用户管理