90% 前端都不知道的 20 个「零依赖」浏览器原生能力!

分享 202025 年依旧「少人知道、却能立竿见影」的原生 API

收藏 = 省下一个工具库 + 少写 100 行代码!

1. ResizeObserver

精准监听任意 DOM 宽高变化,图表自适应、虚拟滚动必备。

js 复制代码
new ResizeObserver(([e]) => chart.resize(e.contentRect.width))
  .observe(chartDom);

2. IntersectionObserver

检测元素进出视口,一次搞定懒加载 + 曝光埋点,性能零损耗。

js 复制代码
new IntersectionObserver(entrieList =>
  entrieList.forEach(e => e.isIntersecting && loadImg(e.target))
).observe(img);

3. Page Visibility

侦测标签页隐藏,自动暂停视频、停止轮询,移动端省电神器。

js 复制代码
document.addEventListener('visibilitychange', () =>
  document.hidden ? video.pause() : video.play()
);

4. Web Share

一键唤起系统分享面板,直达微信、微博、Telegram,需 HTTPS

js 复制代码
navigator.share?.({ title: '好文', url: location.href });

5. Wake Lock

锁定屏幕常亮,直播、PPT、阅读器不再自动息屏。

js 复制代码
await navigator.wakeLock.request('screen');

6. Broadcast Channel

同域标签实时广播消息,登录态秒同步,告别 localStorage 轮询。

js 复制代码
const bc = new BroadcastChannel('auth');
bc.onmessage = () => location.reload();

7. PerformanceObserver

无侵入采集 FCPLCPFID,一行代码完成前端性能监控。

js 复制代码
new PerformanceObserver(list =>
  list.getEntries().forEach(sendMetric)
).observe({ type: 'largest-contentful-paint', buffered: true });

8. requestIdleCallback

埋点日志丢进浏览器空闲时间,首帧零阻塞。

js 复制代码
requestIdleCallback(() => sendBeacon('/log', data));

9. scheduler.postTask

原生优先级任务队列,低优任务后台跑,主线程丝滑。

js 复制代码
scheduler.postTask(() => sendBeacon('/log', data), { priority: 'background' });

10. AbortController

随时取消 fetch,路由切换不再旧请求竞态,兼容 100%

js 复制代码
const ac = new AbortController();
fetch(url, { signal: ac.signal });
ac.abort();

11. ReadableStream

分段读取响应流,边下载边渲染,大文件内存零爆涨。

js 复制代码
const reader = response.body.getReader();
while (true) {
  const { done, value } = await reader.read();
  if (done) break;
  appendChunk(value);
}

12. WritableStream

逐块写入磁盘或网络,实时保存草稿、上传大文件更稳。

js 复制代码
const writer = stream.writable.getWriter();
await writer.write(chunk);

13. Background Fetch

PWA 后台静默下载,断网恢复继续,课程视频提前缓存。

js 复制代码
await registration.backgroundFetch.fetch('video', ['/course.mp4']);

14. File System Access

读写本地真实文件,需用户授权,Web IDE 即开即用。

js 复制代码
const [fh] = await showOpenFilePicker();
editor.value = await (await fh.getFile()).text();

15. Clipboard

异步读写剪贴板,无需第三方库,HTTPS 环境安全复制。

js 复制代码
await navigator.clipboard.writeText('邀请码 9527');

16. URLSearchParams

解析、修改、构造 URL 查询串,告别手写正则。

js 复制代码
const p = new URLSearchParams(location.search);
p.set('page', 2);
history.replaceState({}, '', `?${p}`);

17. structuredClone

深拷贝对象、数组、Map、Date,循环引用也能完美复制。

js 复制代码
const copy = structuredClone(state);

18. Intl.NumberFormat

千分位货币百分比一次格式化,国际化零配置。

js 复制代码
new Intl.NumberFormat('zh-CN', { style: 'currency', currency: 'CNY' })
  .format(1234567); // ¥1,234,567.00

19. EyeDropper

浏览器级吸管工具,像素级取色,设计系统直接调用。

js 复制代码
const { sRGBHex } = await new EyeDropper().open();

20. WebCodecs

原生硬解码音视频,4K 60 帧流畅播放,CPU 占用直降。

js 复制代码
const decoder = new VideoDecoder({
  output: frame => ctx.drawImage(frame, 0, 0),
  error: console.error
});
decoder.configure({ codec: 'vp09.00.10.08' });
相关推荐
前端老石人3 分钟前
HTML 字符引用完全指南
开发语言·前端·html
matlab_xiaowang18 分钟前
Redux 入门:JavaScript 可预测状态管理库
开发语言·javascript·其他·ecmascript
幼儿园技术家28 分钟前
前端如何设计权限系统(RBAC / ABAC)?
前端
前端摸鱼匠2 小时前
Vue 3 的v-bind合并行为:讲解v-bind与普通属性合并的规则
前端·javascript·vue.js·前端框架·ecmascript
REDcker2 小时前
浏览器端Web程序性能分析与优化实战 DevTools指标与工程清单
开发语言·前端·javascript·vue·ecmascript·php·js
donecoding4 小时前
一个 sudo 引发的血案:npm 全局包权限错乱彻底修复
前端·node.js·前端工程化
风骏时光牛马4 小时前
Raku正则匹配与数据批量处理实操案例
前端
nbwenren4 小时前
2026实测:Gemini 3 镜像站视觉能力实践——拍照原型图,一键生成 HTML+CSS 代码
前端·css·html
Lee川4 小时前
Prisma 实战指南:像搭积木一样设计古诗词数据库
前端·数据库·后端
Linsk4 小时前
Java和JavaScript的关系真是雷峰和雷峰塔的关系吗?
java·javascript·oracle