10

fre2 周更,优化 diff,支持 jsx2

 3 years ago
source link: https://zhuanlan.zhihu.com/p/348345452
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

fre2 周更,优化 diff,支持 jsx2

俺,只想跪在床上娇喘,不想隔着网线叫唤

大家嚎\(^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 给忘光了哈哈哈

最后放一个链接:yisar/fre

求个 star 呀呜呜呜


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK