字节青训前端笔记 | 跨端技术概述

news2024/12/23 23:47:11

本节课程内容会分为以下几个方面:

  1. 跨端是什么,给大家介绍跨端产生的背景及解决的问题
  2. 跨端技术方案介绍,给大家介绍目前主流的跨端技术方案(hybrid 方案/原生渲染方案/自渲染方案/小程序方案)以及对比
  3. 基于小程序跨端实践,带大家了解如何开发一个小程序以及优化小程序
  4. 总结与展望

跨端技术

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

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

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

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

常见方案

  1. Hybrid

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

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

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

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

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

  • 使用 Dart 语言开发,页面渲染不依赖平台
  • 系统能力依赖于平台提供
  1. 小程序方案

使用 DSL + JS 来开发,通过中间层桥接后调用原生能力,使用 webview 来渲染UI,它能写的代码也是有限的

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

他们的对比如下:

请添加图片描述

字节小程序

要开发字节小程序需要先下载字节小程序的开发工具,可以点这个链接了解:

小程序开发文档:https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/guide/introduction/

小程序开发者工具:https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/developer-instrument/download/developer-instrument-update-and-download

PS以下来自作者:有一说一直播网炸了所以没讲太多,想要了解的可以自己去看,目前主流的还是对手公司的微信小程序,字节小程序用的属实不多哦,需要用的也可以用 uniapp(vue 友好) 直接转基本上现在所有平台的小程序和快应用

这里补充一份小程序的原理(来自字节秋招二面真实面试题):

小程序的运行原理是什么?

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

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

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

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

请添加图片描述

视图层和逻辑层通过系统的 JSBridage 进行通信,逻辑层把数据变化通知到视图层,触发视图层页面更新,视图层把触发的事件通知到逻辑层进行业务处理。具体流程就是:

  1. 首先在渲染层,我们使用 js 对象来模拟一个 DOM 树,再通过这个 DOM 树来生成我们的界面(也就是虚拟 dom ,vue和react也是这个原理)
  2. 在逻辑层用户维护一组数据,这些数据可以绑定到我们的界面上,渲染层通过计算生成对应的 UI
  3. 当我们的数据发生变化的时候,我们把数据从逻辑层传到系统,系统再派发给我们的渲染层
  4. 渲染层对比前后数据生成的界面,将差异作用到我们的 DOM 树上,从而更新界面

使用双线程模型的原因:

  1. 这样的模型更加安全,因为开发者基于这个模型不能进行操作 DOM 调用 window 等操作,可以更好的管控和限制一些可能影响用户安全的操作等
  2. 这样的架构可以使得我们调用各种操作系统的 JS 引擎,只提供 JavaScript 的解释执行环境,没有任何浏览器相关接口

性能优化

优化的意义:

  1. 留住用户
  2. 提升转化率
  3. 提升用户体验

小程序的加载:

loading 界面(加载底层的框架)> FP白屏幕(加载你的页面)> 出现UI但是不能操作 > LCP用户可以操作,我们的目标就是 LCP 尽量提前。

小程序提供了很多指标,加载耗时,白屏占比,重启率,卡死率等等可以查看,针对优化,以下是一些常见的方案:

请添加图片描述

除此之外还可以使用 性能分析工具和性能评分工具 来进行分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/193607.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

苹果或将打造 “空气键盘”

苹果MR头显玩法大揭秘前言苹果MR头显要来了打造 “空气键盘”眼动追踪与手部追踪一键切换VR/AR模式前言 随着2021年10月FaceBook正式改名Meta后,标志着元宇宙元年的正式到来,元宇宙行业开始出现井喷式的爆发。再到2022年10月,“飞天云动”在…

欧科云链链上卫士:2023年1月安全事件盘点

一、基本信息 2023年1月安全事件共造成约1438万美元损失,相比上个月的安全事件损失金额大幅度下降。其中多链项目LendHub 被攻击,损失高达600万美元,为本月资金损失最大的安全事件。本月RugPull数量基本与上月持平。社媒诈骗等事件依然频发&a…

分布式微服务3

目录 Feign远程调用 基于Feign远程调用 Feign替代RestTemplate 1.引入依赖 2.添加注释 3.编写Feign的客户端 4.测试 5.总结 自定义配置 1.引入依赖 2.配置连接池 3.总结 Gateway网关 Gateway快速入门 1.创建gateway服务,引入依赖 2.编写启动类 3.编写…

【微服务】Nacos集群搭建

Nacos集群搭建1.集群结构图2.搭建集群2.1.初始化数据库2.2.下载nacos2.3.配置Nacos2.4.启动2.5.nginx反向代理2.6.优化1.集群结构图 官方给出的Nacos集群图: 其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。 我们…

实战:进入Linux系统 紧急模式,重置root密码

