[ 跨端技术概述 | 青训营笔记]

88 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天

一、本堂课重点内容:

  • 跨端是什么
  • 跨端技术方案介绍
  • 基于小程序跨端实践

二、详细知识点介绍:

1. 跨端是什么

  • 跨端的背景

随着技术和业务发展,出现越来越多的端,如PC端、移动端、web端、IoT设备等。

  • 常见痛点:

各端功能一致但需要独立配置研发人员;

开发、维护成本高;

安卓、IOS发版周期长

2. 跨端技术方案介绍

  • 跨端技术方案目标

研发效率高:学习成本低、多端一致性高

用户体验好:稳定性高、性能体验好

动态化:支持动态化下发,满足日益增长的业务需求

  • hybrid方案

基于WebView渲染,通过JS Bridge把一部分系统能力开放给JS调用。

视图层:webview

逻辑层:webview JS thread

优点:1.开发成本低 2.CSS全集 3.一致性好

缺点:性能中等

  • 原生渲染方案

使用JS开发,通过中间层桥接后使用原生组件来渲染UI界面。

React Native:一个由Facebook发布的一款开源JavaScript框架,它可以让开发者使用JavaScript和React来开发跨平台的移动应用。其中有一个由C++写成的框架,叫JSI,可以直接操纵C++对象,是一个性能优化的产物。在JS中实现的内容,通过JSI,调用Turbo Modules,再调用Naticve(s)系统实现。

了解React Native:reactnative.dev/

与hybrid方案不同之处在于不是基于WebView渲染,而是基于OEM widgets。

视图层:原生组件

逻辑层:JS Engine

优点:原生组件渲染效率高于WebView,性能好

缺点:1.原生组件比起CSS子集等,能力受限许多,有的样式无法实现。2.一致性一般

  • 自渲染方案

利用Skia重新实现渲染管线,不依赖原生组件。

Flutter是Google在2018年世界移动大会公布的开源应用开发框架,仅通过一套代码库,就能构建精美的、原生平台编译的多平台应用。

了解Flutter:flutter.dev/

使用dart语言进行开发,使用Widgets,rendering等概念,且使用Platform channels进行通信。

不再依赖系统,自己进行配置,所以对平台依赖低。

视图层:Skia

逻辑层:Dart VM

优点:1.性能最好 2.一致性好

缺点:1.CSS子集 2.Dart生态一般 3.开发成本高

  • 小程序方案

使用小程序DSL + JS开发,通过中间层桥接后调用原生能力,使用webview来渲染UI界面。

视图层:webview + 原生组件

逻辑层:JS Engine

优点;1.开发成本低 2.CSS全集 3.一致性好

缺点:性能相对较好

3. 基于小程序跨端实践

  • 快速开发一个小程序

1.下载小程序开发者工具:developer.open-douyin.com/docs/resour…

2.小程序开发、调试:developer.open-douyin.com/docs/resour…

3.上传小程序

  • 小程序性能优化

意义:

1.留住用户

2.提升转化率

3.提升用户体验

性能指标:

Loading -- FP(First Page)-- LCP(Large Content Page)

小程序加载耗时、取消率、重启率、卡死次数占比、LCP到达率、白屏率、JS影响用户率。

优化手段:

启动性能体验:

减少包体积:合理使用分包、移除无用文件、控制包内静态资源

减少同步逻辑:优先使用异步API、避免启动时运行过多同步代码

更早地显示首屏数据:尽早调用关键API和请求、接入数据预取、避免非必要的reLaunch

合理缓存数据:网络数据缓存、API数据缓存

图片优化:选择合适的图片格式、进行合理的压缩、用CDN并开启缓存

更多优化手段:框架骨架屏、占位组件

运行时性能体验:

合理使用setData:减少发送频率、动画不使用setData

合理使用自定义组件:合理的拆分组件数量、只注册当前使用的组件、同步修改初始data

合理监听处理事件:合理监听处理scroll事件、去掉不必要的事件绑定

内存优化:及时解绑事件监听、及时清理定时器

导航栏适配:适当开启自定义导航栏、关键信息避开状态栏和胶囊按钮

X分屏适配:通过onResize监听显示区域变化、不使用JS设置ScrollView高度

三、课后个人总结:

通过本节课程,我了解到了跨端的背景和意义,以及四种不同的跨端技术方案,并且还了解到了小程序跨端方案的开发方式以及性能优化方法等。