# vue2-native
**Repository Path**: wqhash/vue2-native
## Basic Information
- **Project Name**: vue2-native
- **Description**: vue2源码系列
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-05-11
- **Last Updated**: 2021-06-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
目录
- [√ mustach模板原理 ](#mustach)
- [√ 虚拟Dom和diff算法](#vm-dom)
###
☞ mustach模板原理
---
- **介绍**
模板引擎是将数据变为视图的一种方式

这么看tokens就是一个 `js的嵌套数组`
- **流程**
本质原理:
1. 就是将 `模板字符串` 转为 `tokens`形式
> 模板字符串转tokens需要用 Scanner扫描器处理,
> 注意的是 {{ text }} 花括号和内容;
>
> 然后通过 nestTokens把扁平化的tokens转成嵌套形式
>
2. 再将`tokens`结合 `数据data` 解析为 `Dom字符串`
> 这里需要主要的是 tokens中类型的处理 `text,name,# `
>
> 处理时提取了一个 `lookup`函数可以看下
>
>

[▲ 回顶部](#top)
###
☞ 虚拟Dom和diff算法
---
> 为什么要虚拟Dom? - [深度剖析:如何实现一个 Virtual DOM 算法](#https://github.com/livoras/blog/issues/13)
>
> Dom是很慢的,可以打印一个 `div` 元素会发现其中包括很多属性;
> 游览器标准就是这么设计的,所以如果需要操作Dom会很慢;
>
> 相对Dom对象,原生js对象处理起来更快,而且简单。Dom树上的结构,
> 信息都可以用js对象表示;
>
> Virtual DOM 本质上就是在 JS 和 DOM 之间做了一个缓存。
> 可以类比 CPU 和硬盘,既然硬盘这么慢,我们就在它们之间加个缓存:
> 既然 DOM 这么慢,我们就在它们 JS 和 DOM 之间加个缓存
> CPU(JS)只操作内存(Virtual DOM)
> 最后的时候再把变更写入硬盘(DOM)。
>
- **介绍**
### 虚拟Dom:
虚拟Dom的本质就是用js对象描述Dom的层次结构, Dom中的一切属性都在虚拟Dom中
有相对应得属性;

### Diff算法:
diff算法是发生虚拟Dom之上的,新旧节点进行diff (精细化比较),
算出如何最小量更新, 最后反映到真正的Dom上
- **流程**