自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(116)
  • 收藏
  • 关注

原创 理解虚拟dom

虚拟 DOM是由一系列的 JavaScript 对象组成的树状结构,每个对象代表着一个DOM元素,包括元素的标签名、属性、子节点等信息。虚拟 DOM中的每个节点都是一个 JavaScript 对象,它们可以轻松地被创建、更新和销毁,而不涉及到实际的DOM操作。将目标所需的 UI 通过数据结构“虚拟”地表示出来,保存在内存中,然后将真实的DOM与之保持同步。

2024-03-31 00:23:00 1391

原创 vue和react的区别

因为View中很多控件的数据类型和Model中的属性不相同,例如Model中的时间数据可能是一串数字,View想要展示成日期的格式,这就需要一种转化,这个转换如果放在View不合适,因为View中不应该出现逻辑代码,放在Model中也不合适,这回导致Model臃肿庞大,因为这种问题的存在诞生了ViewModel,,但是单向数据流并非单向绑定,React想要从一个组件去更新另一个组件的状态,需要进行状态提升,即将状态提升到他们最近的祖先组件中,触发父组件的状态变更,从而影响另一个组件的显示。

2024-03-08 23:25:05 1418

原创 react的diff源码

react 的每次更新,都会将新的 ReactElement 内容与旧的 fiber 树作对比,比较出它们的差异后,构建新的 fiber 树,将差异点放入更新队列之中,从而对真实 dom 进行 render。简单来说就是如何通过最小代价将旧的 fiber 树转换为新的 fiber 树。

2024-03-08 23:03:15 1121

原创 gc(关于v8垃圾回收机制联想到的知识点)

这也是两者最大的区别。V8 是使用副垃圾回收器和主垃圾回收器处理垃圾回收的,不过由于 JavaScript 是运行在主线程之上的,一旦执行垃圾回收算法,都需要将正在执行的 JS 脚本暂停下来,待垃圾回收完毕后再恢复脚本执行。:对于对象A,任何一个对象引用了A的值,计数器+1,引用失效时计数器-1,当计数器为0时责备回收,但是会存在循环引用的情况,可能会导致内存泄漏,自2012年起,所有的现代浏览器均放弃了这种算法。通过增量标记的方式,V8引擎可以在垃圾回收过程中与应用程序的逻辑交替执行,减少长时间的阻塞。

2024-02-02 13:01:59 1334

原创 京东啊啊啊啊啊

那你觉得其实京东的业务场景也有很多这种和就是容易有性能问题的场景,比方说,嗯,我的订单就是一个很长的一个长远表,然后,嗯,那你做这种长远表的时候,我可以再说一下他具体的交互的形态和,就比方说我的订单他其实可以是无限的下拉的。OK,那现在还有这样一个场景,比方说一个 react 组件里边,嗯。比如说他,我两次 set 第二次的时候,他读到的,虽然可能是说这两次在变化,他读到的可能都是之前的那一部分,但实际执行的时候因为这个次序的问题,他可能就变了,除了刚才这个 set state 的场景,你就是函数式的。

2025-12-20 22:54:13 262

原创 非官方的 成功人

然后有一些小的一些营销商这些,但是没有的这些一般是有保丝绸在成功来承接的,然后对于一些没有的店铺的话,他就可以来我们平台去订购这些保丝绸提供的那些保险服务,他订购完了之后,然后在他的那个商品的 SQL 页面就会有相应的展示。然后买家买到这个,买这个商品的时候,购买这个相应的服务了之后,相当于给他多下了一笔单,然后基本上大概的类似的一些产品都是这样,就是先要做买家的,也要做卖家的,然后买卖家的流程都有,然后卖家的流程主要是以 PC 端为主。然后买家,嗯,然后移动就会有设计好的,我这边就暂时没有其他问题。

2025-12-04 19:33:04 196 1

原创 懒加载的原理

