跨端浪潮下前端开发者的机遇与挑战

简介: 帮你找准方向。

作者 | 曹阳(染陌)

image.png
跨端一直都是一个前端开发者绕不开的话题,无论是基于研发效率的考量还是从业务场景的需求出发,跨端都是一个“刚需”。从最早的 PC 时代到移动时代,从移动时代到 IOT 时代,不断地涌现各种端,除了最常见的智能手机,它可能是小到一块智能手表,也可以是大到一个大屏终端 IOT 设备。而层出不穷的跨端技术,也为我们跨端方案提供了更多的选择。

那么我们究竟要跨哪些端?

  • PC 端与移动端:从最早期的 PC 时代过度到移动时代,开发者希望通过一套代码同时在 PC 跟移动两端复用,于是产生了响应式等技术,使业务在 PC 发展的同时,也完成了在移动端的布局,保证业务不会在移动时代落后。
  • Native 与 Web:最常见的两种智能手机的操作系统 Android 与 iOS,Android 应用是用 JAVA 编码的,而 iOS 使用 oc 或者 Swift 编码的。同样,基于降级策略以及外放的考虑,我们也希望一套代码可以同时运行在 Web 上,而 Web 则是使用 JavaScript 编码的。天然的差异需要我们在端上适配时提供多套不同的代码实现,这使得研发周期加长,研发工作量剧增。
  • IOT 设备:随着进入万物互联的时代,越来越多的 IOT 设备涌现在我们的生活中,随处可见的大大小小的带屏终端设备,都是新的“端”,譬如智能家具、可穿戴设备以及车载设备等等。跨端早就不只是 Android 跟 iOS 的事情了,各种各样的设备终端带来的新的挑战。
  • 小程序、轻应用:各种标准以及 DSL 诞生了新的“端”。
  • APP:各种 APP 之间互相投放。
  • and more......

跨端技术的演进

本着对研发效率以及用户体验的极致追求,跨端技术也随着历史的浪潮不断地发展。从最早的 H5 方案到 Hybrid 方案,以及后来的 Weex/React Native 方案,到现在如火如荼的 Flutter。
image.png
每个方案的演进都是为了解决当下方案的一些已知问题,但需要考量的因素都逃不过这些方面——渲染一致性、性能、体验、研发效率。我们并不希望需要去为不同的操作系统分别开发两份不同的 UI,期望可以通过一份代码使他们的渲染结果完全一致。同时,我们希望可以直接使用强大的生态去支撑我们的开发,拥抱标准,使得每次升级方案不需要对现有代码或者方案做一次大规模的重构。同样,性能与体验,也是端上绕不开的话题,这直接影响到我们的用户体验。

那么,下面来介绍一下跨端技术演进的几个重要阶段。

Web 以及 Hybrid APP

其实大家熟悉的 Web 就是最成功的跨平台方案之一,它与生俱来的跨平台能力、开放的标准以及强大的生态使它成为赤手可热的容器之一。

但是 Web 本身还是存在一些问题:

  • 内存消耗大、GPU 利用率低、长列表滚动等,这使得它在移动端的表现并不尽人意。
  • 由于各个浏览器厂商实现标准的迭代节奏慢,兼容性差,往往我们无法在 Web 上使用一些较新的能力,这使得我们的业务开发非常受限。
  • 性能差,尽管网络以及硬件的发展给了性能足够多的红利,但是日益复杂的业务总能把已有的性能吃透。
  • 由于 Web 需要向前兼容,有着非常重的历史包袱,一些古老的或者低性能的 CSS 可能会导致相当复杂的布局计算逻辑,消耗大量的时间。

image.png
于是在 Web 之上,衍生出一系列增强 Web 能力的方案:

  • Hybrid App:依赖原生容器提供给 Web 更多的能力,包括 prefetch、离线化等。
  • PWA:提供了离线缓存、系统通知等能力,但是目前在国内发展不容乐观。
  • PHA:使用 Hybrid 的手段让 Web 的体验更加趋向 Native。

