0%

大前端技术栈随想

本人做过较长时间的客户端开发,最近两年又开始带前端团队做 Web 开发和客户端跨平台开发方向,在工作中经常被问起客户端与前端的技术选型问题。之前有些零散的想法,一直没有汇总记录下来,现在是时候梳理下了。随着阅历的增加,有些想法可能还会发生变化。本文只是随想,不成体系。

客户端 vs 前端

抛开具体技术栈不谈,单纯对比 “客户端”(APP)和 “前端”(H5、小程序等)

从产品角度

  • 客户端是一个操作系统之上看得见的“实体”,属于一等公民;H5或小程序等前端页面是在“寄生”在 APP 上的“二级公民”。
  • 前端页面产品功能受限于“宿主”提供的能力,存在不确定性(如获取不到底层能力,被微信封禁等)。
  • 整体上客户端能够提供的能力维度和用户体验更好。

总结:产品上客户端的上限更高。

从工程角度

  • 客户端工程更简单,IDE 本身集成了很多能力,工程上相对闭环稳定,开发者可以专注于业务开发。
  • 前端工程更自由灵活,复杂的配置可以通过现有的脚手架工具解决,开发者在此基础上可以实现各类自定义能力。

总结:工程上前端的上限更高。

从技术角度

  • 客户端更锻炼开发者的技术深度,基于操作系统底层原理优化启动性能、内存、帧率的工作相信每位客户端开发者都或多或少参与过。
  • 前端更锻炼开发者的技术广度,前端开发者生态相当丰富,各类工具、框架层出不穷,经常让开发者感觉“学不动了”。
  • 客户端开发者相对来说更有“产品sense”(仅基于本人观察的情况),上升通道更广阔。
  • 前端技术空间更广阔,前端、服务端、跨平台(客户端)都能覆盖,全栈开发很香。

总结:技术上客户端和前端各有千秋。(“技术”没有上下限的区别,“人”才有。)

Native vs RN vs Web

技术栈没有孰优孰劣,脱离业务谈技术选型都是耍流氓。这里不再赘述Native、RN和Web的对比,主要谈些个人的心得体会:

如果团队同时具备客户端和前端技术栈的人才,一定要坚定不移走大前端之路。 APP 主体与核心模块使用 Native 技术栈,非核心模块使用 RN 等跨平台技术栈或 Web 技术栈。

用前端技术栈(HTML/JS/CSS)写客户端,优点是效率的提升,一套代码双端甚至三端运行,无需受版本限制随时发布。客户端虽然有 hotfix 能力,但是 hotfix 主要用来修复 bug,并不能作为功能开发的常规选项来用。跨平台的主要问题在于性能,性能的核心问题是首屏时间,这些都可以通过技术手段来优化。

之所以强烈推荐大前端技术栈,是因为除了跨平台和动态化带来的效率提升外,大前端可以为项目带来更深层次的进化:

  • 一致性:双端一致性一直是客户端开发的一个痛点,跨平台技术栈可以较好地保证一致的用户体验。
  • 项目架构:支持跨平台业务需要 Native 工程架构有更清晰的模块依赖和分层设计,业务会自然驱动客户端整体架构优化。
  • 技术素养:提升团队技术广度,储备大前端全栈人才,避免用时方恨少。