return (✅ 执行流程:页面初始化,React 渲染 App 组件遇到,它是由 React.lazy 创建的,内部会触发动态 import('./LazyComp')动态 import() 发起网络请求,异步加载 LazyComp.js(代码分割后的 chunk)在 JS chunk 还没下载并执行完成时,LazyComp 组件还未准备好Suspense 检测到组件未 ready,于是展示。

2025-11-22 19:16:01 801

原创 关于规则引擎的业务指标埋点

为了采集项目的业务指标,比如规则使用率、布局效率、用户满意度等,我们设计了一套前端埋点方案,主要围绕用户的关键行为和系统核心功能来上报数据。“埋点主要分为几个模块:”​ 比如用户什么时候创建规则、创建了什么类型、保存了几条、哪些规则被实际布局引擎使用,我们会记录等事件。​ 包括用户是否使用自动布局、布局耗时多久、有没有手动调整、布局结果是否满意,对应事件如layout_end。​ 比如用户访问了哪些功能模块、日活、功能点击、留存情况,通过user_visit等事件来统计。

2025-11-20 20:21:52 698

原创 监听错误的方式有哪些?

同步代码:使用try-catch(最基础)try {// 可能抛出错误的同步代码throw new Error('同步错误');console.error('捕获到同步错误:', error.message);✅ **能捕获:**​ 同步代码中通过throw抛出的错误❌ **不能捕获:**​ 异步代码、Promise 错误、全局错误等。

2025-11-10 22:50:33 694

原创 关于部署知识

有个硬件,然后他提供了一个 SDK,就是 JS 的 SDK,然后他那个 SDK 能够接收那个硬件的消息,我现在想让你就在我的网页上实现一个功能,就是那 SDK 接收到消息之后,然后你在页面上弹一个消息的弹框。对,然后这个页面有可能会多开的情况下,那永远我希望在浏览器当前激活的那个标签页里面,那个页面上弹出来,那可以任意切换,切到任意一个页面,然后就在对应的这个页面收到消息,就把它那个消息弹出来,你想要怎么实现这个功能?你之前做的项目怎么部署的?你之前做的项目怎么部署的?联合类型和交叉类型的区别是什么?

2025-11-10 21:52:32 195

原创 WebSocket

WebSocket 是一种网络通信协议,提供客户端与服务器之间的全双工、长连接、低延迟​ 的通信能力。它使得浏览器和服务器之间可以像 “打电话” 一样随时双向发送消息,而不需要像 HTTP 那样 “请求-响应” 模式下反复建立连接。特性HTTPWebSocket连接方式​短连接,每次请求都要建立连接长连接,一次握手后保持连接通信模式​单向(客户端请求,服务器响应)**全双工(双方可随时主动发消息)**​协议​基于 HTTP(端口 80/443)基于 TCP(通过 HTTP 升级握手)

2025-11-09 19:59:23 732

原创 前端跨页面通信

多个页面可以连接到同一个 SharedWorker,通过它来进行数据通信和状态共享。Service Worker 是运行在浏览器背后的脚本,通常用于。​ 的多个浏览器 Tab、窗口、iframe。,这样就可以实现间接的通信。

2025-11-09 19:41:47 932

原创 h5和pc端的区别

在实际项目中,我们通常需要同时支持。,但可以通过以下方式。

2025-11-07 16:28:39 521

原创 web api

Web API 有哪些?

2025-11-06 14:59:04 477

原创 场景题大全

属性计算范围(宽度)包含内容不包含内容典型用途元素可视区域(内边距 + 内容区)内容区宽度 + 左右内边距(padding)边框(border)、滚动条、外边距(margin)获取元素 “实际显示的可视宽度”(如自适应布局)元素整体布局宽度(边框 + 内边距 + 内容区)内容区宽度 + 左右内边距 + 左右边框外边距、滚动条占据的空间(若滚动条在元素外)获取元素 “整体占位宽度”(如计算元素在页面中占据的空间)元素滚动内容的总宽度(包含未显示部分)

2025-11-05 17:19:52 781

原创 SSR服务器端渲染

即让 React/Vue 框架“接管”这个已经存在的 DOM,使其可以响应用户事件(点击、输入等)每次请求都要在服务端执行渲染逻辑,消耗 CPU / 内存,相比 CSR 更占服务器资源。最流行的 React SSR / SSG 框架,内置 SSR 支持,开箱即用 ✅。使用方式与 Next.js 类似,约定式路由,内置 SSR 支持。,实际项目中强烈建议使用 Next.js / Nuxt.js!用户打开页面时,已经可以看到完整内容,无需等待 JS 加载!,用户马上就能看到内容,不用等待 JS 加载完再渲染。

2025-11-05 13:27:55 858

原创 position大全

属性值说明是否脱离标准流常见用途static默认值,元素按照正常的文档流排列(从上到下、从左到右)❌ 不脱离默认布局,不定位时使用relative相对定位,元素进行偏移❌微调元素位置,常作为绝对定位的“定位参考点(父级)”absolute绝对定位,元素,相对于定位✅实现弹窗、下拉菜单、复杂布局fixed固定定位,元素,相对于定位✅实现固定导航栏、回到顶部、吸底按钮sticky粘性定位,元素在滚动到特定位置前正常排列,之后“粘”在屏幕某个位置⚠️实现吸顶导航、表格头部固定等。

2025-11-05 12:45:29 804

原创 伪数组(DOM 操作中获取的元素集合)

只要一个对象满足:有。

2025-11-04 15:29:07 789

原创 同时打开两个浏览器页面,关闭 A 页面的时候,要求 B 页面同时关闭,怎么实现?

你在一个中:用户打开了你希望在浏览器出于安全考虑,,但允许关闭。所以,,或者通过某种去协调两者的关闭行为。

2025-11-04 15:18:21 687

原创 关于数组的方法大全

push()尾部增加unshift ()头部增加splice(开始,要删除的,结束) 返回空数组 影响的是原数组concat() 有限创建一个原数组的副本,然后把想要添加的元素放到副本的尾端 返回新数组前三个都会改变原数组 最后一个不会改变原数组numbers.pop()尾部删除numbers.shift() 头部删除splice(开始的index,要删除的位置,插入的元素) 返回包含删除后的元素的数组,修改原数组!!slice(1,4不包函) 用于创建包含原数组一个或多个的新数组。

2025-10-30 16:46:43 484

原创 闭包知识大全

​这个环境包含了它所能访问的所有变量、作用域链​。

2025-10-30 12:20:37 773

原创 输出题大全

函数声明会提升,而且它的优先级比 var 声明更高!但要注意:如果函数名和变量名同名,会产生覆盖或冲突!同样适用:使用函数式更新 + useEffect 监听。注意首先函数提升,然后变量提升,赋值不提升。✅ 变量提升(var),但函数本身不提升。变量提升,函数不提升(属于变量赋值部分)依然推荐函数式更新,不要依赖立即生效。React 可能不会合并,但依然异步。用函数式更新,每次都基于前一个状态。类似 var,不推荐依赖提升逻辑。提升到当前作用域最前面,​。提升到当前作用域最前面,​。​(比 var 高)

2025-10-30 12:12:25 329

原创 使用 ESLint + Prettier + Husky

步骤工具作用关键命令/文件1​​ESLint​​检查代码质量与规范,配置2​​Prettier​​格式化代码风格,配置格式规则3​​ESLint + Prettier 兼容​​避免冲突,让 ESLint 管 Prettier 规则4​​Husky​​Git 提交前自动执行脚本5​​只检查 Git 暂存区的文件配置在6​​自动格式化 + 修复​​提交前自动格式化代码并修复部分问题​。

2025-10-29 19:59:39 695

原创 防抖/节流/预加载

​​默认第一次不执行,也可以写一个变体,第一次执行搜索框输入联想(用户停止输入一段时间后再发送请求,避免频繁调用接口)窗口 resize 后重新计算布局(等用户调整完窗口大小后再计算)表单验证(等用户输入完再校验,而不是每次按键都校验)防抖和节流的核心逻辑是:要 “记住” 上一次操作的时间、定时器、或者状态,以便控制下一次的执行时机。而闭包,恰好可以 “记住” 函数定义时的环境,包括变量!​​。

2025-10-28 16:00:28 113

原创 设计模式Q

​。

2025-10-25 20:08:03 991

原创 setState

问题答案说明✅setState是异步的吗?✅ ​​是的,通常是异步的​​React 不会立即更新 state 和 UI,而是批量处理更新✅ 为什么是异步的?✅ ​​为了性能优化,合并多次更新,减少渲染次数​​提升渲染效率,避免频繁重绘✅ 能否立即获取更新后的 state?❌ ​​不能直接获取​​,因为更新是异步的使用回调函数(类组件)或useEffect(函数组件)监听更新后逻辑✅ 在 setTimeout / Promise 中 setState 是同步的吗?❌ ​。

2025-10-23 14:44:44 721

原创 JSX 的编译过程

​项目说明​​语法糖,用来描述 UI,最终编译为 React.createElement 或 jsx()​​JSX →,必须手动​​JSX →jsx(...),不再需要手动引入 React,而是自动引入​​React 17 引入的新模块,导出了jsx()和jsxs()方法,用于编译 JSX​​使用 Babel / TypeScript 新配置后,编译器会自动 import或,你无需手动写​​开发用(更好的错误提示),生产用​​Babel 设置,TypeScript 设置​。

2025-10-22 11:26:03 868

原创 webpack

webpack构建流程

2025-10-21 14:24:35 255

原创 前端工程化

/ 当子组件抛出错误时触发,用于更新状态,决定显示降级 UI// 更新 state 使下一次渲染能够显示降级 UI// 捕获错误信息和 React 组件栈信息(可用于日志上报)console.error('🔥 ErrorBoundary 捕获到错误:', error, errorInfo);// 上报错误到日志服务(比如 Sentry、Fundebug)});render() {// 你可以自定义降级 UI,比如错误提示、联系客服、返回首页按钮等return (

2025-10-19 11:45:03 1079

原创 字节面试lllll

​这个环境包含了它所能访问的所有变量、作用域链​。

2025-10-16 15:54:42 565

原创 插槽vue/react

​作用域插槽​。

2025-10-12 16:18:17 1013

原创 保证样式稿高度还原

​​px2rem 是一种开发工具或构建工具插件,它的作用是:自动将你代码中的 px 单位,转换为 rem 单位。​​比如:你写,经过 px2rem 后会变成前提是你配置了 ​​​确保你拿到的是最新、最清晰的设计稿​。

2025-10-12 15:09:58 563

原创 使用动画实现元素水平移动的方法

方法推荐程度原理适合场景​)​​⭐⭐⭐⭐⭐CSS 过渡,自动补间简单动画,点击触发移动​​⭐⭐⭐⭐⭐关键帧动画,强大灵活复杂动画、循环、序列​​⭐⭐⭐⭐⭐手动控制每一帧,性能最优需要精细控制动画逻辑​​6. CSS + JS 类切换(推荐组合)​​⭐⭐⭐⭐⭐通过 JS 添加 class 触发 CSS 动画业务逻辑与样式分离,易维护​​3. JS + setInterval + left(老方法)​​⭐老式动画,性能差不推荐,仅作了解​​⭐⭐。

2025-10-12 14:32:47 736

原创 深浅拷贝具体使用场景

深拷贝的核心是递归复制对象的所有层级属性,但如果对象存在循环引用(如obj.self = obj),递归会无限访问同一对象,最终导致栈溢出。WeakMap的作用是​​缓存已拷贝的对象​​:首次遇到某对象时,将其存入WeakMap(键为原对象,值为克隆对象);相比之下,若使用Map或普通对象缓存,键对象会被强引用,即使原始对象不再使用,缓存也不会被释放,导致内存泄漏。​​与普通对象的区别​​:普通对象的键只能是字符串或Symbol,无法直接以对象为键;​​与数组的区别​​:数组需要手动遍历查找缓存,效率低;

2025-10-11 19:49:56 357

原创 cdn原理

CDN(内容分发网络)是一组分布在全球各地的边缘服务器,它通过智能 DNS 调度,让用户从离自己最近的 CDN 节点获取内容。其基本原理是:当用户发起请求时,请求首先被路由到 CDN 边缘节点,​**​如果 CDN 节点已经缓存了该内容(如静态资源),就会直接返回,速度非常快;如果没有缓存,CDN 节点会向源站拉取内容,缓存下来后再返回给用户,同时后续请求就可以直接命中缓存。​​比如访问,这个域名通常会通过 ​​ 解析到 CDN 服务商提供的地址。​​CDN 的 ​​ 会根据用户的 ​。

2025-10-11 16:27:37 1151

原创 npm相关知识

​​当项目直接或间接依赖了同一个包(比如 lodash、react、axios)的多个不兼容的版本时,就产生了依赖版本冲突。​​npm 会尝试解决这些依赖,生成一个树,但​​有时无法完美解决,就会导致某些包拿到错误的版本,进而运行异常。​​。

2025-10-09 21:20:42 514

原创 关于for循环的使用

方案是否推荐原理适用环境✅ ​​使用let​​✅✅✅ 推荐每次循环创建一个新的块级作用域变量 i,每个事件函数捕获自己那次的 i现代 JavaScript(ES6+),最简洁、最安全✅ ​​使用 IIFE(立即执行函数)​​✅ 可用,但较旧每次循环通过函数作用域隔离 i 的值,传入参数保存当前索引ES5 环境,老代码兼容❌ ​​继续使用 var(不修复)​​❌ 不推荐所有事件函数共享同一个 i,最终值为循环结束后的值会导致 bug,不要用在异步/事件中。

2025-10-09 16:57:54 700

原创 Js本地存储的方式

方式容量持久性是否自动发到服务器数据类型特点适合场景​​Cookie​​~4KB可设置过期✅ 是(每次请求携带)字符串可设置 Domain/Path,支持 HttpOnly/Secure身份验证、用户跟踪​​~5~10MB永久(手动删)❌ 否字符串同源共享,长期保存用户偏好、缓存配置​​~5~10MB标签页级(关闭即删)❌ 否字符串仅当前标签页可用当前页面临时数据​​很大(几十MB+)永久❌ 否对象/二进制/结构化异步、支持事务/索引/查询。

2025-10-09 16:15:24 890

原创 bind,apply,call

方法何时使用是否立即执行参数形式主要场景​​call​​你想​​立即调用函数​​,并​​明确 this 指向​​,且参数是​​逐个传递​​的✅ 立即执行借用方法、明确 this 和少量参数​​apply​​你想​​立即调用函数​​,并​​明确 this 指向​​,但参数是​​数组形式​​✅ 立即执行参数是数组、动态参数、数学函数​​bind​​你​​不想立即调用函数​​,而是​​先绑定 this(和/或部分参数),生成新函数供后续调用​​❌ 不立即执行,返回新函数。

2025-10-08 19:35:51 830

原创 css动画

0% {100% {名称作用用法关键词是否需要触发是否复杂​​让某个样式属性变化时平滑过渡用在 hover / 点击后,如颜色、宽度变化✅ 需要触发❌ 简单过渡​​对元素进行视觉变形(旋转/缩放/移动/倾斜)用作视觉效果,不改变布局❌ 可自动生效❌ 几何变换​​是 transform 的一部分,表示移动(位移)如 translateX(), translateY()视情况✅ 移动元素​​实现复杂动画(可包含多个状态、循环、控制)

2025-10-06 15:53:18 610

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除