[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"app-site-settings":3,"plugin-slots":43,"article-detail-80":46},{"about_config":4,"about_content":5,"ack_intro":6,"ai_nav_seeded":7,"auto_defense_bad_ua_enabled":7,"auto_defense_ban_hours":8,"auto_defense_enabled":9,"auto_defense_scan_enabled":7,"auto_defense_threshold":10,"bg_image_enabled":11,"brand_name":12,"comment_ai_review":7,"comment_moderation":7,"comment_require_login":7,"contact_email":13,"copyright_notice":14,"fl_site_info":15,"footer_copyright_text":16,"footer_gongan_text":17,"footer_gongan_url":18,"footer_icp_text":19,"footer_icp_url":20,"footer_report_email":13,"footer_report_text":21,"footer_server_info":22,"footer_show_icp":7,"footer_show_sitemap":7,"footer_show_subscribe":7,"footer_show_visit":7,"island_festival_enabled":7,"island_festival_end":23,"island_festival_start":24,"island_festival_text":25,"media_compress_quality":26,"media_upload_strategy":27,"nav_menus":28,"sec_allowed_hosts":29,"sec_allowed_origins":30,"sec_base_domain":22,"sec_comment_rate_enabled":7,"sec_comment_rate_limit":31,"sec_comment_rate_mode":32,"sec_enable_honeypot":7,"sec_enable_host_check":7,"sec_enable_hotlink":11,"sec_hotlink_allow":33,"sec_rate_limit_max":34,"sec_rate_limit_window":35,"site_description":36,"site_favicon":37,"site_keywords":38,"site_logo":22,"site_name":39,"site_url":40,"theme_active":41,"theme_config":42},"{\"heroSubtitle\":\"lcrworld 的个人数字花园\",\"rssArticleLabel\":\"文章 RSS\",\"rssMomentLabel\":\"动态 RSS\",\"statsLabels\":[\"文章\",\"动态\",\"媒体\",\"评论\",\"总访客\",\"今日访客\"],\"lifeFacts\":[{\"icon\":\"♒\",\"value\":\"水瓶座\",\"label\":\"星座\",\"accent\":\"\"},{\"icon\":\"📆\",\"value\":\"14\",\"label\":\"年龄\",\"accent\":\"\"},{\"icon\":\"❤️\",\"value\":\"女\",\"label\":\"性别\",\"accent\":\"\"}],\"personality\":{\"tips\":\"性格\",\"title\":\"INFJ 提倡者\",\"badge\":\"INFJ\",\"badgeColor\":\"#52b788\",\"desc\":\"理想主义与共情力的结合。喜欢深度思考，安静而坚定，追求有意义的事，相信文字与创造可以改变世界。\",\"linkText\":\"了解 MBTI 人格 →\",\"linkUrl\":\"https:\u002F\u002Fwww.16personalities.com\u002Fch\u002F\",\"imageUrl\":\"https:\u002F\u002Flcrworld.xyz\u002Fuploads\u002Fmedia\u002Fcompressed\u002F6952-1789746513543.webp\"},\"donation\":{\"tips\":\"感谢\",\"title\":\"打赏支持\",\"intro\":\"如果这里的内容对你有帮助，欢迎请我喝一杯咖啡喵～\",\"buttonText\":\"投喂\",\"wechatQr\":\"https:\u002F\u002Flcrworld.xyz\u002Fuploads\u002Fmedia\u002Fcompressed\u002F7363-1790990938950.webp\",\"alipayQr\":\"\"}}","你好，我是 **lcrworld**，一个喜欢折腾的技术爱好者。这里是我的个人数字花园，用来安放技术笔记、文学创作、摄影作品与生活碎片。\n\n## 关于这个博客\n\n博客自 2026 年 5 月上线运行，同年 8 月完成 **Nuxt 4 + Node.js + SQLite** 全栈重构。从数据库到部署、从设计到文案，全部由我一个人完成。\n\n- 文章：Markdown 写作、AI 智能摘要、AI 目录生成、阅读设置（字号 \u002F 行高 \u002F 字体）\n- 动态：碎语板块，记录日常灵感与即兴想法\n- 评论：人机验证 + AI 审核，先审后发，保护讨论环境\n- 其他：背景实验室（BG Lab）、友链、版权中心、更新日志\n\n> 这个站点本身就是我最大的作品——它每天都在被我打磨。\n\n## 我在做什么\n\n- **开发**：Vue \u002F Nuxt \u002F Node.js，喜欢把想法变成能用的东西\n- **写作**：技术教程、文学创作与摄影记录\n- **开源**：在 GitHub \u002F Gitee 维护个人项目，贡献数据见下方\n\n## 联系我\n\n- 邮箱：[lcrblog@163.com](mailto:lcrblog@163.com)\n- B 站：投稿见上方「B站投稿」\n- 友链 \u002F 合作：欢迎前往「友链」页面申请\n\n## 说明\n\n本站内容除特殊声明外均为原创，转载或引用请注明出处并附原文链接，详见[版权中心](\u002Fcopyright)。","{\"title\":\"鸣谢\",\"subtitle\":\"致每一位曾为 v3blog 伸出援手的朋友\",\"text\":\"一个站点的成长，离不开朋友们的真心帮助。以下是 v3blog 开发过程中给予过支持与启发的伙伴，谨以此页，聊表谢意。\",\"updated_at\":\"2026-09-05\"}","1","24","true","10","0","lcrworld","lcrblog@163.com","{\"source_code\": \"本站源代码为闭源项目，未对外开源，不提供源码下载、分发或二次开发授权。\", \"content\": \"本站文章均为原创并保留所有权利（All Rights Reserved）。任何转载、摘编、翻译、演绎或商业使用，均须事先获得作者书面授权，并注明出处及原文链接。变更生效前（2026 年 9 月 5 日之前）依据 CC BY-NC-SA 协议已合法取得的授权不溯及既往，仍然有效。\", \"updated_at\": \"2026-09-13\"}","{\"name\":\"lcrworld's blog\",\"url\":\"https:\u002F\u002Flcrworld.xyz\",\"avatar\":\"https:\u002F\u002Flcrworld.xyz\u002Fdefault-avatar.jpeg\",\"desc\":\"lcrworld的个人博客，分享文章，记录日常\",\"rss_articles\":\"https:\u002F\u002Flcrworld.xyz\u002Fapi\u002Frss\u002Ffeed\u002Fnewrss\",\"rss_moments\":\"https:\u002F\u002Flcrworld.xyz\u002Fapi\u002Frss\u002Ffeed\u002Fnewrss\"}","© {year} {site}","冀公网安备13010402003584号","https:\u002F\u002Fbeian.mps.gov.cn\u002F#\u002Fquery\u002FwebSearch?code=13010402003584","冀ICP备2026028241号","https:\u002F\u002Fbeian.miit.gov.cn\u002F","违法和不良信息举报","","2026-09-30","2026-09-23","祖国母亲77周年🎉","82","local","[{\"label\":\"首页\",\"path\":\"\u002F\"},{\"label\":\"时光\",\"path\":\"\u002Farchives\"},{\"label\":\"动态\",\"path\":\"\u002Fmoments\"},{\"label\":\"实验\",\"path\":\"\u002Fexperiments\"},{\"label\":\"关于\",\"path\":\"\u002Fabout\"},{\"label\":\"媒体库\",\"path\":\"\u002Fmedia\"},{\"label\":\"小玩具\",\"path\":\"\",\"href\":\"https:\u002F\u002Flab.lcrworld.xyz\",\"exact\":false,\"newtab\":true},{\"label\":\"音乐盒\",\"path\":\"\u002Fmusic\"},{\"label\":\"友人帐\",\"path\":\"\u002Ffriend-links\"},{\"label\":\"LCR AI\",\"path\":\"\u002Fai\"}]","[\"lcrworld.xyz\",\"www.lcrworld.xyz\",\"en.lcrworld.xyz\",\"localhost\",\"127.0.0.1\"]","[\"https:\u002F\u002Flcrworld.xyz\",\"https:\u002F\u002Fwww.lcrworld.xyz\",\"https:\u002F\u002Fen.lcrworld.xyz\",\"http:\u002F\u002Flocalhost\",\"http:\u002F\u002F127.0.0.1\",\"http:\u002F\u002Flocalhost:3001\",\"http:\u002F\u002F127.0.0.1:3001\",\"http:\u002F\u002Flocalhost:5173\",\"http:\u002F\u002Flocalhost:5174\"]","3","review","[]","100","60","技术、项目与生活记录。分享技术教程、文学创作、摄影作品与生活感悟。","\u002Ffavicon-32x32.png","lcrworld,博客,技术,Vue,Node.js,摄影,文学,井天乐,blog","lcrworld's Blog","https:\u002F\u002Flcrworld.xyz","default","{}",{"slots":44,"active":45},{},[],{"ai_summary":47,"ai_toc":48,"author_id":49,"author_name":12,"avg_reading_time":50,"background_url":22,"category_id":48,"category_name":48,"category_slug":48,"content":51,"cover_url":52,"created_at":53,"excerpt":54,"id":55,"is_hidden":50,"is_pinned":50,"lang":56,"license":57,"like_count":50,"next_article":48,"prev_article":58,"reading_count":50,"scheduled_at":62,"seo_keywords":22,"slug":63,"status":64,"tags":65,"title":70,"total_reading_time":50,"translation_of":48,"updated_at":71,"view_count":72,"word_count":73},"博客后端完成从 Node.js 到 Go 的全面迁移，274 个接口全部重写，单二进制部署无依赖。实测吞吐提升 5~11 倍，可用内存从 262MB 增至 696MB，并支持 SQLite、MySQL、PostgreSQL 自由切换。迁移中通过端点巡检、SQL 列名校验和无头浏览器渲染三套工具保障完整性，同时新增网易云直连、AI 工具调用、健康自愈与数据库快照等能力。",null,1,0,"\u003Cp>\u003Cem>2026-10-12 · 后端重构专题\u003C\u002Fem>\u003C\u002Fp>\n\n\u003Cp>这是本站上线以来规模最大的一次底层改造：\u003Cstrong>整个后端从 Node.js 迁移到 Go\u003C\u002Fstrong>，全部接口由 Go 提供，Node 后端正式下线。本文只讲这次改造本身。\u003C\u002Fp>\n\n\u003Ch2>一、为什么要做\u003C\u002Fh2>\n\u003Cp>站点此前是 Nuxt（前端）+ Express（后端）的组合。随着功能叠加，后端接口越来越多（共 \u003Cstrong>274 个\u003C\u002Fstrong>），而服务器只有 \u003Cstrong>2 核 \u002F 1.6GB 内存\u003C\u002Fstrong> —— 内存长期处于 85% 以上的紧张状态，可用内存一度只剩 260MB。我们希望在不降低任何功能的前提下，用更低的资源开销换来更高的吞吐与更稳的运行。\u003C\u002Fp>\n\n\u003Ch2>二、改造结果\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>274 个接口全部由 Go 实现\u003C\u002Fstrong>，单二进制部署（约 22MB），无运行时依赖。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>接口处理能力提升 5~11 倍\u003C\u002Fstrong>（同机对比实测，见下图）。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>服务器可用内存从 262MB 提升到 696MB\u003C\u002Fstrong>，同时下线了 Node 后端与网易云中转服务两个常驻进程。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>支持 SQLite \u002F MySQL \u002F PostgreSQL 三种数据库自由切换\u003C\u002Fstrong>，改配置即生效。\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>三、性能实测\u003C\u002Fh2>\n\u003Cp>同一台机器、同样的并发条件（2 线程 \u002F 50 并发 \u002F 10 秒），把两个后端拉出来对打：\u003C\u002Fp>\n\n\n\u003Cfigure>\u003Cimg src=\"\u002Fuploads\u002Fmedia\u002Fcompressed\u002F18ddce0bde205392.webp\" alt=\"压测对比：相同接口在 Express 与 Go 下的每秒处理请求数\" loading=\"lazy\">\u003Cfigcaption>压测对比：相同接口在 Express 与 Go 下的每秒处理请求数\u003C\u002Ffigcaption>\u003C\u002Ffigure>\n\n\n\u003Cp>可见接口吞吐普遍提升 5 倍以上，其中纯读接口（如站点配置）提升接近 9 倍。这得益于三件事：高频接口全部加入\u003Cstrong>服务端内存缓存\u003C\u002Fstrong>、消除了逐条查询的 \u003Cstrong>N+1\u003C\u002Fstrong> 问题、以及数据库层的调优（WAL 日志 + 页缓存）。\u003C\u002Fp>\n\n\u003Ch2>四、编译与部署\u003C\u002Fh2>\n\u003Cp>Go 的编译产物是一个静态二进制，部署即拷贝文件、替换后重启 —— 编译加部署不到 2 秒：\u003C\u002Fp>\n\n\n\u003Cfigure>\u003Cimg src=\"\u002Fuploads\u002Fmedia\u002Fcompressed\u002F18ddce0bdd7962d3.webp\" alt=\"go build 编译耗时 1.08 秒，产物 22MB\" loading=\"lazy\">\u003Cfigcaption>go build 编译耗时 1.08 秒，产物 22MB\u003C\u002Ffigcaption>\u003C\u002Ffigure>\n\n\n\u003Cp>新后端上线后，Node 后端立即切为备用（Nginx 主备自动接管），确保万无一失：\u003C\u002Fp>\n\n\n\u003Cfigure>\u003Cimg src=\"\u002Fuploads\u002Fmedia\u002Fcompressed\u002F18ddce0be214a269.webp\" alt=\"上线后的进程与资源状态：Node 后端与网易云中转服务均已下线\" loading=\"lazy\">\u003Cfigcaption>上线后的进程与资源状态：Node 后端与网易云中转服务均已下线\u003C\u002Ffigcaption>\u003C\u002Ffigure>\n\n\n\u003Ch2>五、完整性验证\u003C\u002Fh2>\n\u003Cp>迁移最怕「漏接口」。为此我们专门写了三套自动化校验工具，把「靠人肉检查」换成「靠工具兜底」：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>全端点完整性巡检\u003C\u002Fstrong>：从旧后端源码提取全部接口清单，逐个打到新后端，按状态码分类（200 \u002F 需参数 \u002F 404 未实现 \u002F 500 有 Bug）。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>全量列名校验\u003C\u002Fstrong>：扫描新后端源码里的所有 SQL 字段名，对照数据库真实表结构，一次性找出所有笔误。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>前端渲染验证\u003C\u002Fstrong>：用无头浏览器真实打开页面，抓取控制台报错、实际渲染内容与失败请求 —— 只有页面真的渲染出来，才算通过。\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\u003Cfigure>\u003Cimg src=\"\u002Fuploads\u002Fmedia\u002Fcompressed\u002F18ddce0bdf24a75c.webp\" alt=\"全端点巡检：305 个旧接口逐一打到新后端并分类\" loading=\"lazy\">\u003Cfigcaption>全端点巡检：305 个旧接口逐一打到新后端并分类\u003C\u002Ffigcaption>\u003C\u002Ffigure>\n\n\n\n\u003Cfigure>\u003Cimg src=\"\u002Fuploads\u002Fmedia\u002Fcompressed\u002F18ddce0bdfd0e07c.webp\" alt=\"全量列名校验：扫描源码中全部 SQL，逐字段对照数据库结构\" loading=\"lazy\">\u003Cfigcaption>全量列名校验：扫描源码中全部 SQL，逐字段对照数据库结构\u003C\u002Ffigcaption>\u003C\u002Ffigure>\n\n\n\u003Ch2>六、多数据库支持\u003C\u002Fh2>\n\u003Cp>后端支持 \u003Cstrong>SQLite \u002F MySQL \u002F PostgreSQL\u003C\u002Fstrong> 三种数据库，业务代码零改动（差异由适配层统一翻译）。我们也把生产数据完整迁移到 PostgreSQL 做了验证：\u003C\u002Fp>\n\n\n\u003Cfigure>\u003Cimg src=\"\u002Fuploads\u002Fmedia\u002Fcompressed\u002F18ddce0be0b93689.webp\" alt=\"多数据库验证：SQLite 与 PostgreSQL 双库运行结果比对\" loading=\"lazy\">\u003Cfigcaption>多数据库验证：SQLite 与 PostgreSQL 双库运行结果比对\u003C\u002Ffigcaption>\u003C\u002Ffigure>\n\n\n\u003Ch2>七、其他改进\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>网易云音乐直连\u003C\u002Fstrong>：自行实现了网易云的加密协议，歌单 \u002F 播放地址 \u002F 歌词 \u002F 搜索全部由本站后端直连官方接口，不再依赖第三方中转服务，响应更快、也少了一个常驻进程。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>AI 工具调用\u003C\u002Fstrong>：LCR AI 现在能自主调用工具 —— 联网搜索最新资料、查询实时天气、解析 IP 归属地、读取本站统计，回答更准确及时。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>稳定性加固\u003C\u002Fstrong>：后端健康自愈守护（每分钟自动体检，异常自动重启）、每日数据库快照（自动保留 7 份）、优雅停机（重启不丢请求）。\u003C\u002Fli>\n\u003Cli>插件系统、SEO（站点地图 \u002F robots \u002F llms.txt \u002F IndexNow）、表情代理、媒体上传（含分片与外链导入）等模块一并迁移完成。\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>小结\u003C\u002Fh2>\n\u003Cp>这次改造的核心收益可以概括为三点：\u003Cstrong>更快\u003C\u002Fstrong>（吞吐 5 倍以上）、\u003Cstrong>更省\u003C\u002Fstrong>（内存释放约 430MB）、\u003Cstrong>更稳\u003C\u002Fstrong>（自愈 + 快照 + 双后端热备）。对访问者而言最直观的感受是：页面接口响应更快、站点在高并发时也不容易崩。\u003C\u002Fp>\n\n\u003Cp>Node 后端目前仍作为备用保留在服务器上，随时可一键切回 —— 稳定运行一段时间后再彻底清理。\u003C\u002Fp>","https:\u002F\u002Flcrworld.xyz\u002Fuploads\u002Fmedia\u002Fcompressed\u002F7403-1791161315450.webp","2026-10-12 22:23:04","后端全部 274 个接口迁移到 Go，接口吞吐提升 5~11 倍，服务器可用内存释放约 430MB；新增多数据库支持（SQLite\u002FMySQL\u002FPostgreSQL）与网易云直连。",80,"zh","cc-by-nc-sa",{"cover_url":59,"id":60,"slug":61,"title":61},"https:\u002F\u002Flcrworld.xyz\u002Fuploads\u002Fmedia\u002Fcompressed\u002F7410-1791172545515.webp",77,"再谈喜欢","2026-10-14T02:00:00.000Z","blog-v3-3-go-backend","published",[66],{"id":67,"name":68,"slug":69},4,"[object Object]","object-object","博客系统 v3.3 更新日志：后端从 Node.js 全面迁移到 Go","2026-10-13 13:08:08",55,1304]