前言
以下所有分析皆是从我的视角出发,探讨下我现行局势下觉得最有可能的实现且有未来发展前景的技术方案。由于本人没有啥开发经验,所以多是纸上谈兵,仅仅记录和分享下我个人想法。
移动App的开发模式:
在技术选型上,其实好久没这么犹豫过了,最近几天学到React Native,但迟迟没有全身心投入,就是在疑虑其和市面上的其他技术相比是否值得学习。
目前移动应用开发有以下三条主要道路(原生 H5 混合)外加一个国内特色的小程序
开发模式 | 典型应用场景 | 优点 | 缺点 | 代表技术 |
---|---|---|---|---|
原生开发 | 高性能需求、UI/UX要求严格的场景 | 性能高,完整API支持,用户体验佳 | 开发和维护成本高,无法跨平台 | Android SDK, iOS SDK, UWP |
H5开发 | 跨平台、快速迭代、内容动态更新的场景 | 一次开发,多平台适配,更新简单 | 性能受限,功能受限 | HTML, CSS, JavaScript, JSCore, V8 |
混合开发 | 跨平台、调用原生功能、性能要求较高的场景 | 跨平台,调用原生功能,维护成本低 | 性能较原生略差,复杂功能开发受限 | React Native, Weex, uni-app, taro,Flutter |
我的想法
移动端
局势分析
移动跨端多是讨论跨android和ios两大移动系统
早已经给自己作掉的Windows和就没啥起色过的阿里云OS都不在讨论范围,但最近遥遥领先的鸿蒙系统确实值得重视,可以预见的是HarmonyOS将随着国力进步等各种因素,将逐渐成为真正的第三大系统,所以在国内搞移动端应用开发不得不重视。
因此我在技术选型的时候会综合考虑这三个系统。
这是我从开发者视角去看的问题,HMOS的独立意味着又有新的技术需要花费精力去学习,看似岗位会增加,但是如果作为一个企业出发,就是意味着要投入更多的人力成本去开发维护,就算不是简单的乘法1.5倍,那也绝对是徒增的资金投入,(因为HMOS的使用并不会带来用户的增加,而是将原来使用华为手机的安卓用户变成了鸿蒙用户),给本就不乐观的移动应用开发岗位狠狠来了个暴击。其实这也在某种程度上意味着原生开发在小厂是不现实的,仅仅有可能是部分中厂和大厂有财力去招揽原生应用开发人员。所有我认为原生应用的岗位在未来是会变少的,而跨端应用的岗位会增加。
接下来我会逐个分析各个路线优劣。
原生开发
优点和缺点都是写原生带来的,原生开发的应用能优化到极致,性能最优异,能实现的功能也是最底层的;缺点就是需要为每个系统都单独开发维护,需要投入相较于其他路线更多的人力成本,且原生开发和其他俩条偏前端技术栈的道路不同,短期内是无法让前端开发者直接干原生开发的,也就是企业若要原生开发只能现招。
对开发者个人来说,前端开发者要进行原生开发偏离以往的技术栈
- 安卓要在Android Studio上开发,使用Kotlin编程语言,学习OOP思想,使用Jetpack库,学会设计模式,理解android系统等等
- 苹果则要使用MacOS系统,在Xcode上开发,使用Swift语言,学习OOP思想,用SwiftUI,学习ios系统等等
- 鸿蒙我没怎么接触过,华为为鸿蒙开发也单独搞了套开发语言和IDE等开发者工具,也是要单独学习。
基本上走这条路和曾经的技术栈是截然不同的,我个人的感觉也是如此,每一个都是几乎全新的东西,没太多可以通过前端经验直接移用的地方。
我个人认为这算是一条新的技术路线了,对绝大数前端程序员来说转型的阵痛过于凶猛了。
难听的已经说了,但对我个人来说若真要进行移动应用开发,原生这一套是不得不学的
- 一是移动端的交互逻辑与Web、桌面不同:屏幕大小不一样,点击逻辑不一样。其实这一点就值得开发者去思考,毕竟能用和好用是有很大差距的。学习这一套其实也能反哺Web开发,写响应式时也能有大致思路。
- 二是原生铁定的有市场的,就算跨端在厉害,只要对性能有追求,无论那跨端技术吹的多牛,都是有差距的。
- 三是原生开发的那一套是由相应系统的母公司直接维护,能保证和系统更新同步,系统的新特性,原生开发能第一时间用上,保证有完整的API支持。
- 四是应用开发完打包上架走正常流程就好,没那么多幺蛾子。
H5开发
我不看好,性能最低下,功能最受限,只能搞一些简单的APP。
混合开发
这就是我最近在研究的,最让我纠结的是目前国内的状况,GFW、各家手机系统魔改、巨头搞分割各占山头,这些都无疑增加了在国内搞跨端的难度。
先看技术栈吧,大致就是按React和Vue分,毕竟都是从前端的Web想要干移动端的事情。
国外的那一套React Native + expo,似乎在国内走不通。Weex和uniapp是基于Vue,我没学过Vue,被我pass了。剩下的只有taro了,还没开始动手学,该框架是京东维护着的,短期内是死不了,但绝对到不了好用级别。
Flutter是另外一个特色的路线,也是实现跨端,但是要使用Dart语言,渲染方法也比较特殊,本来由于我看是Google维护的挺有希望的,但最近传闻被Flutter团队被砍到50人,不知道Flutter是否能长久,我还是选择先观望个把月再决定。
大概的讲一下
逻辑层 | 渲染层 | 语言类型 | 代表技术 |
---|---|---|---|
js引擎 | webview | 弱类型 | uniapp |
js引擎 | 原生渲染 | 弱类型 | React Native、Weex |
dart引擎 | flutter渲染引擎 | 强类型 | Flutter |
App跨平台框架VS原生开发深度评测之2023版App跨平台框架历史悠久,从cordova、react native、f - 掘金具体的技术不同可以看下这篇文章,看一下是什么技术就行,这篇文章纯纯uniapp的广告文,这也是我特别反感uniapp的原因,本事没多大但吹的牛x轰轰😓。
我这么分析下来,估计也能明白我的迷惑了吧,混合开发目前还是真混乱,没有一款一锤定音的技术能作为保障,都有太多的不确定性了。
综合考量下,我选择还是趟一下RN这汤浑水,之后学的差不了的时候估计会再出一篇心得体会,害。开发的话会考虑使用taro,但是就目前我不会去学,毕竟还是处于成长探索期,迫不得已采用的开发框架等我工作再受这苦吧。学完RN之后到底是深入移动开发去学原生还是转向全栈去学Node.js等到时候再抉择吧。
桌面端
我也写不明白c系语言,直接无脑Electron得了,嫌弃包大就用下Tauri。
Tauri也在布局移动端,但我不怎么看好,毕竟移动端和桌面端还是不一样的,不单单是代码复用的问题。