惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
The Cloudflare Blog
IT之家
IT之家
V
V2EX
雷峰网
雷峰网
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
Stack Overflow Blog
Stack Overflow Blog
博客园 - Franky
Engineering at Meta
Engineering at Meta
S
SegmentFault 最新的问题
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
小众软件
小众软件
博客园 - 叶小钗
Blog — PlanetScale
Blog — PlanetScale
C
Check Point Blog
A
About on SuperTechFans
B
Blog
月光博客
月光博客
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI

新锐博客

vscode连接cnb并推送仓库 - 新锐博客 twikoo不用token查询文章浏览量 - 新锐博客 基于Astro构建的支持对话与生图的Web应用 - 新锐博客 deepseek-v4-flash-0731使用体验 - 新锐博客 基元律动免费送68元额度 - 新锐博客 Linux更换软件源 - 新锐博客 华为鸿蒙7.0花粉beta版发布 - 新锐博客 使用测速脚本测一下服务器带宽 - 新锐博客 trae告别白嫖时代,auto也需排队了 - 新锐博客 流量不够用?大流量卡免费领 - 新锐博客 推荐一个免费在线图片处理网站 - 新锐博客 AI清理C盘的优缺点 - 新锐博客 twikoo不算bug的bug - 新锐博客 最近网站的一些变动 - 新锐博客 腾讯EO开始发多余套餐啦!速领 - 新锐博客 hi168停止对个人用户的运营 - 新锐博客 哪吒监控曝高危漏洞,请尽快升级 - 新锐博客 IndexDB实现大文件下载的思路 - 新锐博客 鱼鱼api使用教程 - 新锐博客 服务器安装Dokploy替代vercel - 新锐博客 对于近几年的电视剧的无力吐槽 - 新锐博客 关于网站被攻击的后续 - 新锐博客 修复了一些bug,网站基本上趋于稳定了 - 新锐博客 AI模型掺水?如何辨别真假? - 新锐博客 感谢一九云给我防住了攻击 - 新锐博客 对一些新手使用AI编程的建议 - 新锐博客 Edgeone标记过期和直接删除有何区别? - 新锐博客 用Navigation Timing API给博客添加上加载时间 - 新锐博客 使用 Astro 自建博客,从零开始鏖战 14 小时 - 新锐博客 网站收录急剧下降,趁此机会迁移站点 - 新锐博客
使用sessionStorage给音乐播放进度存储 - 新锐博客
莫忘 · 2026-06-01 · via 新锐博客

前言

上次在弄solitude主题的CMD打字机效果时,用了 localStorage 来持久化存储打字进度。现在给新网站加音乐播放器模块时,也需要存播放进度——当前播到第几首、播到几分几秒、音量大小等。

但这次我没有用 localStorage,而是选了 sessionStorage。为什么?这篇文章就来对比一下两者的区别,以及在实际项目中的选择。

回顾 localStorage

在前一篇文章《使用浏览器的localStorage功能存储数据》中,我详细介绍了 localStorage 的用法。简单回顾一下核心特点:

  • 持久化存储:数据没有过期时间,关闭浏览器后重新打开,数据依然存在
  • 跨标签页共享:同源下所有标签页都能读写同一份数据
  • 容量较大:一般支持 5-10MB
  • 手动清理:数据不会自动消失,需要手动调用 removeItemclear

CMD 打字机效果用了 localStorage 是合理的,因为用户下一次打开网站时,应该从上次的进度继续打字,而不是从头开始。

sessionStoragelocalStorage 同属 Web Storage API,API 几乎一模一样:

// 存储
sessionStorage.setItem('key', 'value');
// 读取
sessionStorage.getItem('key');
// 删除
sessionStorage.removeItem('key');
// 清空
sessionStorage.clear();

但它有一个关键区别:数据只在当前浏览器会话期间有效。一旦关闭标签页或浏览器窗口,数据就会被清除。

sessionStorage 的核心特点

特性sessionStoragelocalStorage
生命周期关闭标签页即清除永久保留
跨标签页共享❌ 每个标签页独立✅ 同源共享
存储容量~5MB~5-10MB
页面刷新✅ 数据保留✅ 数据保留
前进/后退✅ 数据保留✅ 数据保留
Ctrl+N 新窗口❌ 数据不共享✅ 数据共享

注意:sessionStorage 在页面刷新(F5)和前进后退时数据不会丢失,但复制标签页(Duplicate Tab)或 Ctrl+N 打开新窗口时会创建新的会话。

为什么音乐进度用 sessionStorage 而不是 localStorage?

这是一个关键的选型决策,有以下几个理由:

1. 生命周期更合适

用户关闭标签页后,音乐播放进度就”过期”了——下次打开网站时,大概率不是想要从上次的歌单第 3 首继续播。用 sessionStorage,关闭标签页就自动清理,干净利落。

而 CMD 打字效果不一样,那个进度需要”永久记忆”,所以用 localStorage

2. 避免跨标签页冲突

localStorage 的数据在同源的所有标签页间共享。如果用户打开了两个网站标签页,两个页面都往同一个 Key 写播放进度,就会互相覆盖,导致混乱。

sessionStorage 每个标签页独立存储,互不干扰。用户可以在两个标签页分别播放不同的歌曲,进度各自管理。

3. 刷新页面时保留体验

这是 sessionStorage 相对普通变量的优势:用户按 F5 刷新页面后,播放进度不会丢失,可以无缝继续。

4. 自动清理,不占空间

sessionStorage 关闭标签页自动清除,不需要手动管理清理逻辑。localStorage 如果不做清理,日积月累会占满配额。

两种存储的选型总结

场景推荐方案原因
主题/语言偏好localStorage需要持久记忆用户偏好
CMD 打字进度localStorage下次打开要继续
音乐播放进度sessionStorage会话级别即可,避免跨标签页冲突
表单草稿保存localStorage防止意外关闭丢失
视频/音频当前时间sessionStorage会话级,刷新不丢失
API 数据缓存localStorage减少请求,长期有效
临时 UI 状态(如弹窗是否显示过)sessionStorage本次会话记录即可
登录 Token都不合适httpOnly Cookie 更安全

小结

sessionStoragelocalStorage 用起来几乎一样,区别仅在于生命周期和跨标签页共享策略。选型的关键是问自己两个问题:

  1. 下次打开浏览器还需要这数据吗? 需要 → localStorage,不需要 → sessionStorage
  2. 多个标签页需要共享这数据吗? 需要 → localStorage,不应该共享 → sessionStorage

音乐播放进度两个问题都是需要,所以 sessionStorage 是最佳选择。CMD 打字机效果的进度两项都是肯定,所以选了 localStorage

莫忘

君子喻以义,小人喻以利

本文是原创文章,采用 CC BY-NC-SA 4.0 协议,完整转载请注明来自 新锐博客