但是 Web 的方案还是存在性能问题,但是原生开发我们需要适配多端开发多端代码,于是我们需要寻求一个性能与研发效率的平衡点,于是产生了 Weex 以及 React Native 等方案。

Weex/React Native

Weex 等方案通过 DSL 与 W3C 标准的子集向上结合了前端开发的生态,使我们熟悉的任何前端相关的工具都可以直接使用,保证了研发效率。而向下则是调用了系统自带的原生空间,使用原生渲染保证了性能与体验。

用前端代码开发原生 UI,这是一个非常美好的愿景,但是事与愿违,实际上还是存在一些问题。Weex 方案并没有抹平多端的差异,而是把差异的问题放在了容器侧去解决。由于底层直接调用了原生组件,而原生组件本身就存在一些限制,有限的能力不能满足开发者所有的需求,所以在实现 W3C 标准时有些牵强,会有一些在多端表现不一致的行为,没法保证完全的多端一致性。

image.png

Flutter

Flutter 可以说是这两年跨端方案的新宠,它既不使用原生组件,也不依赖 WebView,而是通过自己的高性能渲染引擎直接调用底层的 Skia 进行自绘渲染,保证了多端的渲染一致性。

image.png
Flutter 使用 Dart 语言进行开发,Dart 既支持 AOT 也支持 JIT,在开发时可以使用 JIT,这使得我们可以直接使用 HMR,保证良好的开发体验。但是在运行时它是在 AOT 模式下的,这也使得它在运行时会有更佳的运行效率。

但是对于前端开发者来说, Widget 这种基于状态驱动的开发模式已经是非常熟悉,同时学习一门 Dart 语言的成本也不算高。但是对于已有前端生态与基建等的替换成本却是无法接受的,同时,它本身不支持动态化在复杂多变快速迭代的业务中并不能很好的胜任。所以在 Flutter 的基础上,也出现了非常多与 Web 结合的方案的探索,比如说 Kraken、WFlutter 等。通过对接 W3C 标准,保证上层直接使用 Web生态,底层使用 Flutter 的自绘渲染保证多端的渲染一致性。

跨端中的变与不变

各种新的技术层出不穷,在技术的迭代演进中,也演化出了各种新的技术方案以及新的容器。技术在演进,容器在发展,这是“变”。

那么什么是不变?容器那么多,如何进行适配,是否每出现一种新的容器,我们必须要把目前的所有业务代码进行重构才能保证在新的容器上稳定运行呢?我们的上层所有基础设施是否需要重新开发?我们怎么样快速复用我们的强大的前端生态保证我们的开发效率?任何软件工程遇到的问题都可以通过增加一个中间层来解决,我们通过 Rax.js 等研发框架,抹平了不同容器的差异,向上提供了同一套 DSL 给开发者,实现 “Write once, run everywhere”。

当然,标准化也是未来的趋势,标准化的流程可以使未来各种新的方案无缝衔接。提到标准,前端开发者自然会想到 W3C,各种容器各种端,最终会殊途同归,拥抱 W3C 标准,向标准化迈出一大步。

image.png

机遇与挑战

无论方案怎么变,我们无非是想要在性能、体验、研发效率以及渲染一致性这几个纬度中找到一个最佳的平衡点。在跨端的浪潮中前端开发者如何找准方向,以及将会遇到怎么样的机遇与挑战呢?

欢迎关注第十五届D2前端技术论坛跨端技术专场,我们将邀请一线技术专家,为各位带来有关跨端研发解决方案的新思路、新进展、新挑战,结合真实业务场景共同剖析跨端研发提效、性能优化的最佳实践。

以全球 Web 角度谈前端性能的更新与趋势
Palances Liao / Google 资深 Web 技术专家

前端性能一直以来都是一个艰深的话题,除了各家都有自己不同的量测标准之外,怎样取得更精确的真实用户性能数据及通过工具的辅佐让我们更快速的调试成为了性能优化的一大难点。本专题会注重在 Google 如何定义性能指标,采集及提供优化性能的工具链如何帮助所有开发者快速调优前端性能,带来 Google 的最新研究。

盒马中后台跨端方案探索
孙伟伟(景庄) / 阿里巴巴前端技术专家

实体零售数字化过程中,盒马对人货场进行了全新的重构,在多元的业态和作业场景中,传统中后台的体验边界也进一步被延展,前端不再单一面向单一类型设备进行开发与交付,而是需要触及到 TVPCPadPhonePOSRFWatch 等更多的智能设备。在盒马,我们通过构建多端体验产品 Hippo 去解决新零售科技场景下的多端内容交付与体验一体化的问题,本次分享主要介绍盒马的中后台跨端探索过程,包括多端统一的设计体系,可跨设备复用的组件架构,以及支持跨端协同的应用架构。

跨端的另一种思路
佘锦鑫(当轩) / 阿里巴巴前端技术专家

Write Once, Run Everywhere 是诸多跨端方案的最终理想,然而理想和现实往往存在差距,跨端方案本身在带来提效的同时也伴随着相应的成本。本次分享主要介绍从场景出发,以 Flutter 和 Web 的逻辑跨端为例,介绍除 Write Once, Run Everywhere 之外的另一种思路。
image.png


image.png
关注「Alibaba F2E」
把握阿里巴巴前端新动向

相关文章
|
3月前
|
开发者 Android开发 iOS开发
Xamarin开发者的神器!揭秘你绝不能错过的插件和工具,让你的开发效率飞跃式提升
【8月更文挑战第31天】Xamarin.Forms 是一个强大的框架,让开发者通过单一共享代码库构建跨平台移动应用,支持 iOS、Android 和 Windows。使用 C# 和 XAML,它简化了多平台开发流程,保持一致的用户体验。本指南通过创建一个简单的 “HelloXamarin” 应用介绍 Xamarin.Forms 的基本功能和工作原理。首先配置 Visual Studio 开发环境,然后创建并运行一个包含标题、按钮和消息标签的示例应用,展示如何定义界面布局及处理按钮点击事件。这帮助开发者快速入门 Xamarin.Forms,提高跨平台应用开发效率。
45 0
|
3月前
|
JavaScript 前端开发 开发者
Vue.js的未来已来:掌握最新功能,驾驭前端开发的新浪潮!
【8月更文挑战第30天】Vue.js作为前端开发领域的明星框架,凭借其轻量级、响应式及组件化特性,深受全球开发者喜爱。它持续进化,引入新功能并优化性能,如提升渲染速度和减小打包体积,增强TypeScript支持,简化组件编写流程,进一步提升应用响应性和加载速度,改善开发者体验。活跃的社区和丰富的开源项目如“vuejs-challenges”推动其不断发展。未来,Vue.js将探索更多新特性,如宏和非虚拟DOM模式,巩固其在现代前端框架中的领先地位。
62 0
|
6月前
|
机器学习/深度学习 前端开发 Java
Java与前端:揭开技术浪潮背后的真相
Java与前端:揭开技术浪潮背后的真相
|
机器学习/深度学习 人工智能 自然语言处理
关于数据智能浪潮对前端技术发展影响的一些思考
在大数据和人工智能的浪潮下,到底对前端技术的发展带来了什么影响?
关于数据智能浪潮对前端技术发展影响的一些思考
|
新零售 Java 关系型数据库
5月17日云栖精选夜读:大数据浪潮下,前端工程师眼中的完整数据链图
今天几乎所有的互联网公司背后都有一支规模庞大的数据团队和一整套数据解决方案作决策,这个时代已经不是只有硅谷巨头才玩数据的时代,是人人都在依赖着数据生存,可以说如今社会数据价值已经被推到前所未有的高度。
4483 0
|
1月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
130 2
|
1月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
38 0
|
1月前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
|
1月前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。