# vue3设计与实现读书笔记01
# 1.命令式与声明式
视图层框架,通常分为命令式和声明式两种,它们各有优缺点,首先我们来看一下两者的区别:
# 命令式:
jQuery版本:
$('#app') // 获取 div
.text('hello world') // 设置文本内容
.on('click', () => { alert('ok')}) // 绑定点击事件
JavaScript版本:
const div = document.querySelector('#app');
div.innerText = hello world';
div.addEventListener('click', () => { alert('ok') });
命令式代码描述的是"做事的过程",符合逻辑直觉。
# 声明式:
<div @click="() => alert(''ok)"> hello world </div>
声明式框架关注结果,不关心如何实现,而是直接提供一个结果,让框架实现。
# 2. 性能与可维护性
首先抛出结论:声明式代码的性能不优于命名式代码的性能。继续上面的例子,如果需要将div内容由hello world改为hello vue3。 命令式
div.textContent = 'hello vue3' //直接修改
声明式代码,则需要改结果
// 之前:
<div @click="() => alert(''ok)"> hello world </div>
// 之后:
<div @click="() => alert(''ok)"> hello vue3 </div>
通过代码对比,我们可以看到,命令式代码直接修改指定内容,应该是性能最优的方式。声明式代码,开发者只需要修改声明的结果,具体修改内容的操作(或者说内部指令),是由框架来具体找出差异并执行的。
由于声明式代码,存在一个查找差异并更新的过程,比命令式代码直接更新多了查找对比差异这一步,所以声明式框架的性能是低于命令式代码的。
# 虚拟 DOM
基于前文,我们知道: 声明式代码的更新性能消耗 = 找出差异的性能消耗 + 直接修改的性能消耗。