移动开发的革命
首先
看到这个标题,也许你就应该知道我要说啥了。 Android 有 Java, Kotlin, iOS 有 OC、 Swift 这些开发语言,而从过往的经历来说,大家并不满足于这些正统的客户端开发,有认为开发效率底,有的想尽量节省成本,不管为啥原因,这些都一直在发生着。
目前都有哪些技术?
是的,作为一个前端,在过去很长一段时间,我尝试过各种 app 开发的技术,掰掰手指数一下, 还是挺多的,下面列举一些我用过的...
- Webview + js Bridge
- PhoneGap ( Cordova )
- React Native
- Weex
- Fusetools
- Flutter
...
记得好多好多年前,我第一份前端工作接触到的项目就是 Webview + js Bridge 的解决方案,当时接触js 和客户端通信可以说是一脸懵逼,那时我才刚买了一部 小米 1s 。 到这么多年下来,我试过大部分的解决方案。
Webview + js Bridge
这种方案可以说是最长寿的了! 随着手机的性能不断的提升,可以说浏览器的体验也越来越越好,又因为网页的天然优势,更新方便,开发效率相对较高,web 开发也很成熟,html 5 在手机端的土壤环境可以说是比桌面浏览器好得太多。再通过 js bridge ,可以和原生客户端互补,完成一些功能和通信,成为了几乎企业的首选。
Cordova
Cordova 官方目前有 3000+ 的 plugin。 和 js bridge 一样,借助于它的 plugin 你可以实现很多网页无法实现的功能,不过目前的企业选型,很少有整个 app 用 cordova 进行开发,和 webview 方案比起来,显得又些尴尬。
React Native
由于 React 的流行,React Native 也跟着火了一把,通过 React 的 Component 抽象一个和原生的视图映射。不过业务逻辑是运行在 js 线程进行的。再通过 api 调用原生视图进行数据更新,不可避免的,中间会出现一些丢帧的问题,而同样,用 RN 做动画,里面的实现原理做优化也是绞尽脑汁。在官法文档里,你能看到专门的篇幅用于介绍优化的问题,以让你的应用看起来更流畅。
如果你感兴趣可以再手机QQ 的圈子看看,据说那个就是 RN 开发的,体验下,你应该能感受到区别。而他们的口号是 learn once write everywhere
, 在不同的平台,你还是需要稍微区别对待的,另外他们官方是没有 提供网页版本的,不够很多开源项目都造了轮子,来让 RN 生成一个网页版本。
Weex
在公司的业务中,尝试着接入了 weex。 Weex 的 DSL 支持 vue 和 rax。所以你可以用 vue 或者 react 的 style 进行页面开发。
对于公司团队的门槛要求会高一些,一般的公司都需要根据自己的业务需求来定制或者扩展 module 、component。当然开发中应该会遇到一些坑,不过只要你想,一般都能淌过去。如过你公司有现有的 vue 业务逻辑,你可以很轻松的迁移过去。
他们的口号是 write once run everywhere
所以他们也提供了网页版的支持,不过网页版的 sdk 实现感觉过于粗糙,我在自己的开发中,重构了部分组件,以使得它有和 app 端一致的表现。 对于动画方面,感觉还不是很成熟,如果你想做一个富交互的页面,那么它应该不是你的菜,如果你想做一些显示类型的页面比如会场,那么它会是非常合适的方案。
Fusetools
可能你之前没听说过这个,不够我关注它好几年了。 Fuse用于用来开发安卓和IOS跨平台的移动端原生APP,请注意“原生”二字。它通过使用 ux 类 xml 的标记语言来开发 UI, 用 js 来编辑业务逻辑。类似一些界面动画啥的都会编译为 c++代码,另外,如果你发现缺少了某些你需要的功能,它提供了一个叫 uno 的语言,类似于 c# 的子集 来开发扩展。你可以通过扫描一个二维码,来实时进行开发。
和 react 和 weex 不同,他的界面是通过 OpenGL 来实行界面控件的绘制,由于这层优势,你可以做出复杂交互并且非常流畅的应用。由于团队的规模不大,所以进展又些缓慢,不过最近他们推出了 Fuse Open 进行了一些转型。
Flutter
距离去年的 google io 大会,Flutter 迭代到了 “Flutter Beta 3: Ready for production” 它的工作原理和 Fuse 最为接近,和 Fuse 不同的是,在渲染层,它使用的是自家的 skia 进行实现的,会有更大的发挥空间。并且借鉴了 react 的那套模式,组件化 单向数据流,你也会在这里遇到 Flutter-redux 这种状态管理方案。和 react 类似,react 用 jsx 进行界面开发,而 Flutter 通过 dart 进行申明式开发。写起来有点类似于你用 js 创建 html。 而 通过 dart 编写 view 从语言层面上进行了支持,强类型、编译 从语言层面弥补了 js 的短板,上手快的。毋庸置疑编写的应用流畅性要高于 react native。而他们的口号是 “Build beautiful native apps in record time” 和 Fuse 一样,你可以编写出交互和体验很高的应用。
而今年的 Google io 大会上,很大的篇幅在 推广 Flutter 的 material design。 如果使用 material 风格,你可以用他们内置的一套 material widge 快速的搭建出应用。 而 material design 也进行了很多的更新,我最近也在系统的学习,感觉可以开另外的篇幅写写这方面的。另外 Flutter 应用可以运行在 google 的新版操作系统 Fuchsia 上。
总结
随着 手机 性能的提升,包括 chrome 给我发的邮件 拥抱 open web 的趋势,和 pwa 的推进,网页的体验会越来越好。所以对界面交互需求不高,对内容更新变动频繁的业务来说, webview 还会是最稳妥的一个选择。 而 Cordova 以为也可以在 app 总 潜入 Cordova webveiw 并且可以带来 plugin 的红利。如果你的技术团队有 客户端的开发实力,那么 plugin 对于你的吸引力可能不大。
如果你不满足 web 的性能,你可以尝试 react 或者 weex 来开发展示类型的页面和 app, 据我所知, 极客时间
整个 app 大部分都是用 weex 进行开发的。
如果你想快速开发一个交互相对复杂、对于流畅度要求高的 app, 那么你可以尝试一下, Fuse 或者 Flutter。 不过要说明的是 Flutter 有 google 的加持,在社区发展,工具链完善,等方面的支持会好于 Fuse。 所以我个人推荐 Flutter。
另外说到未来的趋势认为 Flutter 、Fuse 这种 view 模式的渲染方式要优于 react 和 weex 这种相对于原生组件的映射。而 Flutter 更为高级,因为他们使用了自己的 skia , 整体的发挥空间就更大了。相当于, react 这种方案要对应维护 对应操作系统的各种 view。而 Flutter 打交道的是 skia。对于像 RecyclerView 、 visual effect 这种实现可以说是更加统一、简单。当然你可能要花费一些额外的时间来学习 dart。先不说这门语言的优劣,从成本和上手难度来说是相对来说比较低的。
另外要说的是 material 设计语言,特别是在 android 平台上非常有竞争力。而Flutter 的 uikit 开发,整理上来说会由于目前正统的 android 开发。
在google 的博客中,Flutter 1.0 正式版应该会赶在明年5月份的 google io 大会推出。让我们拭目以待吧。
生命在于折腾,还是多学习学习吧,相比于故步自封,你总能获得一些新的收获,千万不要让技术革了自己的命。
so 立个 flag Flutter 会是下一个 热门。
2018.5.30 11:41:00