练习数据如何不丢失?IELTS Atlas 雅思练习系统的 IndexedDB 多层存储与仓储模式详解
【免费下载链接】IELTS-practice雅思阅读与听力练习系统支持题库浏览、套题练习、成绩记录、错题分析、数据备份与本地题库导入。项目地址https://gitcode.com/gh_mirrors/ie/IELTS-practice点击查看免费下载IELTS AtlasIELTS-practice是一个纯前端的雅思阅读与听力练习系统数据默认保存在浏览器本地存储中。它用 IndexedDB 做主力仓库、localStorage 做镜像备份再通过一套仓储模式把读写装进标准管道确保你每一次刷完的分数、错题与学习时长都能稳稳留存在浏览器里。如果你每天用浏览器刷题心里难免打过这个念头今天练的 50 道题和分数关掉网页还在吗 对 IELTS Atlas 这种没有服务器、不上传云端的练习系统来说练习数据不丢失完全依赖浏览器本地存储的可靠性。下面用尽量少的代码带你看懂它是怎么做到多层兜底、自动备份、换设备也能找回的。一、为什么雅思练习记录会悄悄丢失先说清楚风险在哪。雅思练习系统每次提交答案后会生成一条练习记录包含题号、得分、正确率、用时、对错明细等。这些数据如果只是随手写进一个地方很容易出三种事故容量撞墙浏览器最常用的小仓库localStorage只有约 5MB题库稍大就写不进去模式误伤隐私窗口或某些浏览器会把本地存储当易碎品一关就清空结构漂移不同版本存的数据格式不一样升级后老记录读不出来。上面这张图正是系统题库里的一道阅读配图题。你答完它的每一空后台都会落一条带分数与对错明细的练习记录——本文讲的存储设计保护的就是这类记录。好消息是IELTS Atlas 没有把鸡蛋放在一个篮子里。它把往哪存、存多少、存坏了怎么办拆成了四层后端 一层仓储管道一层失效就自动滑到下一层从机制上把数据丢失的概率压到很低。二、四层存储后端IndexedDB 挑大梁系统的存储核心是一个叫StorageManager的管理器见 js/utils/storage.js。它把浏览器里可用的四种本地存储排成一个优先级梯队写入时从上往下逐个尝试读取时按从快到慢的顺序回查层级后端大致容量角色定位第 1 层IndexedDB库名ExamSystemDB表keyValueStore100MB 起步主力仓库长期保存第 2 层localStorage约 5MB镜像 / 快速回退第 3 层sessionStorage会话级、临时易碎数据的过渡第 4 层内存 MapIn-Memory受内存限制最后兜底绝不拒收几个关键点值得记住IndexedDB 是主力库和表在 js/utils/storage.js#L237 与 js/utils/storage.js#L276-L278 初始化容量比 localStorage 大一个数量级适合放完整题库与大量记录。localStorage 做镜像关键数据会双写到两层等于多留一份副本命名空间隔离所有键统一加exam_system_前缀js/utils/storage.js#L23不会跟其他网页应用抢键兜底永不拒收哪怕前几层全挂内存层也会先接住数据并提示用户未持久化而不是直接报错丢数据。这套写时往下回退、读时往上回查的梯队是练习数据不丢失的第一道、也是最关键的一道防线。三、哪些练习数据必须永久保存不是所有数据都值得占用大仓库。系统用一张持久化键清单明确划出哪些记录必须跨越浏览器重启而存活清单定义在 js/utils/storage.js#L35-L47键名代表什么是否必须持久化practice_records全部雅思练习记录分数/错题✅user_stats学习统计、连续学习时长✅manual_backups手动创建的备份快照✅backup_settings/export_history/import_history备份、导入导出历史✅exam_index等题库索引与配置✅settings/learning_goals用户设置与学习目标✅对这张清单里的持久键系统会拒绝把它丢进易碎的 sessionStorage——宁可抛一个明确的无持久存储错误也不把分数悄悄降级到临时区。这种要么存稳、要么明说的策略比假装存上了更能保护你的练习数据。四、仓储模式把数据访问装进标准管道多层后端解决了往哪存但还有一个隐患并发写入。你快速提交多道题时如果几条记录同时写同一个键后写的可能覆盖先写的分数就错了。为此IELTS Atlas 在业务逻辑和底层存储之间加了一层仓储模式Repository Pattern让所有读写都走同一条受控管道。这层由三块组成StorageDataSource给写入操作排一条串行队列保证一条写完了才执行下一条杜绝写覆盖js/data/dataSources/storageDataSource.js#L54DataRepositoryRegistry统一的仓储注册表挂在全局window.dataRepositories上js/data/index.js#L30-L151四个专用仓储各自负责一类数据带容量上限。每一道这样的阅读题完成后对应的记录都会经由下方仓储管道安全落盘而不是直接怼向底层存储。仓储负责的数据保护策略PracticeRepository练习记录practice_records记录数上限超限自动整理MetaRepository用户统计、存储版本号等元数据键级校验BackupRepository手动备份快照备份份数上限只保留最近若干份SettingsRepository用户设置读写校验上层组件负责会话的PracticeRecorder、负责记分与校验的ScoreStorage见 js/core/practiceRecorder.js 与 js/core/scoreStorage.js不直接碰底层存储而是通过这套仓储读写。好处是记分前先做格式标准化、必填字段校验、按会话去重脏数据进不了仓库从源头保证存下来的每条记录都是干净可信的。五、自动备份与导入最后一道保险本地存储再稳也可能遇到清缓存、换电脑、浏览器升级等天灾。所以系统再叠了三层保险写入前的预备份当你导入外部数据时系统会先用 js/utils/dataBackupManager.js#L685 拍一张当前状态快照万一导入出错可一键回滚一键导出支持把全部练习记录、统计、备份打包成 JSON 或 CSV 文件手动存到 U 盘或网盘js/utils/dataBackupManager.js#L182实现跨设备迁移智能导入合并导入时按记录 ID 去重、按时间戳保留较新的一条js/utils/dataBackupManager.js#L318不会把同一道题重复计入。配合系统每 5 分钟一次的存储健康巡检容量超阈值会自动压缩旧记录、清理过期日志这套多层后端 仓储管道 自动备份的组合拳让练习数据不丢失从一句口号变成可验证的机制。六、给使用者的实用建议平时无需操心系统会自动分层存储与巡检换电脑 / 重装前主动点一次导出数据把 JSON 备份文件收好到新设备再导入即可隐私窗口慎用隐私模式下本地存储可能随时清空重要练习请在普通窗口进行想看懂更多细节可查阅项目自带的 Wiki 文档见文末链接里面有完整的读写流程图与初始化时序图。相关文件与延伸阅读存储核心多层后端js/utils/storage.js仓储层与注册表js/data/index.js、js/data/dataSources/storageDataSource.js各专用仓储js/data/repositories/备份 / 导入 / 导出js/utils/dataBackupManager.js会话与记分js/core/practiceRecorder.js、js/core/scoreStorage.js官方架构文档多层存储架构Storage-Architecture--Multi-Backend-System.md仓储与事务Data-Repositories--Transactions.md备份与导入导出Data-Backup,-Import--Export.md赞分享【免费下载链接】IELTS-practice雅思阅读与听力练习系统支持题库浏览、套题练习、成绩记录、错题分析、数据备份与本地题库导入。项目地址https://gitcode.com/gh_mirrors/ie/IELTS-practice点击查看免费下载相关推荐雅思刷题如何快速上手纯前端练习系统 IELTS Atlas 新手完全指南雅思刷题如何快速上手纯前端练习系统 IELTS Atlas 新手完全指南 IELTS Atlas又名 IELTS practice是一款面向雅思阅读与听力雅思刷题状态一眼看懂IELTS Atlas 练习记录统计中趋势图与热力图实操指南雅思刷题状态一眼看懂IELTS Atlas 练习记录统计中趋势图与热力图实操指南 IELTS Atlas 是一个免费的雅思阅读与听力练习系统支持题库浏览、套NomNom未来路线图即将到来的8大功能让你的星际冒险更精彩NomNom未来路线图即将到来的8大功能让你的星际冒险更精彩 NomNom作为最完整的《无人深空》存档编辑器不仅能帮助玩家轻松修改游戏数据还能提供丰富的创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

