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

92 阅读4分钟

这是我参加青训营的第九天

分享要点: 本节课程内容会分为以下4个方面:

1.跨端是什么,给大家介绍跨端产生的背景及解决的问题

使得一套代码可以适配目前越来越多的业务场景,比如:PC(window、mac),移动端(安卓、IOS),web,IOT设备(车载设备、手表),要实现的目标是:

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

用户体验好——稳定性好,性能体验好

动态化——支持动态下发,满足日益增长的业务需求 2.跨端技术方案介绍,给大家介绍目前主流的跨端技术方案(hybrid 方案/原生渲染方案/自渲染方案/小程序方案)以及对比

Hybrid 基于 webview 渲染界面,通过 JS bridge 把一部分功能系统开放给 JS 调用:

打开一个web界面,输入 url 地址然后展示我们的画面 JS bridge 是一个跨平台的实现,可以调用一些系统的功能,比如:相册,蓝牙等

原生渲染 通过 js 开发,通过中间层桥接之后使用原生组件来渲染我们的 UI,最著名: React Native

调用系统功能和 Hybrid 类似,渲染界面使用原生组件渲染效率高,用户体验好 缺点是只能用系统原生的能力,所以和 web 端相比能力有限

自渲染方案 利用 skia 重新实现渲染管线,不依赖原生组件,因为安卓 ios 底层也使用类似的引擎来进行渲染,所以我也使用它来进行渲染,最著名的是:Flutter

使用 Dart 语言开发,页面渲染不依赖平台 系统能力依赖于平台提供 3.基于小程序跨端实践,带大家了解如何开发一个小程序以及优化小程序 小程序方案 使用 DSL + JS 来开发,通过中间层桥接后调用原生能力,使用 webview 来渲染UI,它能写的代码也是有限的

分为两个线程:渲染线程使用 webview, 因为面向前端开发者,逻辑线程调用 JSC/安卓v8 这样一个单独运行 js 的环境 上述两个部分和我们的原生平台进行对接,然后原生平台调用接口给予能力返回调用结果, 在 Web 开发中,每个页面中 JS 线程与渲染线程是互斥的;而在小程序中,JS 线程与渲染线程(视图层)是独立的,视图的渲染更新,并不会阻塞 JS 的执行,同时 JS 的逻辑执行,也不会阻塞视图的渲染更新。JS 驱动视图的更新是异步的,并且 JS 无法直接访问视图的 DOM。逻辑层可以通过 api 调用客户端的原生能力,通过 setData 修改视图层的数据,视图层可以通过触发事件调用逻辑层的方法。

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

小程序的运行原理

重点:小程序的逻辑层和渲染层是分开的,是双线程的运行模式

渲染层,又叫视图层主要负责小程序的UI渲染,也就是展示给用户的部分,界面渲染相关的任务全都在 WebView 里执行,如果一个小程序存在多个界面,就存在多个 WebView 线程。因为小程序的视图和逻辑是分离的,所以不能在小程序 js 逻辑里操作 DOM 等元素,所以例如 Jquery 之类的框架不能在小程序里使用

逻辑层,主要负责逻辑处理、数据请求、接口调用等内容,它采用 JsCore 线程运行相关的 js,因为 JsCore 不是node 环境,所以部分的包在小程序里不能运行

系统层是负责和两个线程通信,并且和原生平台对接的,它可以调用一些平台提供给用户的能力,也可以帮助用户完成一些需要操作系统完成的内容,比如调用相机等等