- 博客(18)
- 收藏
- 关注
原创 即时通讯的实现:短轮询、长轮询、SSE 和 WebSocket 间的区别?
这种方式实现的即时通信,本质上还是浏览器发送请求,服务器接受请求的一个过程,通过让客户端不断的进行请求,使得客户端能够模拟实时地收到服务器端的数据的变化。是 HTML5 定义的一个新协议议,与传统的 http 协议不同,该协议允许由服务器主动的向客户端推送信息。但是,有一种变通方法,就是服务器向客户端声明,,而 SSE 的方式是单向通信的,只能由服务器端向客户端推送信息,如果客户端需要发送信息就是属于下一个 http 请求了。也就是说,发送的不是一次性的数据包,而是一个数据流,会连续不断地发送过来。
2025-06-16 10:31:54
314
原创 关于async await
总之:只要使用await 本行下的都会被推到微任务队列等待执行--如果当前函数是异步,需要resolve/reject。await 后面函数如果是异步函数,要返回一个新的new Promise--resolve()/reject()用了await 关键字 函数并不是异步函数 他会先执行函数,再把await 后面的代码转化成微任务。情况三:后面是数字被包装成promise.resolve()什么时候await后面的代码不会被触发呢?🧠 为啥结果是这样嘞?✅ 如何避免这个问题?
2025-06-05 15:48:52
178
原创 搞懂react 中的hook 不能写在if, 循环的原因
setName确实知道自己的索引,但 React 更依赖“每次组件执行时的 Hook 调用顺序”来管理状态。只要顺序变了,React 就会搞混谁是谁。因此,Hook 必须始终在组件顶层、稳定顺序调用。
2025-05-21 11:27:01
386
原创 关于Etag 和last-modified区别
二次请求携带关键字段和日期 If-Modified-Since: Mon, 18 Oct 2023 09:30:00 GMT。拿到资源以及Last-Modified: Mon, 18 Oct 2023 09:30:00 GMT。判断资源是否过期->200状态码,新的资源和Last-Modified / 304状态码,拿缓存。协商请求:发送请求到服务端->判断是否过期->没过期返回304直接拿缓存/过期从服务端获取。200状态码,新的资源和Last-Modified / 304状态码,拿缓存。
2025-05-13 16:49:44
281
原创 关于sessionstorage localstorage
场景:点击单号,window.open(`/page/dispatch/project/list/${expId}/${orgCode}`)打开新界面,新界面搜索出订单详情 弹窗展示。摸索:会话隔离 ,即使我在A界面改了sessionstorage,详情窗口再没关闭情况下也保持原有数据1。解决:改用localstorage,同源窗口公用一套数据 ,根据更新可控制详情展示,且始终打卡一个窗口。疑点:为啥第一次可以带设置的sessionstorage?效果:一致保证开一个弹窗,且每次都可展开详情。
2025-05-08 17:58:27
183
原创 手写call,apply,bind
手写bind 返回一个函数,传递多次参数 支持直接调用。new调用(this指向丢失)原理:在指向对象里加上这个调用函数这个方法即可。改变this调用 指向第一个参数。
2025-05-08 14:46:22
147
原创 手写深拷贝 简易版
遍历对象,注意:for in会遍历原型链上的属性 因此要二次判断。拿到参数 判断是不是对象或者不是null。属性还是对象要递归 不是直接返回。判断要拷贝的类型是对象还是数组。
2025-05-08 09:36:10
142
原创 手写promise 简易版 构造函数
try catch 只能捕获同步错误 promise也没解决这个问题。如果promise抛出错误 需要利用try catch 捕获。状态变化,调用函数,且只能调用一次。接受一个函数,且函数立即执行。函数有两个参数,且都为函数。
2025-05-07 17:16:56
167
原创 函数柯里化
柯里化是编程语言中的一个通用的概念(不只是Js,其他很多语言也有柯里化),是指把接收多个参数的函数变换成接收单一参数的函数,嵌套返回直到所有参数都被使用并返回最终结果。柯里化不会调用函数,它只是对函数进行转换。写法1:(只能接受每次传递一个参数)写法2:(可接受 单参或多餐)
2025-05-06 10:09:42
167
原创 手写promise.all和 promise.race
2.接受的参数每一个都是一个promise,不是也要包装成一个promise ,返回是一个新的promise。2.接受的参数每一个都是一个promise,不是也要包装成一个promise ,返回是一个新的promise。1.promise.all 接受参数是可迭代对象 ,获取长度不能用length ,size。1.promise.race接受参数是可迭代对象 ,获取长度不能用length ,size。3.全部成功 按照次序返回成功结果数组,一个失败,直接返回失败。
2025-04-15 09:48:06
204
原创 关于浏览器全面禁用三方cookie
HTTP协议是无状态的协议,如果你在同一个客户端向服务器发送多次请求,服务器不会知道这些请求来自同一客户端。这正是HTTP协议得以广泛应用的原因,试想一下,如果它是有状态协议,你必须要时刻与服务器建立链接,那么如果连接意外断开,整个会话就会丢失,重新连接之后一般需要从头开始;而如果是无状态协议,使得会话与连接本身独立起来,这样即使连接断开了,会话状态也不会受到严重伤害,保持会话也不需要保持连接本身。如果HTTP。
2025-03-11 15:35:43
917
原创 对象基本方法合集
Object.getOwnPropertyNames(obj) // 所有属性名(包括不可枚举,字符串类型)Object.ownKeys(obj) //所有属性 无论是否可枚举(最完整获取对象属性的方式)Object.keys(obj) // 可枚举的属性名(必须字符串类型)Object.getOwnPropertySymbols(obj) // Symbol属性。Object.entries(obj) // 可枚举的属性键值对。// 检查属性可枚举性。
2025-02-28 10:58:40
583
原创 对vue响应式理解
派发更新该属性,触发多个watcher(一个组件只有一个watcher,watcher变化,组件重新渲染,所以数据更新)vuex也是类似实现原理 他收集多个组件的watcher ,实现多个组件的状态管理 一个改 全都改。根据数据渲染界面调用dep实例,收集依赖,收集当前watcher观测的数据变化。遍历data中数据 利用defineProperty变成get set形式。dep(一个数据对应一个dep ,一个dep容器管理一堆订阅者)watcher (一个组件一个,在一个数组中不允许重复)
2025-02-27 17:36:56
111
原创 大文件上传
1.分片:获取文件--获取尺寸--按照分片大小切割--利用md5计算出单个chunk的hash和整文件hash---创建formData实例 ,传给后端--利用promise.all全部传递成功调用后端完成接口实现。
2025-02-26 09:52:11
224
原创 记录react-hooks中useEffect执行时机
虽然有没有写没写依赖项 都会挂载 更新的都执行 但二者存在差别。(每次变化都会先消除上次的count旧输数据)
2025-01-14 17:07:14
170
原创 react中table使用sorter排序 触发分页默认置为1的问题
table中使用onchange 会自动监听以上三个属性 一个变化 都会触发,不解的是一旦点击排序 会从第三页跳到首页,利用。分页中的监听来提前设置当前页码 保证不被替换 确保在当前页面实现掉接口排序。利用后端排序,使用sorter 总是触发分页逻辑 看了框架发现。
2024-12-31 09:43:34
216
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人