智子: Vue Vapor年底发布alpha版本,如果有资金支持

news/2025/3/14 6:43:40/文章来源:https://www.cnblogs.com/heavenYJJ/p/18511911

前言

在最近的Vue Fes大会上,Vue Vapor的作者智子大佬宣布,如果能够得到资金支持,那么Vue Vapor年底就能发布alpha版本了。

关注公众号:【前端欧阳】,给自己一个进阶vue的机会

智子也需要赚钱养活自己

根据尤大透露,过去一年以来智子接受赞助全职在为Vue Vapor工作。现在智子虽然还有赞助,但不再是全职的了。
t3

也就是说现在智子大佬也需要想办法赚钱养活自己了,所以上周智子发了一个寻找赞助商的帖子。
t1

智子的目标也很简单,能够养活他就行了。并且表示为赞助商服务,开始虽然是封闭开发,最终还是会开源的。
t2

如果不寻求赞助,为了能够养活自己智子就只能去找一份工作了。如果这样Vapor的开发进度可能就会延缓,所以目前来说赞助计划是目前最好的方式了。
t5

目前智子收到的赞助总额不到1000美元(包括尤大的)。

强如智子大佬,做开源也很难养活自己。欧阳也只能略尽绵薄之力(因为我最近也被通知12月底走人了,我们团队将会只剩下leader了)
sponsor

现在的Vue Vapor

现在的Vue Vapor主要有三个特点:没有虚拟DOM、高性能、更小的包体积。

没有虚拟DOM:意思很简单,就是在Vue Vapor中已经将虚拟DOM给干掉了。

高性能:因为干掉了虚拟DOM,瓶颈得以突破,所以性能相对提高了很多。
performance

更小的包体积:包体积大小减少了53.3%。

并且Vue Vapor是目前大家所使用的Vue版本的子集
subset

相比目前的Vue功能要少点,支持Composition API以及<script setup>

因为Vapor是目前Vue版本的子集,所以无虚拟DOM的Vapor模式和有虚拟DOM的vDom模式之间是互相兼容的。
fusion

在Vapor组件中支持使用vDom模式的组件。同样在vDom组件中也支持使用Vapor模式的组件。并且还支持只使用Vapor模式的情况。

并且Vue生态中的VueUseVue RouterPiniaNuxt组件库等都会支持Vapor。
compatibility

同样也支持jsx,不过需要引入unplugin-vue-jsx-vapor

Vapor的机制

先看一个普通的操作DOM的例子:

// Initialize
const container = document.createElement('div')
const label = document.createElement('h1')
const button = document.createElement('button')
button.textContent = 'Increase'button.addEventListener('click', increase)
let count = 0
const render = () => {label.textContent = `Count: ${count}`
}
function increase() {count++render() // Re-render
}
render() // Initial renderdocument.body.append(container)
container.append(label, button)

在这个例子中主要有两个元素:h1标签和button按钮。

h1标签中渲染了count变量的值。

点击button按钮触发click事件执行increase函数,在函数中首先会执行count++,然后再去执行render函数。

render函数中将h1标签中的值更新为最新值。

上面这个方案有个弊端,每次在click事件的回调中除了常规的执行count++之外,还去手动调用了render函数。

设想一下,如果我们的业务代码里面也这样写,那代码中将会到处都在调用render函数了,这样的代码光想想都头疼。

还好Vue的设计中有个优秀的响应式机制,并且还将响应式的功能抽取成一个单独的包:@vue/reactivity

而Vue Vapor就是基于@vue/reactivity进行开发的,藉此实现当响应式数据改变后会自动更新DOM,无需去手动执行render函数。

使用@vue/reactivity改造后的代码如下:

import { effect, ref } from '@vue/reactivity'// Initialize
const container = document.createElement('div')
const label = document.createElement('h1')
const button = document.createElement('button')
button.textContent = 'Increase'button.addEventListener('click', increase)
const count = ref(0)
effect(() => {label.textContent = `Count: ${count.value}`
})
function increase() {count.value++
}document.body.append(container)
container.append(label, button)

改造后的代码和原来的代码主要有三个不同:

  • 之前是直接使用let count = 0定义的变量,而改造后使用const count = ref(0)定义的响应式变量。

  • 之前的increase函数中除了执行count++之外,还需要去手动调用render()函数。而在新的代码中只会执行count.value++

  • 移除了render函数,替代他的是effect函数。在effect的回调函数中同样是进行DOM操作更新h1标签中的值。

    effect函数和watchEffect很相似,当回调中的响应式变量改变后就会重新执行回调函数。这里就是当响应式变量count改变后会重新执行回调函数,在回调函数中进行DOM操作更新h1标签中的值。

这也就是Vapor基于@vue/reactivity实现的响应式原理,在这个过程中完全没有虚拟DOM的介入。当响应式变量改变后会执行对应的effect回调函数,在回调函数中直接去更新DOM即可。

看到这里有的小伙伴会有疑问,这个effect函数以及里面操作DOM的代码需要我们自己手写吗?

当然不需要手动去写!!在编译时Vapor会自动生成一个effect回调函数,以及回调函数里面更新DOM的代码。

这个是上面的例子在Vue Vapor SFC Playground上面经过编译后的js代码,如下图:
playground

从上图中可以看到Vapor模式下经过编译后会自动生成一个effect回调函数,并且在回调函数中会去直接操作DOM。

