1权衡的艺术
1.jq命令式,vue声明式
虚拟dom和真实dom页面性能与页面大小、变更部分的大小都有关系,除此之外,与创建页面还是更新页面也有关系,选择哪种更新策略,需要我们结合心智负担、可维护性等因素综合考虑。虚拟 DOM 更优。虚拟dom就是JavaScript对象,优点:跨端
2.渲染器和编译器
渲染器的作用是,把虚拟 DOM 对象渲染为真实 DOM 元素。它的工作原理是,递归地遍历虚拟 DOM 对象,并调用原生 DOM API 来完成真实 DOM 的创建。渲染器的精髓在于后续的更新,它会通过 Diff 算法找出变更点,并且只会更新需要更新的内容,Vue.js 的模板会被一个叫作编译器的程序编译为渲染函数,最后,编译器、渲染器都是 Vue.js 的核心组成部分,它们共同构成一个有机的整体,不同模块之间互相配合,进一步提升框架性能。
2响应系统
3.副作用函数与effect
effect函数:响应地跟踪它的依赖关系,并在依赖关系发生变化时重新运行它
https://juejin.cn/post/7090805099118723108 计算属性( effect响应式文章)
副作用函数指的是会产生副作用的函数,effect 函数的执行会直接或间接影响其他函数的执行,这时我们说 effect 函数产生了副作用。副作用很容易产生,例如一个函数修改了全局变量,这其实也是一个副作用,如下面的代码所示:
![](https://img.haomeiwen.com/i15991791/e4a69c2bba960e15.png)
4.响应式
当读取操作发生时,将副作用函数收集到“桶”中
当设置操作发生时,从“桶”中取出副作用函数并执行
如何才能拦截一个对象属性的读取和设置操作。在 ES2015 之前,只能通过 Object.defineProperty 函数实现,这也是 Vue.js 2 所采用的方式。在 ES2015+ 中,我们可以使用代理对象 Proxy 来实现,这也是 Vue.js 3 所采用的方式。
5.响应系统
Vue.js 3 的响应式数据是基于 Proxy 实现的,Proxy 可以为其他对象创建一个代理对象。所谓代理,指的是对一个对象基本语义的代理。它允许我们拦截并重新定义对一个对象的基本操作。在实现代理的过程中,我们遇到了访问器属性的 this 指向问题,这需要使用 Reflect.* 方法并指定正确的 receiver 来解决。
6.原始值的响应式方案
Proxy 的代理目标必须是非原始值,所以引入 ref 的概念,为用户创建一个响应对象,定义set get,及value。
toRef 以及 toRefs 这两个函数。它们本质上是对响应式数据做了一层包装,或者叫作“访问代理”。
3.渲染器
...
网友评论