一码多端方案比较
Outline:
- Intro
- Flutter
- Electron
- Tauri
Intro
- 本来, 使用跨平台技术就是为了节约开发成本, 不过事实证明, 一种框架用到底, 最好适配问题一大堆, 开发成本反而越来越高. 所以最好的应用开发模式是Hybrid, 即原生+框架.
- 对于需要调用大量底层API, 并且UI不复杂的部分, 建议使用原生.
- 不需要大量底层API的部分就用框架.
- Flutter, RN, Electron都可以进行移动端和桌面端开发
- Flutter因为生态最差, 桌面端开发就不要想了( 毕竟桌面应用大部分都是生产级的, 逻辑最复杂, 对底层调用最多 ).
- RN在桌面端略逊于Electron
- Electron在桌面端强于另外二者, 事实上, Electron在桌面端的对手是Tauri
- Tauri只用于桌面端, 目前还没有移动端适配,但是Tauri的roadmap上明确提出将来会做移动端适配.
- 相比其他三者, Tauri没有大公司撑腰, 所以移动端适配估计很烂.
- 当然,对于中国互联网, 还存在小程序端. Flutter, RN, Electron的小程序支持都不错.
- 此外还有人听说过Uniapp, 它使用Vue来开发移动端和小程序端, 对标RN. 这玩意儿实在是太烂了, 我都不想骂它. 用它的人好好反省一下, 自己的眼光为什么这么差.
Flutter
Flutter CLI很优雅, 但是Flutter生态太烂了.
React Native
生态很好. 总体而言中规中矩, 没啥缺点.
Electron
内置了Chromium引擎, 所以不同平台看到的都是一样的结果. 无论是移动端, 桌面端, Web端, 都是适配性最好.
且Electron开发就是纯粹的前端开发, JS + HTML + CSS. 学习成本低.
Electron和RN都使用了JS运行时( node ,deno之类... )
缺点是速度很慢, APP体积臃肿.
Tauri
Rendering
Tauri在桌面端对标Electron. Electron内置了Chromium引擎, 而Tauri使用操作系统内置的浏览器引擎:
- Edge Webview2 (Chromium) on Windows
- WebKitGTK on Linux
- WebKit on macOS
但是, 因为Safari (Based on WebKit)臭名昭著地烂, 所以Tauri在Safari上可能有很多Bug.
总结: Tauri在桌面端的适配性略低于Electron.
Backend
Tauri的后端使用RUST, 因此没有runtime. 程序直接被编译为二进制代码, 速度更快. 缺点是需要学RUST.
- RN和Electron的后端都是NodeJS.
- 不过Tauri的roadmap也在考虑TS/JS运行时的适配.
- Tauri的后端暴露给前端简洁的接口. 但是在必要时刻, 还是得用RUST来写后端API.
Frontend
Tauri的前端和Electron一样, 是纯粹的 JS + HTML + CSS开发.
Bundle
Tauri APP由于是二进制码, 安装包大小比Electron小几十倍
Performance
Tauri软件是二进制码, 因此速度比Electron快一倍. Startup time也大概快一倍.
Security
Tauri生成二进制代码( 无runtime ) , RN和Electron都生成JS代码( runtime为node ). 前者逆向起来的难度远高于后者.
Developer experience
Electron和Tauri的开发体验都很好.