作为一个开发者搭建体系

1999 字
10 分钟
作为一个开发者搭建体系

跨平台开发/跨端开发#

不管是跨平台还是跨端的终极奥义都是:Write once, run everywhere。

跨端一般指应用层的说法,对用户介绍的比较多,比如说移动端,PC 端,WEB 端。 而跨平台一般都是指比较专业的术语,面向专业的人员例如开发人员比较多,比如说 window,linux,unix 各系统平台。

什么是跨平台? 泛指编程语言、软件或硬件设备可以在多种操作系统或不同硬件架构的电脑上运作。一般来说,有这几种场景,分别是跨设备平台(如 PC 端和移动端),跨操作系统,(移动端中分 Android,IOS,PC 端中分 Windows,macOS,Linux),国内的小程序(微信,京东,百度,支付宝,字节跳动等等)

什么是跨端 跨平台指的是跨操作系统,而跨端是指客户端,主要的客户端有 web、安卓、ios 等 现在主流的跨端方案有: react native、weex、flutter、kraken 等 其实跨端和跨平台的思路类似,都是实现一个容器,给它提供统一的 api,这套 api 由不同的平台各自实现,保证一致的功能。

近些年来,跨平台跨端一直是比较热门的话题,Write once, run anywhere,一直是我们开发者所期望的,跨平台方案的优势十分明显,对于开发者而言,可以做到一次开发,多端复用,一套代码就能够运行在不同设备上,这在很大程度上能够降低研发成本,同时能够在产品效能上做到快速验证和快速上线。如今跨端跨平台的优秀技术方案也比较多,

移动端: React Native,Flutter,Weex; 小程序端: Taro,Uniapp; 桌面端: NW.js,Electron,Flutter for desktop,Tauri,Wails,

在上古时代,人们主要通过电脑浏览器上网冲浪,Web 技术占据了主导地位。然而,随着移动互联网时代的到来,各种设备和平台如安卓、苹果、鸿蒙等纷纷涌现。为了应对这种多样性,开发人员渴望能够编写一套代码,适用于多个平台。于是,跨端开发(Cross-platform development)应运而生。

首先理解:什么是语言?什么是框架?

为什么我们需要跨平台开发? 本质上,跨平台开发是为了增加代码复用,减少开发者对多个平台差异适配的工作量,降低开发成本,提高业务专注的同时,提供比 web 更好的体验。嗯~通俗了说就是:省钱、偷懒。

一套代码,多端运行(iOS、Android、MacOS、Windows、Linux、Web、小程序…)。

Flutter 基于绘图库 skia 自带渲染引擎,提供画布达到从业务逻辑到功能呈现的多端高度一致的渲染体验。

Web 开发+原生渲染 采用类 Web 标准进行开发,运行时把绘制和渲染交由原生系统接管 保留了构建移动端页面必要的 Web 标准,使用 JavaScript 开发保证了便捷的前端开发体验;放弃了浏览器控件渲染,使用原生 UI 组件代替核心的渲染引擎,仅保持必要的基本控件渲染能力,从而使得渲染过程更加简化,也保证了良好的渲染性能。】 渲染:组件——自己的 virtual dom——借助原生能力实现

React Native React Native 的口号是“Learn once, write anywhere” Weex 与 RN 的方案一直,只不过上层框架使用的是 Vue

Flutter 和 React Native 没有明显的差距,如果有,早就被市场所淘汰了。

Web 开发+Web 渲染 基于 Web 相关技术, 通过 Web 浏览器组件来实现界面及功能 使用 Web 开发+WebView/Chromium 加载网页 JS Bridge(桥): H5 与原生代码交互协议,将部分原生系统能力暴露给 H5,从而扩展 H5 的能力。 既有原生代码也有 Web 代码,因此被称为 Hybrid 开发模式。由于 H5 代码只需要开发一次,就能同时在多个系统运行,大大降低了开发成本。

Ionic 微信小程序

