看这篇就够了!2021 大前端技术回顾及未来展望( 四 )


4、桌面端 - 前端开发的下一个战场持续扩大桌面应用领域影响自 2014 年 Github 推出 Electron 开源框架开始 , 前端跳出 Web 客户端局限 , 开发桌面应用的能力成为了可能 , 近年来 , 依托 Electron、React Native、Flutter 等应用框架 , 前端跨端开发桌面应用的概念持续升温 。尽管这些方案和传统的 QT、Xaramrin 等技术栈相比 , 性能未必最优 , 但它意味着一些极具性价比的可选方案出现 , 大大降低了开发桌面应用的门槛 。
2021 年 , 前端 Electron、React Native Desktop 等应用框架的更新迭代都趋于稳定 , 虽然没有了一些突破性的亮点功能出现 , 但各个框架都针对性能、应用场景等痛点问题在持续进行深入的优化 , 而近年概念火热的 Flutter 也将它的桌面版在 21 年纳入了 Beta 阶段 , 异军突起的 Tauri 以其优异的性能和包大小受到了关注 , 潜力不容小觑 。总体而言 , 在桌面应用开发领域 , 前端技术的影响力在与日俱增 , 前端可以参与的内容比重也在不断增加 。
ElectronElectron 是 GitHub 开发的一个开源框架 。它通过使用 Node.js(作为后端)和 Chromium 的渲染引擎(作为前端)完成跨平台的桌面 GUI 应用程序的开发 。已有大量知名桌面应用采用 Electron 进行开发 , 如 slack、VSCode 等 。Electron 的所需开发能力与前端开发能力技术栈有着较大的重合 , 因此对于前端开发同学来说 , 使用 Electron 进行桌面开发的上手门槛较低 , 同时 Electron 作为一个深耕迭代 8 年的项目 , 应用生态链丰富 , 进一步减少了上手成本 。
使用 Electron 进行桌面应用开发 , 对于前端自身能力提升也有赋能 , 一方面扩展了技术广度 , 可以将前端的业务能力范畴由单一的 Web 端页面扩展到 PC 应用开发 , 一些目前 Electron 暂时不支持的能力 , 还可通过 C++ 编写 Node 组件来扩展支持;另一方面很多前端侧的限制被打破 , 比如一些传统的 Web 安全限制 , 系统底层接口的调用 , 能够做到开发能力赋能 。
当然 , Electron 也并不是全无缺陷的 , 一些常受诟病的缺点有:

  • 打包体积过大 , 由于捆绑了 Chromium 内核等大量依赖 , 导致 Electron 的打包体积普遍在 100M+ , 这一点我们可以使用 asar 压缩、动态链接库等方式进行优化 。
  • 内存占用高 , 同样的由于捆绑了 Chromium 内核 , Electron 的内存占用普遍也较高 。
  • UI 层视觉渲染效率低 , 这一点也可以通过优化手段 , 如多进程处理任务、甚至利用视觉假象来提升用户体验 。
虽然 Electron 有着一些已知的问题 , 但完善的生态链、与前端技术的高度重合 , 目前仍然是快速开发桌面应用的推荐方案 , 对于性能问题我们也较容易通过一些常见的优化手段来进行解决 , 达到 80 分的程度 。2021 年 , Electron 依然保持着 8 周一个 major 版本的稳定更新频率 , 推出了 V12 到 V15 的多个大版本 , 更新的内容主要集中在 API 的删改、系统特性的适配、Chromium 内核等依赖的版本更新等细节方面 。
React Native DesktopReact Native 是 Facebook 技术团队于 2015 年 4 月在早先的 React 前端框架基础上开源的一套移动跨平台开发框架 。对于桌面应用的构建 , 目前 RN 团队暂时没有推出官方的桌面端版本 , 主要依托社区项目进行持续发展的能力建设 。在这之中 , 微软开发的 React Native For windows + macOS 技术方案是经验积累最多 , 也是开发迭代最为稳定的方案 , 自 15 年底项目发布以来 , 已经经过了 6 年的稳定迭代 。2021 年 RN 团队推出了 0.64-0.66 三个重要版本 , 而微软在 React Native For Windows 的迭代中 , 也时刻保证对 RN 主版本的更新 , 同时也支持了大量 Windows 相关的特性 。如果你构建的桌面应用主要目标用户在 Windows 平台 , 那么使用 React Native For Windows 不失为一个好的选择 。
值得一提的是 , 2021 年 RN 技术团队除了在推出的重要版本中提供对新的 Android 12 与 IOS 15 系统的支持外 , 也着重提到了与微软团队在桌面应用构建技术上的共建 , RN 团队表示 , 将通过引入 Facebook 的 Messenger 团队共建 , 来为桌面应用提供一些「独有的」技术能力 , 以此提升 React Native 桌面版的用户体验 , 对此 , 我们也将拭目以待 。


推荐阅读