“你知道什么是情景记忆吗?”公会长突然问。
索菲娅一听,就明白怎么回事:“原来你也犯病了。”
可公会长已经顾不上那么多,他只感觉有无数东西堵塞在脑海中,急需他发泄出来。
“情景记忆,即以时间和空间为坐标,通过亲身经历,对发生在一定时间和地点的事件的记忆。”
索菲娅若有所思:“原来如此,对于我们来说,在此情此景下,即便是如此枯燥乏味的知识,也会产生联想记忆。日后回想到今日,就会想到那些知识。而这,对于那位真正想要记住这些知识的人来说也同样如此。”
公会长点头:“是的,所以这一切是有意义的。你知道background-attachment:fixed么?”
“不知道。”索菲娅摇头:“我只知道background-color和background-img。”
“background—attachment:fixed表示,即使一个元素拥有滚动机制,背景也不会随着元素的内容滚动。意思是背景图从一开始就已经被固定死在初始的位置。”
“原来如此。”索菲娅点头:“仅仅听到它的用法,就能想到用它做出很不错的效果。”
“那么,接下来,我们来讲vue3和react吧。”公会长神色沉凝。
此时魔物又爬上海岸,它们的数量仿佛无穷无尽一般,而且距离城墙越来越近,而龙吼炮的冷却时间还没好。
主要问题在于龙吼炮每发射一次,需要冷却的时间就会增加一点,否则以那些魔物的速度,完全突破不了龙吼炮的火力防御。
公会长心中急得要死,却没办法抑制自己倾诉知识的渴望,只能继续讲述下去。
“Vue 和 React 在数据发生变化后,在通知页面更新的方式上有明显的不同,通俗的来说,就是:在 Vue 框架下,如果数据变了,那框架会主动告诉你修改了哪些数据;而React的数据变化后,我们只能通过新老数据的计算 Diff来得知数据的变化。”
“这两个解决方案都解决了数据变化后,如何通知页面更新的问题,并且迅速地获得了很高的占有率,但是他们都碰到了性能的瓶颈。”
索菲娅明显被勾起了兴趣,问:“是什么?”
“对于 Vue 来说,它的一个核心就是“响应式”,也就是数据变化后,会主动通知我们。响应式数据新建Watcher监听,本身就比较损耗性能,项目大了之后每个数据都有一个watcher会影响性能。
对于React的虚拟DOM的Diff计算逻辑来说,如果虚拟DOM树过于庞大,使得计算时间大于16.6ms,那么就可能会造成性能的卡顿。”
索菲娅沉吟:“这样的话这两种框架都有缺点啊,但vue更不适用于大型项目,难怪像阿x巴巴等大型企业都会使用react来做项目。”
公会长眼角一阵抽动,心说你对于这些莫名奇妙的知识根本不是一无所知吧?
事实上在穿越到游戏中前,索菲娅确实接触过框架这些内容。
“为了解决这种性能瓶颈,vue和react走上了不同的道路。”
索菲娅听的津津有味,问:“是什么?”
“React为了突破性能瓶颈,借鉴了操作系统时间分片的概念,引入了Fiber架构。通俗来说,就是把整个虚拟DOM树微观化,变成链表,然后我们利用浏览器的空闲时间计算Diff。一旦浏览器有需求,我们可以把没计算完的任务放在一旁,把主进程控制权还给浏览器,等待浏览器下次空闲。
这种架构虽然没有减少运算量,但是巧妙地利用空闲实现计算,解决了卡顿的问题。”
索菲娅眼睛一亮,轻轻拍掌:“确实是很巧妙的想法,那么vue呢?”
“Vue 1 的问题在于响应式数据过多,这样会带来内存占用过多的问题。所以 Vue 2 大胆引入虚拟DOM来解决响应式数据过多的问题。”
“这个解决方案使用虚拟DOM解决了响应式数据过多的内存占用问题,又良好地规避了React中虚拟DOM的问题, 还通过虚拟DOM给 Vue 带来了跨端的能力。”
“响应式数据是主动推送变化,虚拟DOM是被动计算数据的Diff,一个推一个拉,它们看起来是两个方向的技术,但被 Vue 2 很好地融合在一起,采用的方式就是组件级别的划分。
对于 Vue 2 来说,组件之间的变化,可以通过响应式来通知更新。组件内部的数据变化,则通过虚拟DOM去更新页面。这样就把响应式的**,控制在了组件级别,而虚拟DOM的量级,也控制在了组件的大小。
这个方案也体现了 Vue 一直以来坚持的中庸的设计思想。”
“React的世界里只有JSX,最终JSX都会在Compiler那一层,也就是工程化那里编译成JS来执行,所以React最终拥有了全部JS的动态性,这也导致了React 的API一直很少,只有state、hooks、Component几个概念,主要都是JavaScript本身的语法和特性。”
“而 Vue 的世界默认是template,也就是语法是限定死的,比如v-if 和 v-for等语法。有了这些写法的规矩后,我们可以在上线前做很多优化。Vue 3 很优秀的一个点,就是在虚拟DOM的静态标记上做到了极致,让静态的部分越过虚拟DOM的计算,真正做到了按需更新,很好的提高了性能。”
公会长此时已经感觉自己要裂开了,尽管他只是在复述内容,可这内容的枯燥程度还是让他惊悚。
“在模板的书写上,除了 Vue 和 React 走出的template和JSX两个路线,还出现了 Svelte 这种框架,没有虚拟DOM的库,直接把模板编译成原生DOM,几乎没有Runtime,所有的逻辑都在Compiler层优化,算是另外一个极致。”
公会长停下了喋喋不休的嘴,场面居然一瞬间有些安静。
索菲娅有些疑惑,问:“没了么?”
“没了。”公会长摊手。
这次轮到索菲娅问:“快到2000字了?”
公会长面露尴尬:“差不多,我们该谈正事了。”
“所以我还是那句话。”索菲娅神色淡淡:“你想让我一个司掌毁灭的神去保护这座城市?”
“没错。”公会长点头。
“我说不定什么时候就会发神经毁灭世界。”
“可你至少现在并不想毁灭世界不是么?”公会长斟酌着字句,盯着索菲娅的眼睛缓缓说:“既然如此,为什么不试着征服世界呢?”
索菲娅没预料到公会长会说这种话,张大了嘴巴:“哈?”
(ps:其实一直都想把一些自己想看,或者想复习一下的内容融入到小说中,没想到在这里机缘巧合下实现了,也算是废物利用了吧,至少我自己回看挺欢乐的。)