fre2 周更,优化 diff,支持 jsx2

483 阅读2分钟

大家嚎(^o^)/~俺是 132 小朋友,这周对 fre2 的 diff 进行了调整,现在我有一半的底气觉得已经稳定了,哇咔咔

优化 diff 算法

fre2 的 diff 算法程度和 vue 类似,都使用了两端遍历,只不过 fre 是异步的,而 vue 是同步

但是 vue3 实现了 inferno 类似的算法,使用了 lis(最长递增子序列)进行优化,我一直很纠结这个,我到底要不要实现它呢?

最终答案是:不值得

这是有原因的,因为首先,O(ND) 的算法并不一定快,首先基准本身就不可信,用来测试的场景参考意义太小了

而且在基准中,实际上 vue3 比 inferno 慢得多,这说明很可能速度差异不在 diff 算法上

另一方面,用户对速度的感知,哪怕 fre2 使用最快的算法,在异步渲染的情况下也会大打折扣,何况还引入了一个 O(nlogn) 的 lis 算法

所以我认为,引入 lis 或 lcs 并不值得,fre2 目前的算法已经是最合适的了

一方面,它的效率可以和 vue 持平,另一方面,代码量和可读性也要好得多

这周继续调整了算法的逻辑,更加稳定了

hooks API

万万没想到这周会修复两个 hooks 的 bug,天啦噜,其中一个还是很简单的错误,我是怎么了啊 emmm

jsx2

另一个更新就是支持 jsx2,以后可以不用 import h 函数啦,哇咔咔

import { render } form 'fre' 
// output import { jsx, render } from 'fre'

总结

感谢小伙伴帮忙提的 issue,未来我还是会周更 fre 的,就,周六日的亚子

目前 fre2 整体代码架构不会发生变化了,源码可以开始读了,业务可以尝试了

不建议看 fre1 的代码,因为实际上 fre1 已经完全弃坑了,毕竟也没人用,我都快把 fre1 给忘光了哈哈哈

最后放一个链接:github.com/yisar/fre

求个 star 呀呜呜呜