1. 从COCA20000到DragonEnglish的诞生第一次接触COCA20000单词表时我就被它的科学排序方式吸引了。这个基于语料库统计的高频词表确实比按字母顺序的死记硬背高效得多。但当时找到的资源只有单词和简单释义对语言学习者来说远远不够。于是我开始思考能不能打造一个更完善的单词学习系统说干就干我用了几个周末的时间给每个单词都补充了音标、例句和发音文件。为了便于学习我把20000个单词按每100个一组分割成202个独立文件。这里有个小技巧分组时特意让相邻组的单词有部分重叠这样复习时能自然衔接。实测下来这种滚雪球式的记忆效果特别好。技术实现上我选择了最轻量级的方案 - 直接用Nginx部署静态文件。把整套系统打包成Docker镜像后扔到阿里云服务器上就能跑。有朋友问我为什么不直接用现成的背单词App其实这种自主可控的感觉很不一样想改哪里改哪里比如我可以随时调整单词的排序规则或者给特定单词添加个性化备注。2. 系统架构设计与技术选型2.1 静态化部署方案选择Nginx不是偶然的。对于单词学习这种读多写少的场景静态化部署有三个明显优势首先是响应速度极快用户点击单词能立即显示内容其次是服务器压力小我的1核2G小水管同时服务上百人都没问题最重要的是维护简单直接修改HTML文件就能更新内容。文件目录结构是这样设计的/dragon_english ├── words_group1.html ├── words_group2.html ... ├── audio/ │ ├── abandon.mp3 │ ├── ability.mp3 ... └── assets/ ├── style.css └── script.js每个单词组的HTML文件都包含100个单词的完整学习资料。前端用jQuery实现了个简单的交互逻辑点击单词显示详细信息左右箭头切换单词顶部进度条显示学习进度。虽然现在看有点简陋但这种极简设计反而让学习者更专注。2.2 发音与例句处理发音质量直接影响学习效果。我测试了多个TTS引擎后最终选择了Google的语音合成API。虽然要自己写爬虫抓取音频但发音自然度确实没得说。有个坑要注意不同单词的发音速度差异很大后来我统一用ffmpeg做了标准化处理把每个音频长度控制在2秒左右。例句的选择更有讲究。直接从词典扒例句容易脱离实际语境我的做法是从COCA语料库中抽取真实例句再人工筛选出最典型的用法。比如abandon这个单词教科书例句可能是abandon the ship但语料库显示abandon the idea才是更常用的搭配。3. 个性化学习功能实现3.1 动态难度调整COCA20000原本是按绝对词频排序的但每个人词汇量不同。我在系统中加入了简单的能力测试随机抽取50个不同频段的单词让用户识别10分钟就能测出当前词汇量水平。根据测试结果系统会自动跳过已掌握的单词把学习重点放在临界词汇上。这个功能用localStorage就能实现function estimateLevel() { let knownWords 0; testWords.forEach(word { if (userKnows(word)) knownWords; }); return Math.floor(knownWords / 10) * 1000; }3.2 记忆曲线提醒单纯的单词展示效果有限我参考了艾宾浩斯遗忘曲线给系统加上了智能复习提醒。每次学习后前端会记录下学习时间和单词ID然后通过service worker在合适的时间推送复习通知。虽然不如Anki的算法精细但对培养规律的学习习惯很有帮助。实现的关键代码段function scheduleReview(wordId) { const now new Date(); const intervals [1, 3, 7, 14, 30]; // 间隔天数 intervals.forEach(days { const reviewTime new Date(now.getTime() days * 86400000); registerAlarm(wordId, reviewTime); }); }4. 从个人工具到开源项目4.1 代码重构之路半年后回看第一版代码确实惨不忍睹全局变量满天飞jQuery回调地狱连个像样的模块化都没有。重构时我做了这些改进用Vue.js重写前端组件化开发构建工具改用Vite打包速度提升10倍添加PWA支持支持离线学习用IndexedDB替代localStorage存储学习记录最让我得意的是解决了发音文件加载慢的问题。原本是点击单词才加载音频现在改用Service Worker预缓存配合Web Audio API做流式播放用户体验流畅多了。4.2 GitHub开源经验把项目放到GitHub上后收到了不少有价值的反馈。有英语老师建议增加词组搭配展示有开发者贡献了暗黑模式还有位语言学博士帮忙优化了例句库。这些来自真实用户的建议让项目进化速度远超我的预期。开源过程中也踩过一些坑刚开始没写清晰的贡献指南导致PR质量参差不齐音频文件直接放在repo里很快就触发了GitHub的容量警告没有做好i18n准备后期支持多语言时改动很大现在项目已经形成了稳定的迭代节奏每月收集用户反馈每季度发布一个大版本。最近正在开发的功能是AI单词本能根据用户的错词自动生成针对性练习。5. 给技术型学习者的建议背单词工具再智能最终还是要落实到每日的学习习惯上。我坚持用自己开发的系统学习两年多总结出几个实用技巧利用碎片时间比长时间死磕更有效我通常每天分3次学习每次15分钟遇到难记的单词时手动给它添加个性化例句比如用你最近看的电影台词定期导出学习数据做分析找出自己的薄弱环节不要追求100%掌握先攻克前5000高频词就能应付大多数场景技术人做学习工具最大的优势是定制自由。比如我发现自己在早晨记忆效率最高就写了个定时任务每天7点自动推送当日单词列表到微信。这种贴合个人习惯的小设计往往比大而全的功能更有用。