vue3 框架学习概念笔记_vue3框架,4面字节跳动拿到Offer

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
img

正文

文章目录

前情提要

在这里插入图片描述
之前在没有接触vue3之前,就买了一本书:vue.js设计与实现 --霍春阳(基于vue3)一直没有时间看,最近几天我看完了整本书,获益颇深,使得我对框架的认识和编写项目时的动作更加得心应手,由此我将记录此书中对于各模块的概览内容,目的如下:

  1. 帮助入门vue开发者对框架概念有一个轮廓
  2. 给自己留下记忆碎片,以便将来使用

这篇文章中我将只会记录概念相关,不涉及代码,如果想结合代码学习,我推荐前往阅读 vue.js设计与实现 --霍春阳 这本书,霍前辈在书中的样例思路清晰,代码逻辑严密,阅读此书,会有一次js高级编程的体验;


框架设计概览

命令式

jquery就是典型的命令式框架,通过执行各种链式函数完成动作,其一大特点是关注过程–做事的过程;

声明式

声明式框架会更加关注结果,过程交由框架完成,例如vue.js的内部实现一定是命令式的,而暴露给用户的却更加声明式;

小结

vue是内部封装了命令式代码才完成了面向用户的声明式,所以声明式代码的性能不优于命令式代码的性能,但是却带来了极高的可维护性,而vue框架要做的就是在保持可维护性的同时,使性能损失最小;

虚拟dom性能

操作dom的方式有三种,原生js,虚拟dom,innerHTML, 不可以简单下定论,如结合维护性,心智负担,更新策略来看,虚拟dom是很好的选择;

运行时和编译时

三种框架设计选择

  1. 运行时:不分析内容来源,提供固定功能
  2. 编译时:分析用户提供的内容,做相应处理,有损灵活
  3. 运行时+编译时:vue3使用的架构模式

框架设计核心要素

  1. 友好的警告信息(问题位置)
  2. 控制生产环境体积 (Tree-Shaking)
  3. 良好的兼容性 (对象式API,组合式API),用户可以通过特性开关,从而利用Tree-Shaking 机制排除
  4. 使用TS编写框架和对TS类型支持友好是俩件事,支持ts需要花费额外的精力;

声明式描述UI

直接使用虚拟DOM描述UI,用户不需要关注过程;

渲染器

把虚拟DOM对象渲染为真实DOM对象,实现方式是递归遍历虚拟DOM对象,并调用原生DOM-API 完成真实DOM创建,其精髓在于后续的DIFF算法;

组件的本质

一组虚拟DOM元素的封装,可以是一个返回的虚拟DOM函数,也可以是一个对象,但这个对象下必须要有一个函数用来产出组件要渲染的虚拟DOM

vue.js模板

vue.js模板会被一个叫做编译器的程序编译为渲染函数;编译器和渲染器都是vue.js的核心部分;


响应式系统

概念

在理解响应式实现原理之前,理解副作用函数更重要,副作用函数就是在执行时会影响其他地方的函数执行,vue.js3 采用proxy实现响应式数据,通过拦截数据的get,和set 方法,这个过程需要清晰的思路;

完善的响应式系统

使用WeakMap 配合Map构建了新的桶结构,使响应式数据与副作用函数建立精确的联系;

  1. WeakMap 对象:弱引用,不影响垃圾回收器的工作。当用户代码对一个对象没有引用关系时,WeakMap 不会阻止垃圾回收机制回收该对象。

响应式系统的调度

期望有能力决定副作用函数的执行时机、次数及方式;

计算属性Computed

原理上是一个懒执行的副作用函数,在读取时重新计算其真正的值

watch 原理

利用副作用函数重新执行时的可调度性,当依赖的响应式数据发生变化时,执行effect的调度器函数,即回调;此外,一个立即执行的watch函数通过添加immediate选项来实现,通过flush选项指定回调函数的执行时机,本质上是利用了调用器和异步的微任务队列;

竞态问题

带入场景简单理解就是,watch的回调,存在异步,第二次更新覆盖第一次的回调执行内容;

非原始值的响应式方案

vue.js 3的响应式数据是基于Proxy 实现的,所以有必要理解Proxy及Reflect;

  1. Proxy对象可以创建一个代理对象,从而实现对其他对象的代理,代理指的是对一个对象基本语义的代理,允许我们拦截并重新定义对一个对象的基本操作,其中基本语义可以理解为对一个对象的读取和设置操作;
  2. Reflect对象具有和Proxy同样的方法,其特别之处在于可以接受第三个参数,receiver,即接收者,可以理解为函数调用过程中的this;

响应式的实现不只是简单的拦截get/set内部方法,更有迭代对象的拦截,例如for…in,for…of,set,map,这些具有特征的对象,都需要特别处理;

javaScript 对象

有俩种对象,一种为常规对象,另一种叫异质对象,其区别在于内部的实现方法;

原始值的响应式方案

原始值指的是Boolean、Number、BigInt、String、Symbol、undefined、null等类型,在js中原始值是按值传递的而非引用传递;

ref

ref实质上是一个包裹对象,由于Proxy无法提供对原始值的代理,所以用一层对象包裹,间接实现响应式,这也就是为什么在使用中需要.value;

toRef,toRefs

ref不仅可以用于原始值响应式方案,也能用来解决响应式丢失,这也就是toRef及toRefs出现的理由,toRef是代理一个对象的响应式值,toRefs则是多个,本质上是对响应式数据作的包装,或者叫访问代理,我们知道一般的响应式对象如reactive包裹的对象通过解构后会丢失响应式,那么可以在解构的时候通过toRef函数进行一次代理访问来保持响应式特性。

渲染器

用来执行渲染任务,是渲染真实DOM和跨平台能力的关键,渲染器把虚拟dom渲染为真实dom的过程叫作挂载,通常用英文mount表达。

渲染器与响应式系统

利用响应式系统的能力,可以做到数据编号自动更新页面,渲染器会执行挂载和打补丁操作,对于新内容,会执行挂载,而就内容,会执行打补丁操作,只更新新的node;

自定义渲染器

在浏览器平台,渲染器可以利用DOM API完成DOM操作,为了不直接依赖浏览器,将这些操作封装为可配置的对象,用户可以在调用createRenderer函数创建渲染器的时候自定义配置对象,从而实现自定义的行为;

挂载与更新

在这里我学到了HTML的节点的属性比想象中复杂,其中有俩个重要概念,HTML Attributes 和DOM Properties 并不完全对应,有的属性甚至是只读的,所以vue在属性的挂载上做了足够的工作; vue.js对特殊属性也做了属性增强,例如 class, style ,它们支持 字符,对象,数组 三种数据的格式;

简单Diff 算法

为了减少新旧node节点性能开销,完成更新操作,这个比较的算法就是diff算法,渲染器的核心就是diff算法,试图最大程度的复用DOM元素;简单diff算法的核心逻辑是,拿新的一组子节点中的节点去旧的一组子节点中寻找可复用节点。这个过程中key的作用就像是身份证号,在更新时通过key找到可复用的节点,避免过多的对DOM元素进行销毁和重建。

双端Diff 算法

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

行销毁和重建。

双端Diff 算法

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
[外链图片转存中…(img-pLfvnhw0-1713329897656)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值