- 博客(7)
- 问答 (1)
- 收藏
- 关注
原创 npm换源,查看源
更换npm源:要将npm源更改为另一个可用源,可以使用 `npm config set registry <new_url>`。例如,如果希望使用淘宝源(`https://registry.npmmirror.com/`),则输入 `npm config set registry https://registry.npmmirror.com/`。查看所有可用的npm源:使用 `npm config ls -l` 可以列出所有的配置项及其值,包括可用的npm源。
2024-03-01 13:57:55
1546
原创 JS的事件循环
在Chrome 的源码中,它开启一个不会结束的 for 循环,每次循环从消息队列中取出第一个任务执行,而其他线程只需要在合适的时候将任务加入到队列末尾即可。根据 W3C官方的解释,每个任务有不同的类型,同类型的任务必须在同一个队列,不同的任务可以属于不同的队列。不同任务队列有不同的优先级,在一次事件循环中,由浏览器自行决定取哪一个队列的任务。但浏览器必须有一个微队列,微队列的任务一定具有最高的优先级,必须优先调度执行。
2024-02-29 15:40:41
255
1
原创 什么是 reflow?
当进行了会影响布局树的操作后,需要重新计算布局树,会引发1ayout。为了避免连续的多次操作导致布局树反复计算,浏览器会合并这些操作,当 JS 代码全部完成后再进行统一计算。所以,改动属性造成的 reflow 是异步完成的。也同样因为如此,当 JS 获取布局属性时,就可能造成无法获取到最新的布局信息。浏览器在反复权衡下,最终决定获取属性立即 reflow。
2024-02-28 18:05:43
310
1
原创 JS中的计时器能做到精确计时吗? 为什么?
3.按照 W3C 的标准,浏览器实现计时器时,如果嵌套层级超过 5 层,则会带有 4 毫秒的最少时间,这样在计时时间少于4毫秒时又带来了偏差。2.操作系统的计时函数本身就有少量偏差,由于 JS 的计时器最终调用的是操作系统的函数,也就携带了这些偏差。4.受事件循环的影响,计时器的回调函数只能在主线程空闲时运行,因此又带来了偏差。1.计算机硬件没有原子钟,无法做到精确计时1。
2024-02-28 18:02:05
704
1
原创 JS异步的原因
JS是一门单线程的语言,这是因为它运行在浏览器的渲染主线程中,而渲染主线程只有一个。如果使用同步的方式,就极有可能导致主线程产生阻塞,从而导致消息队列中的很多其他任务无法得到执行。这样一来,一方面会导致繁忙的主线程白白的消耗时间,另一方面导致页面无法及时更新,给用户造成卡死现象。具体做法是当某些任务发生时,比如计时器、网络、事件监听,主线程将任务交给其他线程去处理,自身立即结束任务的执行,转而执行后续代码。当其他线程完成时,将事先传递的回调函数包装成任务,加入到消息队列的未尾排队,等待主线程调度执行。
2024-02-28 17:50:03
487
1
原创 TCP三次握手,四次挥手
客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。Client端发起挥手请求,向Server端发送标志位是FIN报文段,设置序列号seq,此时,Client端进入FIN_WAIT_1状态,这表示Client端没有数据要发送给Server端了。
2024-02-28 17:47:55
951
2
vue3+typescript+Luckysheet实现导入导出在线编辑 vue3+pdf.js实现导入导出在线编辑pdf文件
2024-03-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人