前端技术选型总结和一些架构比较的优缺点

核心提示最近在公司里面遇到一个尴尬的事情,一开始手机是用 Native 开发的,进度赶不上产品的需求,有人反馈用 H5 可以大大加快速度,老板有点意思,但是又有人反馈用 H5 坑多,这下团队不知道如何是好,怎么选择了。为了解决这个问题,我结合一下自

最近在公司遇到一件尴尬的事。一开始手机是用Native开发的,进度跟不上产品的需求。有人报告说,使用H5可以大大加快速度。老板有点意思,但其他人报告说使用H5坑很多,所以团队不知道该做什么,如何选择。为了解决这个问题,我将结合自己的开发经验,尝试说明如何选择大前端的技术。欢迎大家多给我建议,一起讨论。

名词解释

移动终端

目前移动端的用户数量大于桌面端,所以先讨论移动端,列出我所知道的现有技术方案,只讨论android和iOS系统。

注意:

混合开发不仅仅是开发一个h5 webapp。h5需要调用本地接口,所以需要部署在本地。如果h5放在远程,只能显示一些静态资源。如果远程调用本地接口,是一件非常危险的事情。

其他原生解决方案不一定用Javascript编写。比如Xamarin是用C#写的,所以选择一个你的团队喜欢的解决方案很重要。它需要有人来覆盖,还有一些与原生平台相关的问题需要技术专家来解决。

其他原生方案其实都是牛逼团队提出来的。他们有对原生平台等领域非常精通的人,所以别人可以提出牛逼的方案。如果你的团队没有人可以覆盖它,他们将继续挖掘和填充漏洞。

业务非常着急的小团队更适合技术栈。并不复杂,有很多成熟的技术路线,所以原生开发更适合,招人更好。

业务比较急,但是有钱的话可以招一些牛逼的人或者已经有几个牛逼的人的团队,用“其他原生方案”比较合适。

白人多的队伍也适合原生发展。

特殊的创业团队,验证业务逻辑的,可以用混合开发,因为业绩不是最重要的。

如果使用原生开发方法,实际上可以混合使用其他开发方法。等团队壮大了,可以适当转行。

上面没有开发游戏的打算,因为我还没有做过游戏,游戏和APP开发的原理也有很大不同。游戏中的热引擎,unity3d.com/cn,也使用C#和JS作为主要开发语言。

很多人会质疑为什么原生开发的效率也很高。那是因为开发效率只是开发的速度。Native一般都有比较成熟的框架,当然不会慢,但是只需要两套人,成本高。

Google推出了框架Flutter,据说提供了一个引擎,所以你发布App的时候要带上这个引擎。咸鱼尝试过,但还不是很成熟。

综上所述,对于公司来说,没有最好的方案,只有最适合自己的方案。混合开发可以实现一个代码库,一次编写,随处运行,其他原生方案可以实现一次学习,随处编写。原生开发方案最成熟,技术栈简单,坑少。

PC终端

虽然现在互联网产品PC端的产品很少,但是我最近遇到了一些需求,需要在Linux,Mac,Windows上运行。相比手机,PC的功能强大很多,所以在PC上,混合开发的模式更受欢迎。

我只在windows上用过传统的原生开发方式,所以只能比较windows上传统开发方案和混合开发方案的优缺点。

以上技术都不能跨平台。当然C#有跨平台的虚拟机mono。以前mono上有个公司Xamarin,可以在Mac上开发。现在已经被微软收购了。

这些技术不再是我喜欢的。现在比较跨平台方案。

显然,如果不是为了玩游戏,电子会是一个很好的解决方案。我们常用的开发工具vs code是用电子开发的。

其他原生开发与Web开发的关系

其他的原生开发者,现在比较流行的ReactNative和Weex,都使用了一些web端的框架和知识,所以有必要解释一下他们和web开发的一些关系。

以React Native为例。

反应

React native和React使用相同的框架开发web。不同的是一个生成DOM并在浏览器中渲染,另一个最后调用原生接口。这样,学习了React的知识后,就可以在不同的平台上使用,学一次,在各种平台上写代码,实现了人力资源的重用。

既然React Native是需要调用平台原生的接口,那么它和混合开发模式有什么区别?我们来看下图,图中我们看到每一个UI元素都对应着Natvie的控件,所以UI渲染也是原生的,只是我们用JS来写而已。其实Xamarin也是类似的原理。

反应原理

为了进行比较,我们来看看混合开发架构。在下图的混合开发架构中,我们看到渲染界面是用HTML开发的,所以我们把最影响用户体验的UI交给了WebView,所以他的性能目前还不如原生UI。

科尔多瓦

电子建筑

PC上混合开发的模式和手机类似。电子进一步使用了浏览器的多进程架构,所以你开发的应用相当于一个浏览器加一个网页。之所以不用在手机里,是因为不是所有的app都需要这种复杂的架构,调用原生接口就可以了。

电子建筑

电子的牛逼之处在于主进程有节点环境,但是渲染进程也有节点环境,只是阉割了放在容器里。大部分电子使用H5渲染接口,但是与系统相关的ui,比如菜单,都是在主进程中使用原生UI来完成的。

React Native能做到不写平台相关代码吗?

对于这个问题,我特意咨询了以前的一个同事,他已经用react native写过几个项目了。他给我的回答是大部分都可以,他的方案是尽量使用两个平台都支持的控件。

50%使用ant design moblie,

30%使用其他跨平台开源控件

20%自行开发跨平台开源控件

一些原生相关的问题,一些陷阱,可以自己解决,其他的可以招做web开发工程师。

采用该方案后,还可以兼容微信小程序。

他的产品以银行产品为主,工具属性较重。

一套人马可以打天下,测试的时候也可以减少人力,因为逻辑代码也是一套。

其他方案

当然还有一些更小的解决方案,比如用C#开发。Xamarin可以了解以下内容。C++开发可以知道下面的QT,或者使用C++开发逻辑,这样也可以跨平台。这样的团队可能不多。

摘要

我们可以看到,使用“混合开发方案”和“其他原生开发方案”可以重用代码,整体效率确实很高。但是这些技术方案可能会因为技术栈的加入而导致一些坑,影响发展。所以在选择每一个方案之前,一定要明确在技术上是否可以把握。

 
友情链接
鄂ICP备19019357号-22