首页 文章 精选 留言 我的

文章列表

共 222610 篇
JavaScript 中 async/await 与 forEach 搭配使用时的常见陷阱与正确做法

JavaScript 中 async/await 与 forEach 搭配使用时的常见陷阱与正确做法

在维护一个后台管理系统的数据导出功能时,我遇到了一个诡异的问题:前端发起导出请求后,接口返回的 Excel 文件总是只有部分数据。排查后发现,代码在 Array.prototype.forEach 中使用了 async/await 来逐条请求数据,但 forEach 不会等待异步回调完成,导致请求在循环结束后才陆续发出,而后续的打包逻辑已经执行了。这个问题在...

CSS :has() 选择器实战:不用 JS 实现父元素响应子元素状态

CSS :has() 选择器实战:不用 JS 实现父元素响应子元素状态

做后台表单时经常遇到这种需求:输入框获得焦点或者校验失败时,外层包裹容器要变色、出现边框或提示。以前的做法一般是监听 focus/blur 或配合校验库在父级上切换 class,逻辑散落在 JS 里,组件多了之后状态同步容易漏。CSS 的 :has() 选择器在主流浏览器稳定支持之后,这类"父元素根据子元素状态变化"的场景可以直接用样式表解决,不用再往 DO...

CSS 容器查询实战:让组件根据父级宽度自适应

CSS 容器查询实战:让组件根据父级宽度自适应

媒体查询一直是我们做响应式布局的主要手段,但它只能基于视口宽度做判断。当页面中出现侧边栏折叠、卡片容器宽度变化这类场景时,组件拿不到自己所在容器的实际尺寸,只能靠 JS 去测量,或者用一堆额外的类名硬编码。CSS 容器查询(Container Queries)解决的就是这个问题:先声明一个元素为容器,再让内部子元素根据容器的宽度、高度或方向来应用样式。这一特...

React useEffect 中清理函数的真实执行时机:一个被忽略的闭包陷阱

React useEffect 中清理函数的真实执行时机:一个被忽略的闭包陷阱

最近在排查一个线上问题时,发现一个组件的定时器在卸载后仍然在跑,导致内存泄漏和额外的请求。代码看起来很正常:useEffect 里启动了 setInterval,返回了 clearInterval。但问题出在依赖数组上——依赖项变化时,清理函数确实执行了,可是它清理的是旧闭包里的定时器 ID,而新一次 effect 又创建了新的定时器。更隐蔽的是,当组件快速...

TypeScript 中的 satisfies 操作符解决了什么问题?从类型标注到类型收窄的实践

TypeScript 中的 satisfies 操作符解决了什么问题?从类型标注到类型收窄的实践

在 TypeScript 4.9 之前,我们经常在类型安全和类型推断之间二选一:要么给变量加显式类型注解,结果丢失了字面量推断和精确的属性类型,要么完全依赖推断,结果又拿不到类型检查。比如一个配置对象,你希望它的某些字段只能是固定的几个字符串,但同时又想让 TypeScript 推断出每个字段的具体字面量类型,方便在后面做条件分支时收窄。satisfies ...

CSS scroll-driven animations:用滚动进度替代JS监听,减少卡顿

CSS scroll-driven animations:用滚动进度替代JS监听,减少卡顿

页面里做滚动驱动的动画,过去基本靠 scroll 事件加 requestAnimationFrame,再手动计算 scrollTop 和目标元素的位置。这种写法在桌面端通常没事,一到移动端或者滚动容器嵌套比较深的时候,掉帧就很明显。原因是 scroll 事件触发频率极高,回调里如果有 getBoundingClientRect() 这类强制同步布局的操作,主...

浏览器中 JS 定时器不准确且后台被节流,如何用 requestAnimationFrame 和 Web Worker 补偿

浏览器中 JS 定时器不准确且后台被节流,如何用 requestAnimationFrame 和 Web Worker 补偿

在开发在线协作白板、实时倒计时、动画播放器或轮询任务时,很多人会发现 setTimeout 和 setInterval 在浏览器里并不准时。页面切到后台、CPU 繁忙、或者显示器刷新率变化时,定时器回调可能延迟几百毫秒甚至更久。这不是 bug,而是浏览器为了省电和减少后台消耗做的主动限制。另外,setInterval 每次回调之间的间隔并不等于你设定的毫秒数...

计算机底层颠覆性创新

计算机底层颠覆性创新

反正情况就是这么个情况。 重新定义符号系统的默认值。 83F801=83F855 中文母表词条:808条。其中:并发。(并+发的中文二进制机器码)查表直出。 借用了linux的逻辑。架构,算法。思维。 没抄字节。 物理事实是X86的计算机。 虚拟机和物理机双跑通。物理机有时钟跳动,键鼠协作。 现有已知所有驱动硬件,系统生态。(有规划百分百兼容方案,需要调试测...

Vue 3 中 watch 和 watchEffect 的依赖收集差异:一次线上内存泄漏的排查记录

Vue 3 中 watch 和 watchEffect 的依赖收集差异:一次线上内存泄漏的排查记录

上个月我们后台管理系统的一个数据看板页面,在用户频繁切换筛选条件后,浏览器内存占用从 80MB 一路涨到 600MB 以上,页面明显卡顿,甚至偶发崩溃。这个页面用了 Vue 3 的 watch 监听筛选条件变化去请求接口,但代码里有一个容易被忽略的写法:在 watch 回调里又创建了一个 watchEffect。排查后发现,问题出在两套响应式 API 对依赖...

用 AbortController 取消重复的 fetch 请求:从搜索框到路由切换的完整实践

用 AbortController 取消重复的 fetch 请求:从搜索框到路由切换的完整实践

在开发后台管理系统或带实时搜索功能的页面时,重复请求是个很容易被忽略的问题。比如用户在搜索框里连续输入“vue”,每次键盘弹起都触发一次 fetch,如果网络稍微慢一点,后发的请求可能先返回,最终页面上显示的是“v”对应的旧结果。同样,在单页应用里快速切换路由,组件已经卸载,但之前发起的请求还在飞,回调里试图 setState 或操作 DOM,控制台就会报错...

在前端项目中定期清理 localStorage:一个容易被忽视的过期策略

在前端项目中定期清理 localStorage:一个容易被忽视的过期策略

做后台系统时经常把一些不敏感的状态塞进 localStorage,比如展开的菜单、表格列宽、临时筛选条件。时间一长,这些键值越积越多,用户换了设备或者需求变更后,旧数据反而成了脏数据来源。更麻烦的是,有些缓存其实带有时间语义,比如接口返回的城市列表,超过一天就应该失效重新拉取,但 localStorage 本身没有过期机制。手动在每次读取时写 if (Dat...

一次由 AbortController 引发的 unhandledrejection 排查记录

一次由 AbortController 引发的 unhandledrejection 排查记录

前端项目里用 fetch 做请求取消的场景越来越常见,尤其是搜索框输入防抖、路由切换或者组件卸载的时候,如果不把进行中的请求取消掉,轻则状态错乱,重则控制台一直往外抛 unhandledrejection。前阵子我在一个后台项目里就碰到了这么个事:用户快速切换标签页,每个标签页初始化时都会发一次列表请求,网络慢的时候切换五六次,控制台就会冒出 AbortEr...

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册