实战:进入CentOS 7紧急模式,重置root密码 实战场景:公司的一台CentOS 7系统忘记root密码了,需要快速把root密码修改为 qwer,找回root身份。 (1)重启系统,在出现内核选择界面时(在此界面中,如果不按键盘的上下方向键,则在默认时间过去后,自动选择光标所选的内核并…

题库——“计算机基础”

小雅兰为开学考试而奋斗 模块一 计算机基础概述 (1)信息技术基本知识 (2)计算机的发展与应用 (3)计算机的工作原理 (4)计算机系统的组成 (5)微型计算机主要硬…

九龙证券|AIGC彻底火了,概念股全线上涨,走势领先者三连板!

一夜之间,AIGC走红A股,谁会成为商场宠儿? A股历来盛行炒作新体裁,尤其是新体裁诞生的初期,资金参与热心高涨,诞生牛股概率更高。诞生不足两月的ChatGPT便是今年以来最抢手体裁之一,由ChatGPT带动…

Bug:浏览器一直访问旧资源

Bug:浏览器一直访问旧资源 1 问题阐述 今天在查看自己部署的项目时候,发现浏览器总是访问旧的资源 2 排查思路 2.1 浏览器缓存问题 清除浏览器缓存 ctrl shift del2.2 tomcat问题 我的项目是部署在tomcat上的,因此我怀疑是tomcat的配置问…

C语言学习-ProtoThread

一、简介随着RTOS的应用,程序在开发的时候,程序逻辑也变得越来越清晰。但是RTOS因为体量比较大,在一些内存比较小的MCU中无法应用。所以,在裸机的开发中,通常是使用一个while(1)来作为整个程序的大循环。当有条件需要执…

Vue路由传递query参数的两种方式

路由是可以传递参数的,一般使用query进行传参,有两种方式,接下来一一展示 案例展示 先编写一个简单的案例 我这里用的一个三级路由 这里使用三级路由以及展示路由视图 这样点击就跳转对应的路径了,接下来进行路由跳转的时候传参…

python之selenium入门教程

selenium,一个第三方库,可以通过给driver发送命令来操作浏览器,以达到模拟人操作浏览器,实现网页自动化、测试等,减少了重复性工作。 selenium的工作的基本架构如下: 安装 本文是在python环境下使用sele…

聚观早报 | 保时捷回应12.4万帕纳梅拉遭抢购;英特尔大规模降薪

今日要闻:保时捷回应12.4万帕纳梅拉遭抢购;特斯拉大力生产4680电池和Semi电动重卡;Spotify 月活用户预计下季度将达5亿里程碑;PayPal将裁员约2000人约占员工总数7%;英特尔大规模降薪 CEO基本薪酬削减25%保时捷回应12.4…

MATLAB应用3——深度视觉 奥比中光Astra S显示RGB和深度信息

首先从官网下载OpenNI驱动并安装,以及添加环境变量。MATLAB代码:% 参考:https://blog.csdn.net/limingmin2020/article/details/109445787%% 首次使用需编译mxNI.cpp文件,生成mxNI.mexw64mex mxNI.cpp -IF:\VS2017\VC\Astra_S\Ope…

Linux 内核代码审查人员短缺问题解决方法

导读操作系统安全是现在最重要的事情,而 Linux 则是一个主要被讨论的部分。首先要解决的问题之一就是:我们如何确定提交到上游的补丁已经进行了代码审核? Wolfram Sang 从 2008 年开始成为一名 Linux 内核开发者,他经常在各地召开…

Java三大特性之二——继承(工作、面试、学习必备技能)

目录 继承的概述 继承的特点 继承中的成员变量 继承中的成员方法 方法的重写 继承中的构造方法 super关键字 super和this的区别 继承的概述 多个类中存在相同属性(成员变量)和行为(方法)时,将这些内容抽取到单独一…

【自学Python】Python字符串以某个字符开始或结尾

大纲 Python字符串开头 Python字符串开头教程 在开发过程中,很多时候我们需要判断一个 字符串 是否以某个字符或者是否以某个字符串开始的需求,在 Python 中,判断某个字符串是否以某个字符或者是否以某个字符串开头的函数为 startswith() 。…

TFAPI使用2.0建议

2.5 TFAPI使用2.0建议 学习目标 目标 无应用 无 2.5.2 TF2.0最新架构图 饱受诟病TF1.0的API混乱 删除 queue runner 以支持 tf.data。删除图形集合。API 符号的移动和重命名。tf.contrib 将从核心 TensorFlow 存储库和构建过程中移除 TensorFlow 2.0 将专注于 简单性 和 易用…

【Unity VR开发】结合VRTK4.0:忽略某一层级

介绍: 由前面学习可知: 对象指针将与任何包含碰撞体(甚至是触发器碰撞体)的游戏对象发生冲突,但有时我们希望对象指针完全忽略游戏对象,就好像它不在场景中一样。 例如,如果我们手里拿着一个…

静图怎么做成gif动画图片?三步教你在线生成gif图片

说到gif动图相信大家都不陌生。那么,作为一名软件小白想要自己动手制作专属的gif动态图,要如何操作呢?接下来,给大家推荐一款专业在线gif制作(https://www.gif.cn/)工具-【GIF中文网】,通过两个…

力扣sql简单篇练习(七)

力扣sql简单篇练习(七) 1 销售分析 III 1.1 题目内容 1.1.1 基本题目信息1 1.1.2 基本题目信息2 1.1.3 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 # 所查字段来自同一张表可优先考虑子查询,但需要考虑原表有,关联表没有的这种情况 SELECT p.product_id,p.produ…