零基础网络实操指南:从插网线到抓包排障

零基础网络实操指南:从插网线到抓包排障

1. 这不是教科书里的“计算机网络”,而是你第一次真正摸到网线时该懂的事“计算机网络初探”这六个字,听起来像大学第一堂课的PPT标题,也像某本厚得能当板砖用的教材封面。但如果你刚拆开路由器包装、第一次把网线插进笔记本RJ45口时手抖了一…

2026/10/10 20:37:22 阅读更多 →
主板电池失效的五层系统退化:从RTC漂移到TPM信任链断裂

主板电池失效的五层系统退化:从RTC漂移到TPM信任链断裂

1. 主板电池不是“可有可无”的小零件:它在系统底层扮演着被严重低估的角色很多人第一次听说“主板电池”这个词,是在电脑突然无法开机、时间错乱、BIOS设置丢失之后。它就静静地焊在主板角落,一枚小小的CR2032纽扣电池,直径2厘米…

2026/10/10 20:37:22 阅读更多 →
Visual Studio 预览版 Agent 模式:把 MCP 配置改到 TaoToken 的完整验证

Visual Studio 预览版 Agent 模式:把 MCP 配置改到 TaoToken 的完整验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 20:37:22 阅读更多 →

最新新闻

647回文子串与516最长回文子序列:区间DP两种典型玩法全解析

647回文子串与516最长回文子序列:区间DP两种典型玩法全解析

各位打卡代码随想录的伙计们,第四十五天来了。今天这两道题——647 回文子串、516 最长回文子序列——看起来名字只差两个字,实际上一个是把字符串切成一段段判断"是不是回文",另一个是允许跳跃地凑出"最长回文有多长"。…

2026/10/10 21:19:06 阅读更多 →
用幸运大转盘项目掌握Python循环:for、while与range实战

用幸运大转盘项目掌握Python循环:for、while与range实战

1. 项目拆解:为什么用“幸运大转盘”讲循环在Python入门的教学顺序里,循环永远是绕不过去的坎。很多初学者学完变量、条件判断之后,一到for和while就开始晕:for循环里那个range到底怎么数数?while循环什么时候停&#…

2026/10/10 21:19:06 阅读更多 →
mcp-brasil快速上手指南:2分钟接入Claude/Cursor,免费解锁66个巴西公共数据API

mcp-brasil快速上手指南:2分钟接入Claude/Cursor,免费解锁66个巴西公共数据API

【免费下载链接】mcp-brasil MCP Server para 70 APIs pblicas brasileiras 项目地址: https://gitcode.com/gh_mirrors/mc/mcp-brasil 点击查看 免费下载 mcp-brasil 是一个开源的 MCP Server,一个命令即可把 66 个无需密钥的巴西公共数据 API&#xf…

2026/10/10 21:19:06 阅读更多 →
AI 齐套性专家 | 实战案例成果演示

AI 齐套性专家 | 实战案例成果演示

#玄宿科技#AI齐套性交付#案例分享#自主协同软件#GJB438B#Qt开发#交付文档上一期我们演示了 AI 齐套性交付专家的完整生成过程,但所用案例与真实业务贴合度不够。本期我们换了一个完全贴合业务的方向,重新生成了一整套成果:原型图、可交互程序…

2026/10/10 21:19:06 阅读更多 →
OOOSplat 处理流水线全解:FFmpeg、COLMAP 与 Brush 三大引擎如何协同工作

OOOSplat 处理流水线全解:FFmpeg、COLMAP 与 Brush 三大引擎如何协同工作

桌面应用图形学3D渲染计算机视觉 【免费下载链接】ooosplat A local desktop app that turns videos and images into 3D Gaussian Splats in one click. 项目地址: https://gitcode.com/gh_mirrors/oo/ooosplat 点击查看 免费下载 OOOSplat 是一款把视频和图片序列…

2026/10/10 21:19:06 阅读更多 →
零基础 30 分钟出片:用万相 Animate 把角色设定变成可复用的动画素材

零基础 30 分钟出片:用万相 Animate 把角色设定变成可复用的动画素材

零基础 30 分钟出片:用万相 Animate 把角色设定变成可复用的动画素材 【免费下载链接】Wan2.2-Animate-2-14B 项目地址: https://ai.gitcode.com/hf_mirrors/Wan-AI/Wan2.2-Animate-2-14B 做一条角色动画,过去意味着什么?画角色设定、…

2026/10/10 21:18:06 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →