移动前端开发和Web前端开发的区别有哪些

技术移动前端开发和Web前端开发的区别有哪些本篇内容介绍了“移动前端开发和Web前端开发的区别有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大

本文介绍了“移动前端开发和Web前端开发有什么区别”的知识。很多人在实际案例的操作中会遇到这样的困难。让边肖带领你学习如何处理这些情况。希望大家认真阅读,学点东西!

回顾:前端发展史

第一阶段:刀耕火种。

十几年前,前端开发人员还在努力兼容IE6,jQuery是框架中的佼佼者。Zepto.js可以在前端开发中用来减小网页的大小。此时前端页面主要是基于PC的。这个时候还没有移动前端的概念,小手机屏幕上的流量页面主要是纯文本。

移动前端开发和Web前端开发的区别有哪些

第二阶段:工程。

移动前端开发和Web前端开发的区别有哪些

在2011年至2014年的历史时期,模块化思想占主导地位。当时,为了设计资产资源加载器,制定了模块化协议规范。当时流行的模块化协议有AMD(RequireJS)、cmd(以sea js为代表)和kmd(以kissy为代表)。淘宝、天猫、Kissy很受欢迎,所以KMD称霸全球;Seajs在支付宝和外部社区非常受欢迎,所以CMD称霸全球,而宇博的大口碑和威望在前端圈子里特别高;AMD在国外很受欢迎,但被CommonJS标准逐渐削弱。

第三阶段:流动性。

随着3G、4G的发展以及iOS、安卓手机在市场上的日益普及,PC业务的主战场逐渐向移动终端过渡。前端思维模式从PC变成了移动,符合App的用户体验。移动HTML5协议支持不完善,前端制作设施不全,安卓屏幕碎片化,所以当时前端开发移动页面适配的痛苦远超PC时代。

移动前端开发和Web前端开发的区别有哪些

第四阶段:框架。

在前端社区中,Angular、React、Vue、RN (React Native)等MV*框架相继出现,让前端接受了数据驱动思维的洗礼,也用RN完成了移动终端的体验升级,包括后来的Weex和Flutter。

这一阶段,前端开始有了终端的底层架构群,开始构思移动终端上前端页面的加载性能和用户体验性能。在阿里巴巴,为了解决多路复用的问题,Rax和VDOM一起开通了WebView和Weex,一套代码跑遍全球。

移动前端开发和Web前端开发的区别有哪些

第五阶段:垂直化。

随着第一代iPhone的发布,大屏手机逐渐成为主流,对移动终端的需求也开始爆发。在淘宝天猫,双十一移动终端的成交额逐年递增,逐渐占据绝对领先地位。随着这一趋势,前端领域逐渐细分,根据场景可以简单分为移动(无线)前端开发和中后台前端开发。

移动前端开发面向消费者端的Web和轻App业务场景。在这种场景下,经过多年的营销活动,淘大在移动端逐渐形成了独特、轻量的解决方案,以及模块维度、面向操作的页面搭建体系。

中后台前端是针对ERP、CRM、OA等落后的业务场景。比如业务后台系统。在此场景下,借助飞冰、Fusion Design等中后台素材,形成可视化中后台办公建筑解决方案,为业务的前端、开发或产品角色提供一站式中后台生产解决方案。

移动前端:混合技术的前世今生

曾几何时,移动客户端开发和前端开发是两条没有交集的平行线,但现在我们正在拥抱两者的合作产品:Hybird应用开发,或者说使用最近流行的一个概念——大前端技术。

从技术的表达来思考,本质上客户端开发和前端开发都是终端技术,其特点是直接为用户进行UI编程。

有了UI编程,我们面临的痛点是什么?

传统 Web 前端技术的技术局限性

1.资源加载:HTML、JS、CSS、图片等静态资源存储在远程服务器,需要动态异步拉取,再拉取数据显示,初始化效率比Native慢很多。

2.渲染机制:浏览器设计中,JS执行、页面布局、Paint都在同一个主线程中,无法并行化。此外,JS的性能跟不上AOT语言,导致执行复杂逻辑时卡顿。

顿通常会阻塞 UI,再加上冗长的渲染管线,导致浏览器的渲染体验在等量对比 Native 时并不占优势。

3、页面切换:在浏览器中并不存在路由的概念,这导致页面间的切换体验完全依赖于浏览器 Shell 提供的能力,在页面切换的时候会反复加载。当然前端社区中也出现了单页面应用的概念,但是多个页面的资源也显著增加了 JSBundle 的体积,也使页面的开发更加复杂化了。

4、API 能力:浏览器的安全机制是基于同源策略的沙箱机制,这套沙箱机制阻止了前端开发者使用原生系统能力,你只能使用 W3C 标准定义的功能,而且考虑到终端碎片化的问题,这些接口往往不能直接使用。这在 PC 端的场景中是没有什么问题的,但是在移动端则相反,开发者希望有能力调用系统接口实现一些更富交互的场景。

5、交互性能:浏览器的实时交互性能体验差,在复杂交互场景中大规模的重排限制了 UI 帧率,这种限制在中低端移动设备中尤为严重。

6、脚本语言,动态解析执行

JS 是一门 JIT 语言,也就是需要动态解析执行,对比预先编译机器码的 AOT 语言的执行性能就差得多了。

传统客户端技术的局限性?

1、动态性:客户端开发通常是有固定的版本发布计划,而且受制于 Apple 的 App Store 审核规则,版本发布的不确定性还会受到政策影响,Android 在国内的渠道众多,每次发版都要反复检查渠道,一旦发现线上问题需要依赖再次发版,容错成本非常高,这也大大增加了对业务的局限性。

2、开发成本:客户端的开发成本高,然而生态还不如 Web 丰富,npm 社区的几万开源包,加上更活跃的开发者社区,导致对企业来讲客户端的研发成本是高于 Web 开发的。

3、跨端一致性:传统客户端开发一套业务,是需要实现 Android + iOS 两套代码的,而且由于 Android 和 iOS 的操作系统能力差异,同样的需求往往会用不同的视觉和交互来实现,这也导致了业务成本居高不下。

▐ 混合式前端开发

为什么会出现混合式前端开发?

随着 iOS + Android 确立了移动操作系统的统治地位,前端开发者也在寻找使用操作系统提供的能力进行业务开发的模式。Web 的开发方式远比 iOS 和 Android 更加方便和高效,Web 上层出不穷的各种库和框架也远比 Android 和 iOS 的各种库和框架方便的多。Web 上我们可以方便的使用各种前端框架,及时预览效果(想想大型 Android/iOS 工程的编译时间)。

从阿里巴巴的角度来看,随着中台化的理念逐渐被接受:业务需要追求快速发展,前台的 UI 和需求会随着商业决策快速迭代,前端和客户端不同的岗位也形成了分工化的研发模式。

前端向上,前置作为业务方的唯一接口,逐渐演变为大前端的业务层。在这一层,它的职责是负责定义规范,通过框架规范业务的开发过程,同时封装统一的解决方案和工程化能力,将重复的工作抽离。

客户端向下扎,解耦业务需求,转为大前端的架构层,给上层的业务开发者提供能力支持。通过将客户端的系统级 API 以及宿主应用的能力暴露给上层前端,提高前端页面对更多富交互场景的承载能力。

移动前端开发和Web前端开发的区别有哪些

在这样的大背景下,各种混合开发技术层出不穷,在这里我们简单的把混合式应用的发展定义为三个阶段:

▐ 阶段一:JSBridge

在这个阶段,主要还是以 WebView 为主,并配合 JSBridge 提供了 Naive 与 JS 之间的通信链路,基于这个通信基础,Native可以暴露出一些标准服务 API 提供给 JS 调用,同样的 JS 也可以以此封装一些基础API给 Native 调用。前端开发者使用传统的 JS + HTML + CSS 进行页面的开发,并且调用 JSBridge API 驱动客户端能力。在这个阶段,Apache Cordova 是业内的佼佼者,大多互联网公司内部也有自己的 JSBridge 框架实现,可以说 JSBridge 第一次给了前端开发者调用 Native 的能力。

移动前端开发和Web前端开发的区别有哪些

但是 JSBridge 方案的主要缺点在于性能方面及高级组件扩展能力缺失,流畅性始终无法与 Native 媲美。

▐ 阶段二:原生 UI

虽然 Web 的动态性和高效的开发效率,是原生开发望尘莫及的,但是浏览器技术的瓶颈也非常明显:

1、W3C 作为开放的技术标准,历史悠久,包袱多,显著拖慢了浏览器的性能。

2、WebView 渲染引擎设计的上的缺陷,渲染流水线非常长,导致浏览器对合成器动画和非合成器动画区别对待,非合成动画性能不好。

3、单线程模型,无法发挥现代硬件架构特别是 ARM 架构多核心的性能。

4、异步光栅化的设计,在进行长列表滚动时,不可避免出现白屏的现象。

**有没有一种两全其美的方式?

React Native/Weex 的出现给前端开发者带来了一道曙光。**

React Native/Weex 利用 JS 引擎来调用 Native 端的组件,从而实现相应的功能。React Native 和 Weex 都允许前端开发者使用 JS 进行业务逻辑开发,使用 VDOM 来描述文档结构,并配合 CSS 的子集来定制样式,样式和模板分离。

Weex 体系中, JS 的执行在 JS Thread,Layout 执行在独立的 Layout Thread ,渲染执行在系统的 MainThread ,三个线程相互独立,并行执行。

在 WebView 的体系中 JS 的执行、 Layout 、 Paint 都在 MainThread ,相互影响,在进行复杂任务时会导致界面卡顿。

这种方案的优势在于最大化的复用前端的生态和 Native 的生态体系。

在阿里巴巴,Weex 的大规模应用,甚至支撑起了双十一亿级的流量。

移动前端开发和Web前端开发的区别有哪些

▐ 阶段三:自绘引擎

什么是自绘引擎?

所谓自绘引擎,就是不依赖操作系统提供的布局、原生组件能力,直接调用 GPU 或者底层抽象层进行绘制的渲染引擎。

在上一个阶段,前端开发者已经可以使用 JS 引擎驱动原生 UI 了,为什么还需要自绘引擎?

React Native/Weex 充分将 Native 的 View 体系输出到前端体系中,在进行 Android/iOS Native View 的封装过程中,存在不少难以逾越的障碍。如:难以抹平的双端一致性问题、复杂样式能力难以实现、 Layout 动画需要执行两次(WeexCore Layout 和 Android Native 本身的 Layout )。组件的封装成本随着复杂度增加也越来越高,难以逾越 Native View 限制提供更细致的 W3C 标准能力。

2018 年 Flutter 诞生,通过 Dart 语言构建一套跨平台的开发组件,所有组件基于 Skia 引擎自绘,在性能上和 Native 平台的 View 相媲美,同时解决了上一代架构难以解决的双端一致性等问题。引起大家广泛关注,充分验证了通过绘制构建组件做到 Native View 媲美的 UI 渲染引擎的可行性。

但是 Flutter 本身是缺乏动态更新特性的,社区上也有一些项目在探索 Flutter 的动态化特性,我们团队内部也在实现面向前端的动态化 Flutter 引擎:Kraken,与其它方案不同的是 Kraken 并没有基于 Flutter 自带的 Widgets 框架进行扩展,而是从底层扩展了 W3C 标准的 API,这使得它更像一个浏览器,也让 Flutter 面向 Web 开发者的使用门槛大大降低。

未来:回归本源

天下大势,分久必合,合久必分。移动前端开发本质上还是终端开发的一种形态,不管容器、框架、语言怎么变,在前端开发者中只有 W3C 的标准是永远不变的。笔者认为,随着 Web 的发展,在解决一系列性能、体验问题之后,浏览器技术会成为更通用的 UI 编程标准。

▐ PWA

早先年,Google 就已经在这一领域内努力,推出了 PWA (Progress Web Application) 的概念。

PWA 通过在移动端浏览器提供标准化框架,在 Web App 中实现和 Native App 接近的用户体验。它的特性其实是一系列 W3C 标准和私有标准集合,简单的说 PWA 支持:

  •  离线加载:通过 Service Worker 等提供的缓存机制,允许用户在断网或者弱网的情况下直接读取离线资源。

  •  后台驻留进程:正常情况下,浏览器的页面关闭后它的整个生命周期就结束了,内存也得到了释放。Service Worker 允许页面在关闭的情况下继续运行,这保证了类似于离线缓存、主动推送等。

  •  消息通知:允许 Web 开发者实现类似 App 的主动推送机制。

  •  其它移动 App 的功能特性,如直接保存图标到桌面,允许用户像正常使用 App 一样打开 PWA 应用;可以隐藏 UI 中的默认浏览器元素,让 Web 内容全屏展示,从视觉上看让 Web 应用更像一个原生应用,有时候你根本无法分辨到底是 Web 应用还是原生应用。

▐ PHA

当然在标准能力不完善,业务又需要定制化能力的当下,混合式应用还会继续发展。

PHA (Progress Hybird Application) 的概念应用而生,PHA 是一种渐进式的混合应用增强策略, 提供端测的辅助能力,提升 WebView 的渲染性能与体验。广义地说,当下比较火的小程序、快应用都是 PHA 的一种实现。

在淘系内部,我们也在实现一套轻量级的 PHA 方案,并且在大促中也取得了不错的效果,我想后面单独出一篇关于 PHA 的文章来阐述。

关于未来,随着技术方案的多样化、以及端边界的扩展,我们认为最重要的就是效率与性能的问题。

移动前端开发和Web前端开发的区别有哪些

基于大数据的机器学习能力,移动端上会拥有更高效的 UI 编排能力,最终能让 UI 渲染实现实时个性化。

移动前端开发和Web前端开发的区别有哪些

基于最近比较热的 WebAssembly 能力,让浏览器突破 JavaScript 的限制,能拥有更大的想象空间。

“移动前端开发和Web前端开发的区别有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/51136.html

(0)

相关推荐

  • 社保局什么时候上班,社保局几点上班

    技术社保局什么时候上班,社保局几点上班上午11:30和下午5:30 社保局什么时候上班。社会保险 (Social Insurance) 是一种为丧失劳动能力、暂时失去劳动岗位或因健康原因造成损失的人口提供收入或补偿的一种

    生活 2021年10月26日
  • drupal漏洞分析(drupal代码分析)

    技术如何进行Drupal核心远程代码执行漏洞的分析今天就跟大家聊聊有关如何进行Drupal核心远程代码执行漏洞的分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

    攻略 2021年12月20日
  • 解魔方的方法的步骤,魔方最简单的恢复方法谢谢

    技术解魔方的方法的步骤,魔方最简单的恢复方法谢谢在这里向大家介绍一种比较简单的魔方六面还原方法解魔方的方法的步骤。这种方法熟练之后可以在大约30秒之内将魔方的六面还原。 在介绍还原法之前,首先说明一下魔方移动的记法。魔方

    生活 2021年10月28日
  • CSS中上下margin的传递和折叠

    技术CSS中上下margin的传递和折叠 CSS中上下margin的传递和折叠CSS中上下margin的传递和折叠
    1.上下margin传递
    1.1.margin-top传递为什么会产生上边距传递
    块级

    礼包 2021年12月23日
  • 关于安全的手抄报,四年级关于安全手抄报的内容

    技术关于安全的手抄报,四年级关于安全手抄报的内容安全”这根弦时刻都不能放松。每个人都渴望有一个幸福、温馨的家庭,每个人都希望有一个健康的身体,每个人都希望快乐地生活,然而,各种安全事故却时有发生,给许多人带来了极大的痛苦

    生活 2021年10月25日
  • Java学习笔记12——数据类型思考题

    技术Java学习笔记12——数据类型思考题 Java学习笔记12——数据类型思考题思考题1:
    请问以下代码有没有问题
    double b=12.34;
    float f=d;
    第二行代码错误。double转

    礼包 2021年11月30日