[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"categories":3,"authors":41,"friends":49,"tags":57,"latest-articles":383},[4,11,17,23,29,35],{"_id":5,"name":6,"description":7,"cover":8,"created_at":9,"updated_at":9,"id":10},"6a2d2e4f58b719b2465af022","后端工程","NestJS \u002F Node.js 服务端：数据建模、缓存、鉴权、错误处理、对象存储等工程实践。","","2026-06-13T10:17:51.794Z",9,{"_id":12,"name":13,"description":14,"cover":8,"created_at":15,"updated_at":15,"id":16},"6a2d2e5058b719b2465af027","前端工程","Nuxt \u002F Vue \u002F React 前端与后台：SSR、运行时配置、组件与交互、请求层封装、语言与浏览器。","2026-06-13T10:17:52.535Z",10,{"_id":18,"name":19,"description":20,"cover":8,"created_at":21,"updated_at":21,"id":22},"6a2d2e5158b719b2465af02a","AI 工程","边缘 \u002F Serverless AI：RAG、Agent、LLM 调度、知识库同步与限流。","2026-06-13T10:17:53.139Z",11,{"_id":24,"name":25,"description":26,"cover":8,"created_at":27,"updated_at":27,"id":28},"6a2d2e5158b719b2465af02d","云原生与交付","Docker \u002F Nginx \u002F CI-CD \u002F 证书与边缘网络：从本地一键启动到生产零停机部署。","2026-06-13T10:17:53.362Z",12,{"_id":30,"name":31,"description":32,"cover":8,"created_at":33,"updated_at":33,"id":34},"6a2d2e5158b719b2465af030","架构与工程实践","跨切面主题：架构演进、解耦、可观测性、安全与开源治理。","2026-06-13T10:17:53.581Z",13,{"_id":36,"name":37,"description":38,"cover":8,"created_at":39,"updated_at":39,"id":40},"6a2d2e5158b719b2465af033","工具与效率","开发环境、编辑器、命令行与效率技巧：Vim \u002F Git \u002F Zsh \u002F macOS \u002F ffmpeg 等。","2026-06-13T10:17:53.804Z",14,[42],{"name":43,"avatar":44,"email":45,"description":46,"role":47,"id":48},"Gavin","\u002Fblog\u002FWechatIMG133.jpeg","zzlwte@gmail.com","写代码的,也撸铁。白天搬 JavaScript 砖,晚上举铁,偶尔在这里写写技术沉淀和生活随想。",32,1,[50],{"_id":51,"id":48,"created_at":52,"updated_at":53,"name":54,"link":55,"avatar":56},"6a294c7a9fbda20eb7c62df0","2022-12-09T18:23:30.000Z","2026-06-13T09:10:22.782Z","子弋","https:\u002F\u002Fziyi.io\u002F","\u002Fblog\u002Faea63a989a2784ec6b09c6dff1fd64905c75ccf19d31602a80834cf76a0bb2e2.png",[58,62,66,70,74,79,84,89,94,99,104,109,114,119,124,129,134,139,144,149,154,159,163,168,173,178,183,188,193,198,203,208,213,218,223,228,233,238,243,248,253,258,263,268,273,278,283,288,293,298,303,308,313,318,323,328,333,338,343,348,353,358,363,368,373,378],{"_id":59,"id":16,"created_at":60,"updated_at":60,"name":61},"6a294c7a9fbda20eb7c62dea","2022-12-08T14:05:49.000Z","小记",{"_id":63,"name":64,"created_at":65,"updated_at":65,"id":28},"6a2d2e5258b719b2465af037","NestJS","2026-06-13T10:17:54.616Z",{"_id":67,"name":68,"created_at":69,"updated_at":69,"id":34},"6a2d2e5258b719b2465af03c","Fastify","2026-06-13T10:17:54.860Z",{"_id":71,"name":72,"created_at":73,"updated_at":73,"id":40},"6a2d2e5358b719b2465af03f","Node.js","2026-06-13T10:17:55.079Z",{"_id":75,"name":76,"created_at":77,"updated_at":77,"id":78},"6a2d2e5358b719b2465af042","TypeScript","2026-06-13T10:17:55.299Z",15,{"_id":80,"name":81,"created_at":82,"updated_at":82,"id":83},"6a2d2e5358b719b2465af045","MongoDB","2026-06-13T10:17:55.527Z",16,{"_id":85,"name":86,"created_at":87,"updated_at":87,"id":88},"6a2d2e5358b719b2465af048","Typegoose","2026-06-13T10:17:55.782Z",17,{"_id":90,"name":91,"created_at":92,"updated_at":92,"id":93},"6a2d2e5458b719b2465af04b","Redis","2026-06-13T10:17:56.097Z",18,{"_id":95,"name":96,"created_at":97,"updated_at":97,"id":98},"6a2d2e5458b719b2465af04e","JWT","2026-06-13T10:17:56.307Z",19,{"_id":100,"name":101,"created_at":102,"updated_at":102,"id":103},"6a2d2e5458b719b2465af051","缓存","2026-06-13T10:17:56.525Z",20,{"_id":105,"name":106,"created_at":107,"updated_at":107,"id":108},"6a2d2e5558b719b2465af054","事件驱动","2026-06-13T10:17:57.206Z",21,{"_id":110,"name":111,"created_at":112,"updated_at":112,"id":113},"6a2d2e5558b719b2465af057","对象存储","2026-06-13T10:17:57.520Z",22,{"_id":115,"name":116,"created_at":117,"updated_at":117,"id":118},"6a2d2e5558b719b2465af05a","S3","2026-06-13T10:17:57.741Z",23,{"_id":120,"name":121,"created_at":122,"updated_at":122,"id":123},"6a2d2e5558b719b2465af05d","Nuxt","2026-06-13T10:17:57.962Z",24,{"_id":125,"name":126,"created_at":127,"updated_at":127,"id":128},"6a2d2e5658b719b2465af060","Vue","2026-06-13T10:17:58.188Z",25,{"_id":130,"name":131,"created_at":132,"updated_at":132,"id":133},"6a2d2e5658b719b2465af063","SSR","2026-06-13T10:17:58.773Z",26,{"_id":135,"name":136,"created_at":137,"updated_at":137,"id":138},"6a2d2e5658b719b2465af066","React","2026-06-13T10:17:58.987Z",27,{"_id":140,"name":141,"created_at":142,"updated_at":142,"id":143},"6a2d2e5758b719b2465af069","Hooks","2026-06-13T10:17:59.708Z",28,{"_id":145,"name":146,"created_at":147,"updated_at":147,"id":148},"6a2d2e5758b719b2465af06c","Ant Design","2026-06-13T10:17:59.977Z",29,{"_id":150,"name":151,"created_at":152,"updated_at":152,"id":153},"6a2d2e5858b719b2465af06f","Vite","2026-06-13T10:18:00.564Z",30,{"_id":155,"name":156,"created_at":157,"updated_at":157,"id":158},"6a2d2e5858b719b2465af072","SSE","2026-06-13T10:18:00.795Z",31,{"_id":160,"name":161,"created_at":162,"updated_at":162,"id":47},"6a2d2e5958b719b2465af075","axios","2026-06-13T10:18:01.032Z",{"_id":164,"name":165,"created_at":166,"updated_at":166,"id":167},"6a2d2e5958b719b2465af078","CORS","2026-06-13T10:18:01.254Z",33,{"_id":169,"name":170,"created_at":171,"updated_at":171,"id":172},"6a2d2e5958b719b2465af07b","浏览器","2026-06-13T10:18:01.556Z",34,{"_id":174,"name":175,"created_at":176,"updated_at":176,"id":177},"6a2d2e5958b719b2465af07e","前端","2026-06-13T10:18:01.788Z",35,{"_id":179,"name":180,"created_at":181,"updated_at":181,"id":182},"6a2d2e5a58b719b2465af081","Cloudflare Workers","2026-06-13T10:18:02.088Z",36,{"_id":184,"name":185,"created_at":186,"updated_at":186,"id":187},"6a2d2e5a58b719b2465af084","RAG","2026-06-13T10:18:02.652Z",37,{"_id":189,"name":190,"created_at":191,"updated_at":191,"id":192},"6a2d2e5b58b719b2465af087","Agent","2026-06-13T10:18:03.286Z",38,{"_id":194,"name":195,"created_at":196,"updated_at":196,"id":197},"6a2d2e5c58b719b2465af08a","LLM","2026-06-13T10:18:04.531Z",39,{"_id":199,"name":200,"created_at":201,"updated_at":201,"id":202},"6a2d2e5d58b719b2465af08d","DeepSeek","2026-06-13T10:18:05.180Z",40,{"_id":204,"name":205,"created_at":206,"updated_at":206,"id":207},"6a2d2e5d58b719b2465af090","向量检索","2026-06-13T10:18:05.708Z",41,{"_id":209,"name":210,"created_at":211,"updated_at":211,"id":212},"6a2d2e5e58b719b2465af093","限流","2026-06-13T10:18:06.357Z",42,{"_id":214,"name":215,"created_at":216,"updated_at":216,"id":217},"6a2d2e5e58b719b2465af096","Docker","2026-06-13T10:18:06.690Z",43,{"_id":219,"name":220,"created_at":221,"updated_at":221,"id":222},"6a2d2e5e58b719b2465af099","容器","2026-06-13T10:18:06.970Z",44,{"_id":224,"name":225,"created_at":226,"updated_at":226,"id":227},"6a2d2e5f58b719b2465af09c","镜像加速","2026-06-13T10:18:07.955Z",45,{"_id":229,"name":230,"created_at":231,"updated_at":231,"id":232},"6a2d2e6058b719b2465af09f","阿里云","2026-06-13T10:18:08.227Z",46,{"_id":234,"name":235,"created_at":236,"updated_at":236,"id":237},"6a2d2e6058b719b2465af0a2","Docker Compose","2026-06-13T10:18:08.502Z",47,{"_id":239,"name":240,"created_at":241,"updated_at":241,"id":242},"6a2d2e6058b719b2465af0a5","Nginx","2026-06-13T10:18:08.726Z",48,{"_id":244,"name":245,"created_at":246,"updated_at":246,"id":247},"6a2d2e6058b719b2465af0a8","HTTP\u002F3","2026-06-13T10:18:08.965Z",49,{"_id":249,"name":250,"created_at":251,"updated_at":251,"id":252},"6a2d2e6158b719b2465af0ab","CI-CD","2026-06-13T10:18:09.908Z",50,{"_id":254,"name":255,"created_at":256,"updated_at":256,"id":257},"6a2d2e6258b719b2465af0ae","Jenkins","2026-06-13T10:18:10.270Z",51,{"_id":259,"name":260,"created_at":261,"updated_at":261,"id":262},"6a2d2e6258b719b2465af0b1","DevOps","2026-06-13T10:18:10.500Z",52,{"_id":264,"name":265,"created_at":266,"updated_at":266,"id":267},"6a2d2e6258b719b2465af0b4","PM2","2026-06-13T10:18:10.721Z",53,{"_id":269,"name":270,"created_at":271,"updated_at":271,"id":272},"6a2d2e6258b719b2465af0b7","进程管理","2026-06-13T10:18:10.987Z",54,{"_id":274,"name":275,"created_at":276,"updated_at":276,"id":277},"6a2d2e6358b719b2465af0ba","acme.sh","2026-06-13T10:18:11.890Z",55,{"_id":279,"name":280,"created_at":281,"updated_at":281,"id":282},"6a2d2e6458b719b2465af0bd","HTTPS","2026-06-13T10:18:12.106Z",56,{"_id":284,"name":285,"created_at":286,"updated_at":286,"id":287},"6a2d2e6458b719b2465af0c0","架构","2026-06-13T10:18:12.320Z",57,{"_id":289,"name":290,"created_at":291,"updated_at":291,"id":292},"6a2d2e6458b719b2465af0c3","安全","2026-06-13T10:18:12.570Z",58,{"_id":294,"name":295,"created_at":296,"updated_at":296,"id":297},"6a2d2e6458b719b2465af0c6","性能","2026-06-13T10:18:12.781Z",59,{"_id":299,"name":300,"created_at":301,"updated_at":301,"id":302},"6a2d2e6558b719b2465af0c9","可观测性","2026-06-13T10:18:13.781Z",60,{"_id":304,"name":305,"created_at":306,"updated_at":306,"id":307},"6a2d2e6658b719b2465af0cc","Webhook","2026-06-13T10:18:14.708Z",61,{"_id":309,"name":310,"created_at":311,"updated_at":311,"id":312},"6a2d2e6658b719b2465af0cf","开源","2026-06-13T10:18:14.932Z",62,{"_id":314,"name":315,"created_at":316,"updated_at":316,"id":317},"6a2d2e6758b719b2465af0d2","Vim","2026-06-13T10:18:15.542Z",63,{"_id":319,"name":320,"created_at":321,"updated_at":321,"id":322},"6a2d2e6858b719b2465af0d5","Git","2026-06-13T10:18:16.214Z",64,{"_id":324,"name":325,"created_at":326,"updated_at":326,"id":327},"6a2d2e6858b719b2465af0d8","版本控制","2026-06-13T10:18:16.793Z",65,{"_id":329,"name":330,"created_at":331,"updated_at":331,"id":332},"6a2d2e6958b719b2465af0db","Zsh","2026-06-13T10:18:17.068Z",66,{"_id":334,"name":335,"created_at":336,"updated_at":336,"id":337},"6a2d2e6a58b719b2465af0de","macOS","2026-06-13T10:18:18.034Z",67,{"_id":339,"name":340,"created_at":341,"updated_at":341,"id":342},"6a2d2e6a58b719b2465af0e1","HomeBrew","2026-06-13T10:18:18.396Z",68,{"_id":344,"name":345,"created_at":346,"updated_at":346,"id":347},"6a2d2e6d58b719b2465af0e4","命令行","2026-06-13T10:18:21.173Z",69,{"_id":349,"name":350,"created_at":351,"updated_at":351,"id":352},"6a2d2e6d58b719b2465af0e7","环境配置","2026-06-13T10:18:21.484Z",70,{"_id":354,"name":355,"created_at":356,"updated_at":356,"id":357},"6a2d2e6e58b719b2465af0fc","ffmpeg","2026-06-13T10:18:22.067Z",71,{"_id":359,"name":360,"created_at":361,"updated_at":361,"id":362},"6a2d2e6e58b719b2465af0ff","音频","2026-06-13T10:18:22.281Z",72,{"_id":364,"name":365,"created_at":366,"updated_at":366,"id":367},"6a2d2e6e58b719b2465af102","效率","2026-06-13T10:18:22.783Z",73,{"_id":369,"name":370,"created_at":371,"updated_at":371,"id":372},"6a2d2e8158b719b2465af137","AI","2026-06-13T10:18:41.401Z",74,{"_id":374,"name":375,"created_at":376,"updated_at":376,"id":377},"6a2d2e8758b719b2465af180","自动化","2026-06-13T10:18:47.983Z",75,{"_id":379,"name":380,"created_at":381,"updated_at":381,"id":382},"6a2d2e8c58b719b2465af1a6","文档","2026-06-13T10:18:52.417Z",76,[384,400,416,431,447,463],{"_id":385,"title":386,"description":387,"cover":8,"created_date":388,"category_id":34,"tag_ids":389,"author_ids":390,"public":48,"status":48,"star":48,"like":391,"views":48,"created_at":392,"updated_at":393,"id":242,"category":394,"tags":395,"authors":399},"6a2d2e8c58b719b2465af1a9","为开源准备一个项目：README、LICENSE 与最小可复现","把私有项目开源，写完代码只是开始。一份让人能跑起来的 README、一个明确的 LICENSE、一套「clone 即可复现」的最小启动路径，才是开源的诚意所在。","2026-06-13T00:00:00.000Z",[312,382,217],[],0,"2026-06-13T10:18:52.642Z","2026-06-13T10:20:36.621Z",{"_id":30,"name":31,"description":32,"cover":8,"created_at":33,"updated_at":33,"id":34},[396,397,398],{"_id":309,"name":310,"created_at":311,"updated_at":311,"id":312},{"_id":379,"name":380,"created_at":381,"updated_at":381,"id":382},{"_id":214,"name":215,"created_at":216,"updated_at":216,"id":217},[],{"_id":401,"title":402,"description":403,"cover":8,"created_date":388,"category_id":28,"tag_ids":404,"author_ids":405,"public":48,"status":48,"star":406,"like":391,"views":48,"created_at":407,"updated_at":408,"id":222,"category":409,"tags":410,"authors":415},"6a2d2e8a58b719b2465af192","开源前的密钥治理：gitleaks + 历史清理 + 凭证轮换","把一个私有项目开源前，最怕的是密钥泄露。一次真实的「.env 里混进了云厂商 AccessKey」事故，复盘从扫描、历史清理到凭证轮换的完整处置，以及那条最反直觉的铁律。",[292,312,252,322],[],2,"2026-06-13T10:18:50.615Z","2026-06-13T10:20:36.641Z",{"_id":24,"name":25,"description":26,"cover":8,"created_at":27,"updated_at":27,"id":28},[411,412,413,414],{"_id":289,"name":290,"created_at":291,"updated_at":291,"id":292},{"_id":309,"name":310,"created_at":311,"updated_at":311,"id":312},{"_id":249,"name":250,"created_at":251,"updated_at":251,"id":252},{"_id":319,"name":320,"created_at":321,"updated_at":321,"id":322},[],{"_id":417,"title":418,"description":419,"cover":8,"created_date":388,"category_id":22,"tag_ids":420,"author_ids":421,"public":48,"status":48,"star":48,"like":391,"views":48,"created_at":422,"updated_at":423,"id":192,"category":424,"tags":425,"authors":430},"6a2d2e8658b719b2465af171","给 AI 对话做限流：Workers \u002F 会话 \u002F AI Gateway 三层防护","一个公开的 AI 对话接口，不限流就是给钱包开了个无底洞。我用三层互补的限流——请求层防刷、会话层防滥用、网关层兜底花费——把「被薅羊毛」的风险摁住。",[212,182,292,197],[],"2026-06-13T10:18:46.543Z","2026-06-13T10:20:36.684Z",{"_id":18,"name":19,"description":20,"cover":8,"created_at":21,"updated_at":21,"id":22},[426,427,428,429],{"_id":209,"name":210,"created_at":211,"updated_at":211,"id":212},{"_id":179,"name":180,"created_at":181,"updated_at":181,"id":182},{"_id":289,"name":290,"created_at":291,"updated_at":291,"id":292},{"_id":194,"name":195,"created_at":196,"updated_at":196,"id":197},[],{"_id":432,"title":433,"description":434,"cover":8,"created_date":435,"category_id":22,"tag_ids":436,"author_ids":437,"public":48,"status":48,"star":48,"like":391,"views":48,"created_at":438,"updated_at":439,"id":187,"category":440,"tags":441,"authors":446},"6a2d2e8658b719b2465af16c","DeepSeek vs Gemini：RAG 场景的工具调用风格调优","同一套提示词，DeepSeek 和 Gemini 表现出截然不同的「性格」——一个推理欲望强、爱多调工具，一个极度克制、走最短路径。聊聊这两种风格在 RAG 场景下各自要怎么调。","2026-06-12T00:00:00.000Z",[197,202,187,192],[],"2026-06-13T10:18:46.203Z","2026-06-13T10:20:36.725Z",{"_id":18,"name":19,"description":20,"cover":8,"created_at":21,"updated_at":21,"id":22},[442,443,444,445],{"_id":194,"name":195,"created_at":196,"updated_at":196,"id":197},{"_id":199,"name":200,"created_at":201,"updated_at":201,"id":202},{"_id":184,"name":185,"created_at":186,"updated_at":186,"id":187},{"_id":189,"name":190,"created_at":191,"updated_at":191,"id":192},[],{"_id":448,"title":449,"description":450,"cover":8,"created_date":451,"category_id":34,"tag_ids":452,"author_ids":453,"public":48,"status":48,"star":48,"like":391,"views":48,"created_at":454,"updated_at":455,"id":237,"category":456,"tags":457,"authors":462},"6a2d2e8c58b719b2465af1a1","个人项目也要做可观测性：AI Gateway 日志与用量","个人项目没有 SRE 团队，但「两眼一抹黑」更危险——尤其当系统里有按量付费的 LLM。聊聊用极低成本给个人项目加上可观测性：托管组件自带的日志、健康检查、用量看板。","2026-06-11T00:00:00.000Z",[302,182,372,297],[],"2026-06-13T10:18:52.158Z","2026-06-13T10:20:40.790Z",{"_id":30,"name":31,"description":32,"cover":8,"created_at":33,"updated_at":33,"id":34},[458,459,460,461],{"_id":299,"name":300,"created_at":301,"updated_at":301,"id":302},{"_id":179,"name":180,"created_at":181,"updated_at":181,"id":182},{"_id":369,"name":370,"created_at":371,"updated_at":371,"id":372},{"_id":294,"name":295,"created_at":296,"updated_at":296,"id":297},[],{"_id":464,"title":465,"description":466,"cover":8,"created_date":451,"category_id":22,"tag_ids":467,"author_ids":468,"public":48,"status":48,"star":406,"like":391,"views":48,"created_at":469,"updated_at":470,"id":182,"category":471,"tags":472,"authors":477},"6a2d2e8558b719b2465af167","边缘鉴权：在 Worker 里本地验签 JWT，告别跨境回源","后台点一下「AI 管理」就被登出。排查发现是 Worker 回源到国内服务器验 token，触发了 530。解法不是修网络，而是换架构——把 JWT 验签搬到边缘本地做，彻底不回源。",[98,292,182,287],[],"2026-06-13T10:18:45.994Z","2026-06-13T10:20:40.930Z",{"_id":18,"name":19,"description":20,"cover":8,"created_at":21,"updated_at":21,"id":22},[473,474,475,476],{"_id":95,"name":96,"created_at":97,"updated_at":97,"id":98},{"_id":289,"name":290,"created_at":291,"updated_at":291,"id":292},{"_id":179,"name":180,"created_at":181,"updated_at":181,"id":182},{"_id":284,"name":285,"created_at":286,"updated_at":286,"id":287},[]]