zhuzhh

Results 62 issues of zhuzhh

删除render函数无用字面量以及重复变量

1、tsc、tsup 区别? 2、any、unknown 区别? any: 不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查 never: 表示的是那些永不存在的值的类型。never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never。 ``` // 返回never的函数必须存在无法达到的终点 function error(message: string): never { throw new Error(message); } ``` 3、元组 ``` let x: [string, number]; //...

1. 插件机制 基于 connect 库 实现的 (https://github.com/senchalabs/connect) 2. 设置静态文件目录(serving static files) sirv (https://github.com/lukeed/sirv) 3. 服务启动,基于 node api http/https/http2 实现的 4. 为什么不使用esbuild直接打包? esbuild 基于go实现,但是不成熟,缺少代码分割、css处理方面的能力 5. vite 在开发阶段是一个node静态文件服务器,打包阶段依靠rollup 6. 开发阶段,链接某个项目联调 ``` git...

### vite cli 入口是? 当前项目 `node_modules/.bin/vite`; 调用 `node_modules/vite/dist/cli` ;调用 server 启动一个服务,该服务是基于koa2写的; 启动服务的同时,注册了一系列plugin,如`vuePlugin、cssPlugin、sourceMapPlugin`等;他们分别处理不同的场景 > 服务启动后,并不会对源文件代码做操作,只到用户访问该服务时,才会对源代码做解析操作 1、vite运行基本原理解读 2、热更新原理 - connected、reload、rerender、style-update、style-remove、full-reload 3、引入node_modeles文件处理方式 - 处理路径,匹配路径包含 node_modules时,把路径replace成 __modules - 引入时,将变成 import vue from '__modules/vue' -...

### 大致流程 一、浏览器进程接收用户输入的 URL 请求,浏览器进程将该 URL 转发给网络进程 二、网络进程发起真正的 URL 请求 三、网络进程接收到响应数据,解析响应头数据,将数据转发给浏览器进程 四、浏览器进程接收到数据后,发送"提交导航(CommitNavgation)"消息到渲染进程 五、渲染进程接收"提交导航"消息后,开始准备接收 HTML 数据,接收数据的方式是直接和网络进程建立数据管道 六、最后渲染进程会向浏览器进程"确认提交",这是告诉浏览器进程: "已经准备好接受和解析页面数据了" 七、浏览器进程接收到渲染进程"提交文档"的消息后,便开始移除之前旧的文档,然后更新浏览器进程的页面状态 ### 分别详细解析 一、处理用户输入的关键字; * 如果是搜索内容,地址栏会使用浏览器默认的搜索引擎,合成新的带搜索关键字的 URL * 如果判断输入内容符合 URL 规则,地址栏会根据规则,**加上协议**,合成完整的 URL;比如输入 didi.cn,浏览器会判断其是符合规则的,然后加上...

### 浏览器多进程架构 > 进程:一个进程就是一个程序的运行实例 > 线程:线程是依附于进程的,而进程中使用多线程并行处理能提升运算效率 > 线程是不能单独存在的,它是由进程来启动和管理的 浏览器采用了多进程,而多进程的特点是: - 进程中的任意一线程执行出错,都会导致整个进程的崩溃。 - 线程之间共享进程中的数据。 - 当一个进程关闭之后,操作系统会回收进程所占用的内存。 - 进程之间的内容相互隔离。 如下图: ![image](https://user-images.githubusercontent.com/41102272/77712888-ffffdc80-700f-11ea-92ab-bb4bc72ad705.png) 下面我们来逐个分析下这几个进程的功能。 - **浏览器进程:** 主要负责界面显示,用户交互、子进程管理、提供存储等功能。 - **渲染进程:** 核心任务是将html、css、js转换为网页,排版引擎Blink和js引擎V8都运行在该线程,默认情况下,chrome会为每个tab标签页创建一个渲染进程。出于安全考虑,渲染进程需要运行在沙箱模式下。 - **UPU进程:** GPU是为了实现3D css效果的,最初chrome发布的时候,还没该进程的,只是后来3D绘制越来越普遍,后来的chrome在其多进程架构引入了进来。...

浏览器

1、babel转换大体流程 2、config生成 -> mergeConfig -> 3、babel架构图 4、转换ast底层依赖

### createApp运行过程是? ``` import { createApp } from 'vue' import App from './App.vue' createApp(App).mount('#app') ``` vreateApp -> 创建baseCreateRender -> 返回 render/createApp ![image](https://user-images.githubusercontent.com/41102272/147404466-8a5ce7d1-f139-4b30-a80a-787c13e1dae7.png) ### 组件本质? 组件本质是一个普通对象,但是必须携带render函数 ### render函数如何运行起来的? ### 组件在编译的时候,如何识别当前tag,是html标签还是自定义组件? ```...

### GC 要做两件事 1. 找到内存空间里的垃圾 2. 回收垃圾,让程序可以再次利用这部分空间 ### GC的好处 如果没有GC,则需要程序员自己手动管理内存,必须清楚地确保必要的内存空间,释放不要的内存空间 如果忘记释放内存,该内存空间会发生内存泄漏,即无法被使用,又会持续存在下去。 **悬垂指针**:在释放内存空间时,忘记初始化指向释放对象的内存空间的指针,这个指针会一直指向释放完毕的内存空间。因为这个指针没有指向有效的内存空间,处于悬挂状态,所以称其为‘悬挂指针’ 有了GC,程序员就省去了手动管理内存的麻烦 ### GC基本内容 标记-清除算法、引用计数法、GC复制算法 现在的GC算法,都是基于上面三种基本算法中衍生出的产物

### TCP、UDP各自特点 tcp:面向连接的、可靠的、 ### keep-alive上面作用 在http1.0中,每个tcp请求或响应都被分配一个新的连接,就导致了连接启动缓慢。 http1.1引入keep-alive概念,在同一个tcp连接中对多个请求或响应使用同一个连接 **局限性:**但是不支持多个请求一起发送 http2.0引入多路复用技术改善http1,1的keep-alive带来的缺陷。 但是数据包的丢失会使得tcp重传,从而降低传输效率 **http2.0中,所有的流都是共享同一个连接,当数据包丢失超过阈值,h2的运行效率还不如h1** ### http2.0做了哪些改进? 1、建立连接后,可以多路复用 2、建立连接后,一次的请求与被响应,视为流 3、数据传输基于二进制分帧(tcp传输是基于字符流的) > 四大特点:服务器推送、队头压缩、 ### http2.0有哪些缺陷? 基于TCP,导致队头阻塞 ### http3.0做了哪些改进? 弃用TCP ### TCP哪些特点 面向连接的、可靠的、基于字节流的传输层协议 所以tcp做了以下工作:传输过程中加入了序列号、数据重传、拥塞控制、使用校验和确保无错传输。 创建连接过程中,很多参数被初始化,例如序号被初始化,保证按序传输和连接的强壮性,确保数据传输和断开的可靠。