自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Promise 模拟实现

promise模拟实现

2025-09-26 11:15:19 145

原创 密集型程序

密集型程序

2025-08-17 10:16:27 593

原创 本地服务器访问你的项目,会有这个 CORS 报错了

你遇到的这个 CORS(跨域)错误,是因为你直接用浏览器打开本地的 HTML 文件(协议),而不是通过本地服务器访问。浏览器出于安全考虑,禁止模块脚本在本地文件协议下加载。

2025-07-19 10:25:41 493

原创 使用延迟加载(defer)

但可能一开始渲染的组件太多,不仅js执行时间过长,而且执行完后浏览器要渲染的元素过多,从而导致页面白屏。延迟装载的思路就,本质上是利用requestAnimationFrame事件分批渲染内容。一个可行的办法就是装载组件,让组件按照指定的先后顺序依次一个一个渲染出来。js传输完成后,浏览器开始执行js构造页面。

2025-07-13 00:07:12 108

原创 事件循环(之进阶)

如果让渲染主线程等待这些任务的时机到达,就会导致主线程长期处于 【阻塞】状态,从而导致浏览器【卡死】。所以浏览器选择异步来解决这个问题。使用异步的方式,渲染主线程永不阻塞。

2025-06-29 23:15:16 222

原创 JS 中的计时器能做到精准计时吗?为什么?

按照 W3C 的标准,浏览器实现计时器时,如果嵌套层级超过 5 层,则会由 4 ms的最少时间差,这样在计算时时间少于 4 ms时又带来的偏差。操作系统的计时函数本身就有少量偏差,由于 JS 的计时器最终是调用操作系统的函数,也就会携带者这些偏差。受事件循环的影响,计数器的回调函数只能在主线程空闲时运行,因此这样也带来了偏差。计算机硬件没有原子钟,无法做到精准计时。

2025-06-29 23:00:41 155

原创 阐述下 JS 的事件循环

根据 W3C 官方解释,每个任务都有不同的类型,同类型的任务必须在同一队列,不同的任务属于不同的队列。不同的任务有不同的优先级,在一次事件循环中,由浏览器自行决定取哪一个队列的任务。在 Chorme 的源码中,它开启一个不会结束的 for 循环,每次循环会从消息队列中取出第一个任务执行,而其它线程只需要在合适的时候将任务队列末尾即可。过去把消息队列分成宏队列和微队列,这种说法目前已无法满足复杂的浏览器环境,取而代之的是一种更加灵活多变的处理方式。事件循环又叫消息循环,是浏览器渲染主线程的工作方式。

2025-06-29 22:14:20 244

原创 前端页面绘制

理解这些线程模型可以帮助开发者编写更高性能的前端代码,特别是对于复杂动画和数据可视化等场景。JavaScript → 样式计算 → 布局 → 绘制(生成绘制指令)只改变图层叠加方式时触发(如 transform/opacity)绘制指令 → 光栅化线程 → 合成线程 → 屏幕显示。执行 JavaScript 代码(包括框架代码)长时间运行的 JS 会阻塞渲染("卡顿"的主因)当几何属性(宽/高/位置等)变化时触发。当非几何样式(颜色/背景等)变化时触发。布局(Layout/Reflow)

2025-06-28 17:20:33 984

原创 如何理解JS的异步

具体做法是当某个任务发生时,比如计时器,网络,事件监听。主线程把任务交给其他线程去处理,自身立即结束当前的任务。当其他线程完成时,会将事先传递的回调函数包装成任务,加入消息队列的末尾排队。如果使用同步的方式,就急有可能导致主线程阻塞,从而导致消息队列中很多其他任务无法执行。JS时一门单线程语言,这是因为它运行在浏览器的渲染主线程中,而渲染主线程只有一个。在这种异步模式下,浏览器永远不会阻塞,从而最大限度的保证了单线程的运行流畅。而JS的渲染主线程承担着许多工作,渲染页面,执行JS都在其中运行。

2025-06-28 15:52:23 222

原创 事件循环(之基础)

有了进程后,就可以运行程序的代码了。运行代码的地方称之为线程。一个进程至少有一个线程,所以在进程开启后会自动创建一个线程来运行代码,该线程称之为主线程。如果程序需要同时执行多块代码,主线程就会启动更多的线程来执行代码,所以一个进程中可以包含多个线程。同一个进程中的多个线程是共享同一块内存空间的。

2025-06-28 15:06:58 290

原创 为什么要用虚拟DOM?

数据1

2025-06-27 23:52:56 699

原创 模块导入之 require.context

require.context 是 Webpack 提供的一个高级功能,用于在构建时 动态批量导入模块(如组件、图片、JSON 文件等)。它通过 正则匹配 文件路径,生成一个上下文模块,适合处理 自动化注册组件、动态路由、多语言文件加载 等场景。

2025-06-25 15:27:03 1827

原创 模块导入之 import.meta.glob

import.meta.glob 是 Vite 提供的一个强大的 模块动态导入 功能,用于在构建时 批量导入模块(如 Vue 文件、图片、JSON 等),并生成 按需加载 的代码。它特别适合处理 动态路由、多语言文件、组件自动化注册 等场景。

2025-06-25 15:03:26 1594

原创 js(javaScript)脚本加载

特性没有属性asyncdefer下载是否阻塞 HTML 解析是否否执行是否阻塞 HTML 解析是是(下载完立即执行)否(HTML 解析完才执行)执行时机HTML 解析到脚本时立即执行下载完成后立即执行HTML 全部解析完成后执行(DOMContentLoaded 前)执行顺序按文档顺序不确定(下载完就执行)按文档顺序适用场景依赖 DOM 或其他脚本、需要顺序执行的脚本独立脚本、不依赖 DOM 或其他脚本依赖 DOM 或其他脚本、需要顺序执行的脚本。

2025-06-25 11:06:15 572

原创 前端页面性能优化办法有哪些

启用Gzip压缩,减小HTML、CSS、JavaScript等文本文件的大小。:对非关键资源(如图片、视频)使用懒加载,仅在用户滚动到可视区域时加载。:将小的CSS或JavaScript直接嵌入HTML中,减少外部请求。:将多个CSS或JavaScript文件合并为一个,减少请求次数。:去除CSS、JavaScript中的空格、注释等,减小文件体积。:通过CDN分发静态资源,减少用户与服务器的距离,加快加载速度。:优先使用CSS动画而非JavaScript动画,提升性能。

2025-06-20 09:59:45 422 1

空空如也

空空如也

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

TA关注的人

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