阶段三模块一 直播

博客围绕面试题展开,回顾了虚拟DOM的跨平台优势和性能特点,介绍了Svelet框架无虚拟DOM的特性。还提及虚拟DOM过程的时间复杂度,以及Snabbdom对算法的优化。通过案例演示了key在不同场景下的作用,对比了设置和不设置key时节点更新的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
1.只需了解原理即可
2.很少用设计模式
3.
4.SSR首次渲染比SPA快

面试题

在这里插入图片描述
12
解:模拟call
|| 如果是0 或者 ‘’ 也会返回window
??就不会(只判断undefined或null)19 20的新语法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
也就是
在这里插入图片描述


call的小bug,传参情况
在这里插入图片描述
在这里插入图片描述
自己写的call
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于js天生缺陷,原生的没有报错,自己写的报错了。只有对象有属性和方法 数值是没有的。

处理问题:这里只判断一种原始值,转换成包装类型
在这里插入图片描述
在这里插入图片描述

snabbdom的案例演示

附一个在线敲码的
https://codesandbox.io/dashboard/home?workspace=021542f0-c6be-4b7a-bcbc-dd00947d10c4
在这里插入图片描述
自己下源码看

虚拟DOM回顾

在这里插入图片描述

  • 浏览器环境转换成dom,node服务端渲染可以转换成html字符串,移动端转换成原生的文本框啥的,这就是虚拟dom最大的好处-跨平台。
  • 性能-首次渲染会创建很多额外的对象(开始耗时),但界面复杂时,会进行虚拟dom对比(避免不必要的渲染,浏览器重新渲染(绘图)是非常耗时的)。

svelet框架

因为有人说虚拟dom不好,创建额外的对象,还进行复杂的diff算法。

体验和vue差不多,没有虚拟dom,因为直接变成js,没有diff算法,应该会比vue这些框架快点。

虚拟dom过程回顾

在这里插入图片描述

  • 算法-解决问题的
  • 例如排序算法,排序算法有很多,但都是对数据进行排序,只是看哪种效率好,根据不同的计算机处理速度也不一样,所以有一个统一描述名称,时间复杂度
  • 时间复杂度- O(n^3) ^表示立方, O表示时间算法复杂度 O(1) 一次就可以获得结果 O(n)要n次才能获得结果 这样就能明显感觉到O1的算法明显比On好。
    在这里插入图片描述
    找差异是N,3的平方次,然后又要变量到真实dom,这样就变成了O(n^3)3次方了。
    这种时间复杂度是非常恐怖的,例如
    网页中100个节点, 那么需要对比 100的三次方 需要对比100W次

snabdom中对算法进行了优化
在这里插入图片描述
在这里插入图片描述
只对比同级节点
在这里插入图片描述
把同级比较完才差异直接更新到dom上,所以这里的时间复杂度是O(n),也就是有n个节点进行n次操作即可
在这里插入图片描述
例如有100个节点,100次操作即可完成。


在这里插入图片描述
在这里插入图片描述

key的场景

在这里插入图片描述
案例

没有key,那么key是一样的,li标签页一样,那么diff会认为这是相同的节点。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
绑定key,问题就解决了
在这里插入图片描述
在这里插入图片描述
场景2
在这里插入图片描述
重新创建就会有过度的效果。

更改第一个元素,没有设置key

在这里插入图片描述
在这里插入图片描述
跳过3次左右到 li内容对比
在这里插入图片描述
f11进入方法看对比过程
在这里插入图片描述
在这里插入图片描述
节点或key相同,会进行patchVnode 继续对比
patchVnode中会看节点是否定义,没有定义就进行children的比较
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更新的内容,li还是复用之前的。
索引++ 继续比较下一个节点
在这里插入图片描述
没有key的情况,即使内容不相同,也会认为li是相同节点,li中的内容不一样,只会更新内容,li还是重用的。

更改第一个元素,设置key

在这里插入图片描述
跳过三次 找到li
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
children不相等 进入updatechildern,继续比较文本节点,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结有key新增和移除了节点(在最后一步还需要变量,时间复杂度更高),似乎慢了,没有key只更新了文本节点(文档上也说了不设置key就最大重用元素)。
以上因为太多 很多漏记,练习一定要调试走一遍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值