正当大家兴致勃勃地开始设计手机应用程序时,可能会遇到每个 Developers 和策略者都感到争议的问题:“我应该利用原生语言(Native App),还是混合模式 (Hybrid App)来开发我的手机程序呢?”
Native VS Hybrid
Native App:原生语言程序是为了特定的操作系统而编码,用的也是特定操作系统的开发套件 (Platform SDK), 如 Apple iOS。因此它的性能和工具一向比 Hybrid App 优越。
Hybrid App: 混合语言程序的部份代码会以 Web 技术编写,如 HTML5, CSS 和 JavaScript。这些程序都是被包裹在原生容器 (Native Container) 和透过手机上的浏览器引擎来呈现 HTML 和执行 JavaScript。 Hybrid App 的优点是一个编码程序能够跨越不同的作业平台,不需要为每个操作系统编写特定的编码。
该选哪种语言好?
Developers 也因此常徘徊于该选用拥有优越性能和工具的 Native App,还是单码跨平台的 Hybrid App 的头痛抉择里。究竟有没有明确的答案显示哪一个开发语言程序才是最强最佳的代表呢?
其实,随着手机操作系统不断的更新,如近期的新版本的 iOS 和 Andriod, 都令手机的 Javascript 运行速度改善了不少。
这种改进令到 Hybrid App 的性能得到相当的提升,而它们的工具设备也日渐成熟了。现在已经有许多成熟又吸引的工具方案,如原生用户界面 (Native UI) 和装置应用程序界面 (Device API),甚至有模拟器 (Simulators)、开发套件管理 (SDK Management)、装置调试 (on-device debugging) 等等。
看来,人们对 Hybrid App 的开发已认真起来了。
当然, Hybrid App 的方案并不是完美万能的,Native App 还有些地方是不能被取代,但现在 Hybrid 开发已经证明了它已经不逊于 Native 开发了。
要建造优良的 Hyrbrid App 是需要精心的策划和考虑到装置上的网络平台独特功能。在你准备向下个 Hybrid App 的大冒险前进时,有几点是值得留意的:
1 . 关键特性,如 App 的性能
2. 把 Native 当做指引,从中学习
3. 选择适当的开发工具,缩短与 Native App 的差距
当然,你有选择自由
Hybrid 和 Native 的争论,就好像比较着苹果和橙子哪样较好,都是没有赢家的。
就拿开发 Apple iOS Native App 来打过比例,你毋须思索都会自动想到用 IDE (XCode),一系列的程序库和 Object-C 编码程序设计工具 (CocoaTouch, CoreGraphics, CoreData 等) 的开发工具来编写 iOS Native App。
如果我们把这些丰富的资源去和 Hybrid 用的 HTML, JavaScript 和 CSS 来作比较,这根本就是一件不公道的事!你还没有把 Hybrid 的跨平台这种优点包括在内呢!
Hybrid 除了能够单码跨平台外,还能够让你自由地选择你喜欢的应用程序组合,如整合开发环境 (IDEs), 程序框架 (Frameworks), 程序工具 (tools) 和应用程序服务 (Services)。比起只支援单一平台 Native App,Hybrid App 无疑是更自由和更有弹性的首选。
性能是其中的一个设计重点
程序的性能对所有的 Apps 来说是非常重要的一环,可是 Developers 常常把这部份留到最后。就是先把整个应用程序做好再慢慢调整它的性能。对一般的桌上计算机还可以接受,可是在资源和电能都有限的移动装置上调整性能就会非常困难了。
如何解决这问题呢?答案就是将性能引入初步设计策划里,而不是留到最后才开始慢慢调整。
例如你在编码前已预先计划了你的 App 将会以 60fps (Frames per second) 运行,那么你大概需要 17 milliseconds per frame 去执行程序码和更新用户界面 (UI)。这样的时间根本不能提供流畅的运行,还很可能会令你的帧 (Frame) 出现问题呢。为求 Hybrid App 有更好的稳定性,建议采用 30 或 40fps 比较自然的运行速度。
另一个影响 Apps 性能的因素就是用户界面设计。
影子效果,渐变色层,仿真的修饰设计是可以提高用户界面仿真度,但也会同时消耗了很多装置的资源啊。所以在设计用户界面前先问问自己,这些资源消耗量大的仿真设计是必要的吗?或是可以用消耗量较少的平面设计呢?
从 Native 中学习
想拉近和你对手的距离,就要向他学习和熟悉他的招数。
设计 Hybrid Apps 也应如此的向 Native Apps 学习,尝试熟悉 Native SDK 的环境反应和模拟它的设定。就拿 Apple iPhone 的滚动屏幕做例子,当你用手指头在屏幕上下滚动,屏幕上的东西也随着手指滚动的方向快速地移动。这样的高性能和反应速度是怎样做到的呢?就是用 iOS 的 UITableView, 它能够重复地使用被移出屏幕的单元格 (Table cell),载入新的资料,然后再次在屏幕的另一边出现。
这种不断重复利用单元格的技术叫做 『用户界面虚拟化』。这种技术给使用者在一个在庞大的数据库中滚动的假象,其实真正用到资料单元格是很少的。因为用到的单元格不多,所以这种技术能令 App 的运行速度更快速和更节省电力。
你能从上面学到什么关键能用在 Hybrid 上吗?很多呢!当中就是 UITableView 的单元格滚动技术。把 UITableView 变成 HTML DOM 的元素,用这方法去仿效 UITableView 来用在 Hybrid App 上,那么 Developers 就能以类似的方式来重复使用或把 DOM 虚拟化来改进 Hybrid App 的滚动体验了。
Hybrid 的开发是非常吸引的,因为能够采用你熟悉的网页技术来建造你的 App。可是这同时也是一个陷阱呢!记住不要把 Hybrid App 当成一个迷你和独立的网页来设计啊。建造理想 Hybrid App 的最佳守则就是细心研究和观察 Native 平台和 SDK 的设计,学以致用再 Hybrid Apps 的开发上。
你需要适当的 Hybrid 开发工具
虽然开发 Hybrid Apps 的程序设计工具有很多,但一个优良的工具是会把网页平台和 Native SDK 之间的的功能差距拉近。这样子你就不需要担心性能的问题了,因为这类的工具会在建设 Hybrid App 时把程序的性能元素包括在内。所以利用优良的工具能够得到与 Native 模式相同的好处。
当然,你也可以自由地选择适合你的开发工具并成功地建造你的 Hybrid App, 但当跨平台式和 App 的出品时间为你的首要条件时,你就应该选择更优良开发工具来建造你的 Apps。
一个好的 Hybrid App 是不会在无意间产生的。就如同 Native App 一样,建造优良的 Hybrid Apps 是需要把设计焦点放在性能和手机独特的设计模式上。随着手机网页技术在近期不断的提升,现已有很多很棒的跨平台开发工具。只要有稍微的性能设计和有合适的工具,要打造一个华丽的跨平台式 Hybrid App 已是一件轻而易举的事了。
如果你还在做 Native App 的开发,何不试试跳槽到 Hybrid 来个全新的开发体验呢?