TAURI/Electron:基于 Chromium 和 Node.js 的桌面应用程序开发框架 Electron 基本可以归属于上个时代的产物,和 React 同年 2013 年面世,彼时还处于前端高速发展的初期,Angular 和 React 刚从 jQuery 中抢过来一小部分用户,Vue 还在胎中,webpack 刚发布还不足两年…… Tauri 是一款用 Rust 编写的桌面应用程序开发框架,它结合了 Web 技术和本地应用程序的优点,可以使用常见的 Web 技术(如 HTML、CSS 和 JavaScript)来构建应用程序,并将其封装在一个本地应用程序中。

C++ 利用高性能可移植的 C++语言, 一次编码多端编译来实现跨平台开发, 适用于核心平台是桌面端的企业

原生 UI + C++ QT + C++

React Native#

使用 React Native 进行跨平台开发是当前最热门的选择之一。它是 FaceBook 推出的一种跨平台开发框架,可以让开发者使用 JavaScript 或 TypeScript 编写应用程序,并将代码编译为原生的 iOS 或 Android 应用。 React Native 学习曲线较为平缓,它提供了大量的组件和 API 来帮助你创建应用程序。React Native 还可以与其他第三方库和框架配合使用,从而为开发者提供更多的选择。

Weex#

采用类 Web 标准进行开发,运行时把绘制和渲染交由原生系统接管

1.0 原生渲染组件,类似 RN 2.0 基于系统图形库 Skia,类似 Flutter,技术架构上完全推倒 1.0 重新研发

更多关于 Weex 的,请参考下面几篇文章 五年陈的 Weex,聊聊它的过去现在和未来 如何评价阿里无线前端发布的 Weex? 如何看待 Weex 未能从 Apache Incubator 毕业?

weex 一出生处境就很尴尬,前有前辈 RN,后有新秀 flutter,注定没多少空间发展

Flutter#

Flutter 是一种 Google 推出的跨平台移动应用程序开发框架。它允许开发者使用 Dart 编写应用程序,并将代码编译为原生 iOS 和 Android 应用程序。Flutter 支持 iOS、Android、桌面和 Web 平台,它具有快速开发、高性能和美丽 UI 界面等优点。

uniapp#

uni-app 是一个基于 Vue.js 开发的跨平台应用框架,可以快速构建出同时支持多个平台的应用程序,包括 iOS、Android、H5、以及微信小程序等。该框架允许开发者使用 Vue.js 进行开发,然后将代码编译为原生应用或 H5 页面。

Uni 在客户端 APP 这方面很垃圾,但是用来写个小程序个人觉得还是可以的,开发很快 是的 只是单小程序而已 开发效率比原生快

Elector 原理

原生开发#

原生开发

使用语言:Kotlin/Java/Swift/OC 优势:

官方原生支持,功能强大健全,性能和体验是最好的 组件丰富,社区强大

劣势:

Android 和 IOS 需要分别开发,开发人力、测试人力翻倍,bug 数量翻倍 容易出现 ios 和 Android 表现不一致的情况

社区:官方社区,比较活跃

总结:不能多端开发,开发,测试,维护成本都偏高,直接淘汰

多端开发#

混合开发#

Hybrid#

基于 webview 渲染,通过 JS Bridge 把一部分系统能力给 JS 调图

H5#

语言#

原生#

框架#

Vue、React、Servelet JavaSpring Python

体系#

百花齐放的跨端方案#

虚拟机#

渲染引擎#

开发环境#

总结#

所以,在当下掌握一门跨平台的技术栈还是很有必要的,无论从广度还是从深度都会有所帮助。 市面上仅剩两种主流方案,就是经常听到的 React Native 和 Flutter。一个出自 Facebook,一个出自 Google。

作为一个开发者搭建体系
https://wangxiang.website/posts/工作/developer/
作者
翔子
发布于
2023-07-25
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
翔子
前端开发工程师
公告
博客已从 VitePress 迁移到 Astro + Firefly 主题,223 篇文章全部保留。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
221
分类
9
标签
28
总字数
411,914
运行时长
0
最后活动
0 天前

文章目录