vue.js设计与实现

90 阅读2分钟

权衡的艺术

一个框架的设计会分为很多不同的模块,而这些模块之间并不是相互独立,而应该是相互制约和关联的。 作为学习者,我们学习前首先应该从全局的角度对整个框架有大致的认识。从设计范式角度而言,视图层框架设计应该遵循的有两种,命令式和声明式。接下来会从二者的优缺点、差异等方面分析。

1.命令式

经典jquery就是命令式框架,他们最大的特点就是关注过程,比如以下过程:

    1.获取id为app的标签
    2.他的文本内容设置为 hello world
    3.为其绑定点击事件
    4.点击时弹出提示:ok

翻译成代码如下:

        $('#app')
            .text(hello world)
            .on('click',()=>{ alert('ok') })
2.声明式

声明式只关注结果,同样实现上述功能代码更加简洁:

     <div @click="()=>{ alert('ok') }"></div>

因此可以看出vue的内部实现是命令式,而暴露给用户的却是声明式

性能与维护间的抉择

命令式性能一定是高于声明式的,对于命令式,我们会明确的知道修改的是什么元素或者内容,比如:

div.innerHTML = 'hello'

实际是没有其他语法的性能可以超过这句代码的,可以做到极致的性能优化。但声明式做不到这一点,因为他描述的是结果,对于框架,为了实现性能优化会对比更改前后的差异,然后再完成更新,但最终实现方案依旧是上面的代码,中间增加了差异的性能消耗

为什么性能:声明式 < 命令式,但vue依旧选择声明式的设计方案。原因在于声明式方案的可维护性是远大于命令式的。

虚拟DOM性能

根据上面的内容我们知道,虚拟dom的性能理论上一定是没有真实dom高的,但我们想写出性能极高的命令式代码是十分困难的,并且后期维护难度极大,投入产出比不高。为了解决这个问题,减小编写难度,并且程序性能不会太差,诞生了虚拟dom