Vue框架设计(一):命令式or声明式

简介: Vue框架设计(一):命令式or声明式

前言

从范式角度来看,视图层框架通常分为命令式和声明式。作为框架设计者,应该对两种范式都有足够的认知,才能做出正确的选择,甚至想办法汲取两者的优点并将其捏合。

那么Vue3框架应该设计成命令式还是声明式?这两种范式有何优缺点?我们能否汲取两者的优点?

概念

命令式

早年间流行的jQuery是典型的命令式框架。命令式框架的一大特点是关注过程

举个例子,我们要做到下面的步骤:

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

那么,如果是用jQuery这种命令式框架实现,那么代码就是:

$('#app')
.text('hello world')
.on('click', ()=>{
    alert('ok')
})
复制代码

可见,每一行代码跟我们的需求描述是一一对应的,自然语言描述能够与代码产生一一对应的关系,代码本身描述的是“做事的过程”,这符合我们的逻辑直觉。

声明式

声明式框架更加关注结果。 上面的例子,我们改用vue:

<div @click="()=>aalert('ok')>hello world</div>
复制代码

框架提供的是一个“结果”,上面就像是告诉vue:“嘿,我要一个div,文本内容是hello world,它有个事件绑定,你搞定它。”,至于实现该“结果”的过程,则是由vue完成的,换句话说,就是vue帮我们封装了过程。

因此,Vuejs的内部实现一定是命令式的,而暴露给用户的却更加声明式。

性能与可维护性的权衡

命令式和声明式各有优缺点,在框架设计方面,则体现在性能与可维护性之间的权衡。

先抛出结论:声明式代码的性能不优于命令式代码的性能

拿上面的例子来说,我们现在需要修改div的文本内容,那么对于命令式代码来说,实现如下:

div.textConent='hello vue'
复制代码

因为我们明确知道哪些发生了变更,只做必要的修改就行。

但如果换做声明式,因为它描述的是结果,就不一定能做到这一点。对于框架来说,为了实现最优的更新性能,它需要找到前后的差异并只更新变化的地方,但是最终完成这次更新的代码依然是:

div.textConent='hello vue'
复制代码

所以对于声明式来说,会多了一个步骤:查找前后差异并找出需要更新变化的地方。换句话说,声明式代码比命令式代码多出查找差异的性能消耗,最理想的情况是,当找出差异的性能消耗为0时,声明式与命令式代码的的性能相同,但是无法做到超越。

那么为什么要选择声明式的设计方案?

原因在于声明式代码的可维护性更强。

从上面的例子来说,采用命令式代码开发,需要维护实现目标的整个过程,包括要手动完成DOM元素的创建、更新、删除等工作。而声明式代码展示的就是我们要的结果,看上去更直观,关于做事的过程,我们不需要care。

这就体现了架构设计上可维护性与性能之间的权衡。在采用声明式提升可维护性的同时,性能就会有一定的损失,而架构设计者要做的就是:在保持可维护性的同时让性能损失最小化

总结

命令式关注过程,声明式关注结果。

声明式代码可维护性更高,但相对于命令式会有性能损耗,所以架构设计时保证可维护性同时最小化性能损失,也就是最小化找出差异的性能损耗。



相关文章
|
7天前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
51 1
|
17天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
2月前
|
缓存 监控 JavaScript
Vue.js 框架下的性能优化策略与实践
Vue.js 框架下的性能优化策略与实践
|
2月前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
JavaScript 前端开发 开发者
Vue是如何劫持响应式对象的
Vue是如何劫持响应式对象的
35 1
|
2月前
|
JavaScript 前端开发 API
介绍一下Vue中的响应式原理
介绍一下Vue中的响应式原理
36 1
|
2月前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能
|
Web App开发 JavaScript 前端开发
Vue框架快速入门
Vue是现在最流行的前端框架之一,而且相对于其他两个框架React和Angular来说也更加易学,而且它的作者是国人,中文文档也很完善。当然Vue框架算是比较高级的框架,所以在使用过程中还需要JavaScript、JavaScript 2015、WebPack、NodeJS、npm、ESLint、JavaScript单元测试框架等其他知识和框架的使用方法。
1348 0
|
2月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
48 1
vue学习第一章

热门文章

最新文章