至于编译时是如何生成effect回调函数,需要等Vapor稳定后欧阳会继续写文章讲解。

总结

无虚拟DOM的Vapor模式是有虚拟DOM的vDom模式的子集,并且他们之间支持component组件混用。抛弃了虚拟DOM,Vapor轻装上阵后,性能以及包体积相比传统的vDom模式有了很大的提升。最后就是智子现在在寻求赞助商,让他能够全职开发Vue Vapor的同时能够养活自己。

关注公众号:【前端欧阳】,给自己一个进阶vue的机会

另外欧阳写了一本开源电子书vue3编译原理揭秘,看完这本书可以让你对vue编译的认知有质的提升。这本书初、中级前端能看懂,完全免费,只求一个star。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/823549.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

帝国cms调用当前顶级栏目下所有下级子栏目并且当前高亮显示啊

[e:loop={"select classname,classpath,classid from phome_enewsclass where bclassid=".$class_r[$GLOBALS[navclassid]][bclassid]." order by myorder,classid desc ",0,24,0}] <?php $classurl=sys_ReturnBqClassname($bqr,9);?> <a href=…

帝国cms一句MySQL语句实现多表数据之和

SQL语句:SELECT COUNT(AA.id) AS total FROM (SELECT id FROM www_moban5_cn_ecms_newsUNION ALLSELECT id FROM www_moban5_cn_ecms_xiazaiUNION ALLSELECT id FROM www_moban5_cn_ecms_photoUNION ALLSELECT id FROM www_moban5_cn_ecms_download ) AA;在帝国CMS后台使用:SEL…

无缝对接,高效协同:能源电力行业的文件摆渡方案新鲜出炉!

在能源电力行业,涉及大量敏感信息和重要数据需要得到严格保护,比如电力生产与供应链数据、电网运行与维护数据、用户信息与用电数据、研发与创新数据等。随着企业的不断发展,企业数字化转型的逐渐深入,需要重点关注数据安全。因此大部分能源电力企业会将网络划分成内网和外…

PbootCMS 织梦后台左侧菜单空白不显示的解决办法

权限问题:检查 data 文件夹及其子文件夹是否有写入权限,确保在Linux和Windows系统中都正确设置了权限。 对于Linux系统,可以通过命令行使用 chmod -R 777 data 命令赋予写入权限;对于Windows系统,则需要通过文件属性手动设置。缺少必要的文件夹:如果 /data/cache/, /data…

怎么修改网站后台标题?怎样修改企业网站密码?

修改网站后台标题登录后台管理:首先,你需要登录到你的网站后台管理系统。找到设置选项:通常在后台管理界面的顶部或侧边栏会有“设置”、“系统设置”或“站点设置”等选项。编辑标题:在设置页面中,找到“网站标题”、“站点名称”或类似的字段,输入你想要的新标题。保存…

dedeCMS 织梦模板批量替换代码后页面变成空白和标签的解决办法

原因:批量替换模板代码时使用目录查找方式引起。 解决方法:打开出现问题的模板文件,在任意位置敲入一个空格,保存文件,重新生成即可。 若多个模板文件受影响,需逐一操作。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML…

徐欢的第二次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc这个作业的目标 实现一个命令行文本计数统计程序。能正确统计导入的纯英文txt文本中的字符数,单词数,句子数。姓名-学号 徐欢-2022329301135作业码云地址:https://gitee.com/xuhuanspace/second-assignment 一…

【算法学习】莫队

暴力骗分神器,神仙题的最终杀招!!大佬的博客 开幕雷击!我既然都贴上了大佬的博客,那还要我有什么用,但是我要是不记录的话早晚会忘,那既然是给自己看的话就象征性地写一下吧,等以后熟练了也不需要这博客了。 莫队虽然用到了分块,但是并不对分块进行操作,而是对分块的…

SQLServer性能优化(一)

(一)、查询步骤逻辑查询树 绑定(把逻辑树上的节点与数据库的实际对象进行绑定):索引,约束,看看都存不存在 绑定器进行优化阶段的输入:绑定树,尽可能寻找最优方案。优化方案太多了,inner join只有一种方案,三表关联有六种方案。有限的时间有限的资源它不一定会选择最…

【Java】若以框架(ruoyi-master)——11.新建业务模块

二次开发 修改项目名称 二次开发的第一步,当然是将项目名称、图标、项目目录等更改为自己的项目了。若依框架修改器,可以一键修改Ruoyi框架包名、项目名等的工具。 地址:https://gitee.com/lpf_project/RuoYi-MT/releases完成后,可以按【打开输出目录】按钮。找到项目。 新…

VictoriaMetrics 中文教程(10)集群版介绍

VictoriaMetrics 中文教程系列文章:VictoriaMetrics 中文教程(01)简介 VictoriaMetrics 中文教程(02)安装 VictoriaMetrics 中文教程(03)如何配置 Prometheus 使其把数据远程写入 VictoriaMetrics VictoriaMetrics 中文教程(04)对接 Grafana 同时介绍 vmui VictoriaMe…

《使用Gin框架构建分布式应用》阅读笔记:p234-p250

《用Gin框架构建分布式应用》学习第13天,p234-p250总结,总17页。 一、技术总结 1.message broker (1)RabbitMQ 书里使用的是RabbitMQ(https://www.rabbitmq.com/),这里补充一点说明: docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:4.0.2 a、访问管理…