Vue源码

本文深入探讨Vue的模板引擎mustache,解析其底层核心机理,包括正则表达式实现简单模板引擎、Scanner的使用、tokens转化及数据解析。此外,文章还介绍了虚拟DOM的概念,snabbdom的h函数工作原理,以及关键的diff算法,包括不同情况下的节点比较和操作策略。
摘要由CSDN通过智能技术生成

Vue源码

一、模板引擎 mustache

1. 模板引擎的含义

a. 将数据变为视图的最优雅的解决方案
b. 以往数据渲染方法
纯DOM法
数组的join方法
ES6中的反引号法

2. mustache的基本使用

Mustache.render(模板字符串,数据)

{{ #循环的开始数组 }}  {{ .表示简单数据 }}/{{ 每个数据的属性 }}  {{ /循环结束}}
{{#数据也可以是布尔值表示标签显不显示}} {{ /数据 }}

3.mustache的底层核心机理

1. 使用正则表达式实现简单的模板引擎
const data={
	thing:"苹果",
	mood:"很好吃"
}
const templateStr="<h1>我买了一个{{ thing }},味道{{ mood }}"
function render(templateStr,data){
    return templateStr.replace(/\{\{(\w+)\}\}/g,function(a,$1){
    return data[$1]
	})
}
const result=render(templateStr,data)
2. 找到双大括号—类Scanner
3. 将模板字符串转化成tokens

折叠tokends,使用栈

收集器可以是结果数组,也可以是某一个token,利用引用的特性

4. 将tokens结合数据,解析为dom字符串

二、虚拟DOM和diff算法

1. snabbdom简介

虚拟DOM

​ 用JavaScript对象描述DOM的层次结构。DOM中的一切属性都在DOM中有对应的属性

新的虚拟DOM和老虚拟DOM进行diff(精细化比较),算出应该如何最小量更新,最后反映到真正的DOM上

2. snabbdom的h函数如何工作

​ a. 用来产生虚拟节点

​ b. h函数可以嵌套

​ c.手写h函数

3. diff算法原理

​ a. 不写key,会在最后插入节点,然后挨个替换

​ b. 使用key,会根据key进行比较,不会挨个替换

​ c. key是唯一标识

​ d. 只有是同一个虚拟节点,才会进行精细比较,否则会暴力删除(选择器相同并且key相同)

​ e. 只进行同层比较,不进行跨层比较,会暴力删除

4. 手写diff算法

​ 四种命中查找:

​ ① 新前与旧前

​ ②新后与旧后

​ ③新后与旧前 (移动到旧后的后面)

​ ④新前与旧后 (移动到旧前的前面)

命中一种就不在命中判断了,指针会移动

如果都没有命中就需要循环中寻找

循环条件是新前小于等于新后并且旧前小于等于旧后

增加:如果旧的节点先循环完毕,说明新节点中有要插入的节点

删除:如果新节点循环完毕,老节点还有剩余节点,说明他们是要删除的节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值