专栏名称: 前端从进阶到入院
我是 ssh,只想用最简单的方式把原理讲明白。wx:sshsunlight,分享前端的前沿趋势和一些有趣的事情。
目录
相关文章推荐
中国能源报  ·  关于举办绿电、绿证、CCER交易培训的通知 ·  2 天前  
中国能源报  ·  关于举办绿电、绿证、CCER交易培训的通知 ·  2 天前  
龙船风电网  ·  建设进度过半!这座海上风电场成本上涨 ·  2 天前  
南方能源观察  ·  深化新能源上网电价市场化改革正当其时 ·  2 天前  
中国舞台美术学会  ·  通知丨文化和旅游部艺术司关于征集戏曲创作优秀 ... ·  4 天前  
51好读  ›  专栏  ›  前端从进阶到入院

Vue Vapor 大佬:我需要筹集资金养活自己

前端从进阶到入院  · 公众号  ·  · 2024-10-29 12:30

正文

大家好,我ssh ,又跟大家见面啦!

前言

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

智子也需要赚钱养活自己

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

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

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

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

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

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

现在的Vue Vapor

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

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

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

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

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

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

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

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

并且Vue生态中的 VueUse Vue Router Pinia Nuxt 组件库 等都会支持Vapor。

同样也支持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 render

document.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++







请到「今天看啥」查看全文