console.time()和console.timeEnd()是浏览器原生毫秒级计时工具,需标签名严格一致、避免环境干扰、注意执行时机;支持多计时器并行与合法嵌套,但不包含渲染流水线耗时。

console.time() 和 console.timeEnd() 是浏览器原生支持的轻量级计时工具,不需要引入任何库,直接在 HTML 的 <script> 中调用就能看到毫秒级耗时。但用错标签、忽略执行环境或误判渲染时机,很容易测出“假时间”。
标签名必须严格一致才能正确计时
不传 label 时默认使用 "default",但多个计时器混用会互相干扰;传了 label 却大小写/空格/引号不匹配,console.timeEnd() 就找不到对应计时器,输出 default: 0.000ms 或直接报错(部分旧版 Safari)。
-
console.time("init")必须配对console.timeEnd("init"),不能是"Init"、" init "或'init'(单双引号不影响,但字符串内容必须完全相同) - 同一页面可同时运行多个独立计时器:
console.time("render")和console.time("fetch")互不干扰 - 嵌套使用合法:
console.time("outer")→console.time("inner")→console.timeEnd("inner")→console.timeEnd("outer")
HTML 中 script 执行时机影响测量结果
把 console.time() 放在 <script> 开头,不代表它测的是“从页面加载开始”的时间——它只测 JS 引擎执行那段代码块的 V8 运行时,不含 HTML 解析、CSS 计算、Layout、Paint 等渲染流水线耗时。
- 想测 DOM 构建+渲染总耗时?得用
setTimeout(() => { console.log('total:', Date.now() - start); }, 0)拖到下一帧末尾 - 仅测 JS 循环或计算逻辑?直接包住目标代码即可,比如:
console.time("loop"); for (let i = 0; i - 在
window.onload或DOMContentLoaded回调里启动计时,能排除资源加载干扰
生产环境别留着,也别指望它替代专业性能分析
这两个方法精度足够日常对比(如 for vs forEach),但存在明显局限:
立即学习“前端免费学习笔记(深入)”;
- Node.js 和所有现代浏览器都支持,但 IE9 及更早版本不支持(需兜底:
if (console.time) { ... }) - 多次调用
console.timeEnd()同一个 label 会重复输出,且第二次起显示的是累计时间,不是单次 - 无法区分 CPU 时间和挂起时间(比如
await fetch()期间计时器仍在走,但实际没占 CPU) - 上线前务必删除或用构建工具自动剔除,避免污染用户控制台或泄露内部逻辑
真正卡顿的地方,往往不在你手动加 time() 的那几行——DOM 操作批量触发重排、长任务阻塞主线程、内存泄漏导致 GC 频繁,这些靠它发现不了。它只是个起点,不是终点。



















