<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Duluu&apos;s World</title><description>Duluu Guo&apos;s personal blog</description><link>https://blog.shemu.top/</link><language>zh-CN</language><managingEditor>guoshencheng@shemu.top (Duluu Guo)</managingEditor><webMaster>guoshencheng@shemu.top (Duluu Guo)</webMaster><item><title>流式三连：AI Agent 前端面试题，从网络到调度</title><link>https://blog.shemu.top/posts/streaming-trio-ai-agent-frontend-interview/</link><guid isPermaLink="true">https://blog.shemu.top/posts/streaming-trio-ai-agent-frontend-interview/</guid><description>AI Agent 前端三道流式面试题——SSE vs WebSocket、长文本渲染不卡顿、React Fiber 对高频更新的优势——从 TCP chunked、SSE 四种实现方式（fetch+ReadableStream / EventSource / XHR / Node）、增量 DOM、时间切片、Lane 模型一路讲透。</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>从即梦里的一张图，到一整套 AI 绘本流水线</title><link>https://blog.shemu.top/posts/moricho-project-retrospective/</link><guid isPermaLink="true">https://blog.shemu.top/posts/moricho-project-retrospective/</guid><description>即梦上线后，我意识到 AI 出图正在从玩具走向产品。家里有小孩，我便想：能不能让 AI 把一本绘本从故事、分镜到出图全做完？38 天后，这个念头变成了一套工作流。</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>视频导出App持续优化：原生架构里还能再榨 20%</title><link>https://blog.shemu.top/posts/native-export-three-stage-pipeline/</link><guid isPermaLink="true">https://blog.shemu.top/posts/native-export-three-stage-pipeline/</guid><description>在已经 5 分钟的原生 C++ 视频导出架构上，装完计时发现还能再榨 20%——B2 删除两次 GPU 同步阻塞 + A 三段生产者-消费者管线（解码 ASIC / GPU / 编码 ASIC 三种独立硬件重叠）+ 音频合并从重编码改 Passthrough。总导出 7分40秒 收到 4 分钟左右，保留 3× 超采样画质不变。</description><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>流式续接：刷新之后,那 5 秒去哪儿了</title><link>https://blog.shemu.top/posts/agent-streaming-resume-after-refresh/</link><guid isPermaLink="true">https://blog.shemu.top/posts/agent-streaming-resume-after-refresh/</guid><description>Agent 流式输出进行中刷新页面,已生成的文本会全部丢失。这次为修它,设计跨越前后端,核心是把 messageId 从 agent 一路穿透到 web。</description><pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>一根 SSE 总管，撑起整个 Agent 流式</title><link>https://blog.shemu.top/posts/one-sse-stream-multiple-agents/</link><guid isPermaLink="true">https://blog.shemu.top/posts/one-sse-stream-multiple-agents/</guid><description>调研 OpenCode 源码后对自己项目流式设计的反思——多 Agent 同时跑不需要 N 条连接，一条共享广播 + REST 快照兜底，是更简洁也更诚实的选择。</description><pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>Token 烧得太快，是因为 Agent 没吃上缓存</title><link>https://blog.shemu.top/posts/agent-llm-cache-burn-money-guide/</link><guid isPermaLink="true">https://blog.shemu.top/posts/agent-llm-cache-burn-money-guide/</guid><description>平时用各种模型工具跑任务，感觉 token 消耗挺快。社交媒体上有人提到，可能是 token 的缓存机制没用上。联想到自己也在做 Agent，就把这件事系统查了一遍——原理、各家厂商机制、和 Agent 场景里常见的几个反模式。</description><pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>让 LLM 跑 shell 命令，究竟要防多少种绕过？</title><link>https://blog.shemu.top/posts/openclaw-exec-validation/</link><guid isPermaLink="true">https://blog.shemu.top/posts/openclaw-exec-validation/</guid><description>调研 OpenClaw 的 exec 校验体系，看一条 shell 命令从 LLM 产出到实际 spawn 中间要过几道关卡。</description><pubDate>Tue, 23 Jun 2026 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>当 Agent 不再等你拍板</title><link>https://blog.shemu.top/posts/loop-engineering-tasks-self-mined/</link><guid isPermaLink="true">https://blog.shemu.top/posts/loop-engineering-tasks-self-mined/</guid><description>Loop Engineering 真正改的不是 Agent,是把&quot;该做什么&quot;也交给了系统。</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>从 3.5 秒卡顿到 50ms 响应：相机控制 App 的指令队列三次重构</title><link>https://blog.shemu.top/posts/sony-control-command-queue-evolution/</link><guid isPermaLink="true">https://blog.shemu.top/posts/sony-control-command-queue-evolution/</guid><description>USB 相机接到桌面 App，第一张图等了 3.5 秒。围绕这个数字，我们把指令队列从 FFI 同步直调，搬到 C++ 异步 deque，又搬回 JS 编排层。三次重构的动机、方案、踩坑，记录在这里。</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>从 15 分钟到 5 分钟：当我们决定放弃 Electron 重写一个视频导出 App</title><link>https://blog.shemu.top/posts/electron-to-native-video-export-architecture/</link><guid isPermaLink="true">https://blog.shemu.top/posts/electron-to-native-video-export-architecture/</guid><description>一段 17 分钟的运动视频导出要 15 分钟，瓶颈出在哪里？分享我们从 Electron 同源渲染、并发多窗口踩坑，到彻底推翻重写为原生 C++ 引擎 + GPU 零拷贝方案的完整思考路径。</description><pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>流式，Agent 的神经系统</title><link>https://blog.shemu.top/posts/agent-streaming-nervous-system/</link><guid isPermaLink="true">https://blog.shemu.top/posts/agent-streaming-nervous-system/</guid><description>最近做的一个 Agent 项目里，流式输出能力补全的实现总结。</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>翻译: 为什么X不做成Hook</title><link>https://blog.shemu.top/posts/translate-overreacted-why-isnt-x-a-hook/</link><guid isPermaLink="true">https://blog.shemu.top/posts/translate-overreacted-why-isnt-x-a-hook/</guid><description>自从第一个拥有React Hooks的React的alpha版本发布之后。不断地会有人提出一些类似于这样的问题: &quot;为什么 某个API 不做成Hook&quot;。</description><pubDate>Sat, 26 Jan 2019 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>翻译: &quot;Bug-O&quot;表示法</title><link>https://blog.shemu.top/posts/translate-overreacted-the-bug-o-notation/</link><guid isPermaLink="true">https://blog.shemu.top/posts/translate-overreacted-the-bug-o-notation/</guid><description>当我们在编写一些需求高性能的代码的时候，我们需要养成一个时刻注意当前算法复杂度的习惯。我们通常通过大O表示法来评估。</description><pubDate>Fri, 25 Jan 2019 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>Egg中的错误处理</title><link>https://blog.shemu.top/posts/error-handler-in-egg/</link><guid isPermaLink="true">https://blog.shemu.top/posts/error-handler-in-egg/</guid><description>在文档中，明确的指出统一的错误处理是依靠一个onerror的插件来完成的，这个插件也是egg官方的一个默认开启的插件，官方提到会根据content-negotiation来判断具体的返回会使用JSON数据或者是一个html页面。我们可以自己启动一个server来验证一下，当...</description><pubDate>Wed, 09 Jan 2019 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>Egg项目中配置文件的keys</title><link>https://blog.shemu.top/posts/what-is-config-keys-doing/</link><guid isPermaLink="true">https://blog.shemu.top/posts/what-is-config-keys-doing/</guid><description>初始化Egg的项目后，如果我们没有在config中设置类似于:</description><pubDate>Fri, 28 Dec 2018 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>Egg的集群管理</title><link>https://blog.shemu.top/posts/node-cluster-in-egg/</link><guid isPermaLink="true">https://blog.shemu.top/posts/node-cluster-in-egg/</guid><description>初学node来编写server一般都是简单的启动一个挂起的的node进程:</description><pubDate>Tue, 25 Dec 2018 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>什么约束了基于Egg的项目的目录规范</title><link>https://blog.shemu.top/posts/what-make-rules-of-directory-for-egg-project/</link><guid isPermaLink="true">https://blog.shemu.top/posts/what-make-rules-of-directory-for-egg-project/</guid><description>在Egg项目的实践中，我们发现我们的目录结果是被规范约束的，比如我们需要把controller放到app/controller目录下，扩展会放在app/extend下等等，那么egg是如何处理这些文件的呢？</description><pubDate>Wed, 19 Dec 2018 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>深入egg-core前篇</title><link>https://blog.shemu.top/posts/pre-deep-into-egg-core/</link><guid isPermaLink="true">https://blog.shemu.top/posts/pre-deep-into-egg-core/</guid><description>我们会抛出一个问题，为什么Javascript在和这些语言竞争作为一个Server的语言中落了下风？</description><pubDate>Tue, 18 Dec 2018 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>翻译：为什么React Hooks需要遵循调用顺序</title><link>https://blog.shemu.top/posts/translate-overreacted-why-do-hooks-rely-on-call-order/</link><guid isPermaLink="true">https://blog.shemu.top/posts/translate-overreacted-why-do-hooks-rely-on-call-order/</guid><description>在React Conf 2018大会上，React团队向大家呈现了Hook提案</description><pubDate>Thu, 13 Dec 2018 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>翻译：优秀的API应该能够预知未来的改变</title><link>https://blog.shemu.top/posts/translate-overreacted-optimized-for-change/</link><guid isPermaLink="true">https://blog.shemu.top/posts/translate-overreacted-optimized-for-change/</guid><description>什么造就了一个好的API？</description><pubDate>Wed, 12 Dec 2018 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>翻译：setState是如何处理更新的</title><link>https://blog.shemu.top/posts/translate-overreacted-how-does-setstate-know-what-to-do/</link><guid isPermaLink="true">https://blog.shemu.top/posts/translate-overreacted-how-does-setstate-know-what-to-do/</guid><description>当你在组件里调用setState的时候，你觉得发生了设么？</description><pubDate>Sun, 09 Dec 2018 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>翻译：我对热更新的期望</title><link>https://blog.shemu.top/posts/translate-overreacted-my-wishlist-for-hot-reloading/</link><guid isPermaLink="true">https://blog.shemu.top/posts/translate-overreacted-my-wishlist-for-hot-reloading/</guid><description>你可能总是会有个一个项目，让你反复的去思考你的方案的利弊，有时候会停止一段时间，然后继续尝试新的方案 - 如是反复。对于你们，可能是一个路由或者一个虚拟滚动列表。对于我而言，应该算是热更新了</description><pubDate>Sat, 08 Dec 2018 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>翻译：为什么React的元素有一个叫做$$typeof的属性</title><link>https://blog.shemu.top/posts/translate-overreacted-why-do-react-elements-have-typeof-property/</link><guid isPermaLink="true">https://blog.shemu.top/posts/translate-overreacted-why-do-react-elements-have-typeof-property/</guid><description>想象一下如果你编写了下面的一段代码</description><pubDate>Mon, 03 Dec 2018 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>翻译：React是如何将Function转变成类的</title><link>https://blog.shemu.top/posts/translate-overreacted-how-does-react-tell-a-class-from-a-function/</link><guid isPermaLink="true">https://blog.shemu.top/posts/translate-overreacted-how-does-react-tell-a-class-from-a-function/</guid><description>我们可以先来看一下这个用函数定义的Greeting组件:</description><pubDate>Sun, 02 Dec 2018 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>翻译：为什么我们需要些super(props)</title><link>https://blog.shemu.top/posts/translate-overreacted-why-do-we-write-super-props/</link><guid isPermaLink="true">https://blog.shemu.top/posts/translate-overreacted-why-do-we-write-super-props/</guid><description>听说最近好像Hooks是一个热议的话题。可笑的是我的第一篇博客和这个相去甚远，我希望能够描述好组件class的内部巧妙的实现。不知道大家对这点是否有兴趣。</description><pubDate>Fri, 30 Nov 2018 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>尝试理解Promise源码</title><link>https://blog.shemu.top/posts/read-code-es-promise-polyfill/</link><guid isPermaLink="true">https://blog.shemu.top/posts/read-code-es-promise-polyfill/</guid><description>我们可以尝试从几个Promise的问题开始。</description><pubDate>Thu, 22 Nov 2018 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>浅析wepy源码</title><link>https://blog.shemu.top/posts/shallow-into-wepy-source-code/</link><guid isPermaLink="true">https://blog.shemu.top/posts/shallow-into-wepy-source-code/</guid><description>类vue的框架对于笔者而言其实是有点反感的。笔者是一位vim使用者，但是vim的vue插件真的做的不是特别好，由于我们一般会进行这样的设置autocmd BufRead,BufNewFile .vue setlocal filetype=vue.html.javascrip...</description><pubDate>Wed, 23 May 2018 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>静心打磨手中利刃之从Ghost到Passport</title><link>https://blog.shemu.top/posts/calm-to-polish-sword-ghost-to-passport/</link><guid isPermaLink="true">https://blog.shemu.top/posts/calm-to-polish-sword-ghost-to-passport/</guid><description>既然是接口的登录校验，那我们就直蹦core/server/routes/api.js的代码，我们会发现，这个Router在刚开始就声明了两种auth的中间件处理队列 javascript // no auth var authenticatePublic = [ middl...</description><pubDate>Sun, 22 Oct 2017 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>React-redux解读</title><link>https://blog.shemu.top/posts/read-react-redux/</link><guid isPermaLink="true">https://blog.shemu.top/posts/read-react-redux/</guid><description>写react项目快一年了，最近写项目用到了redux-saga这个框架，大家总是拿，redux-saga和redux-thunk相提并论，大概都是因为大家先用了redux-thunk，然后才用了redux-saga的缘由吧，因为我觉得确实redux-saga做的比redux...</description><pubDate>Mon, 11 Sep 2017 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>静心打磨手中利刃之Express</title><link>https://blog.shemu.top/posts/calm-to-polish-sword-express/</link><guid isPermaLink="true">https://blog.shemu.top/posts/calm-to-polish-sword-express/</guid><description>说到底Express只是一个框架而已，那么，他是一个什么框架呢，我们撇开Express不谈，我们想要完成一个Node的服务，只要如下的代码就可以完成:</description><pubDate>Wed, 06 Sep 2017 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>Docker我的前端项目</title><link>https://blog.shemu.top/posts/docker-my-fontend-project/</link><guid isPermaLink="true">https://blog.shemu.top/posts/docker-my-fontend-project/</guid><description>忘了从哪年起，Docker就开始流行起来，根据一个兄弟的描述来说，Docker刚开始起源于一家快要倒闭的公司，因为快要倒闭就将自己的项目开源出来，结果受到了广大开发者的关注，开始风靡起来。介绍一个东西怎么用之前，我们先弄清楚两点，这个东西是个什么东西，这个东西对我们有什么用。</description><pubDate>Wed, 31 May 2017 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item><item><title>Setting up your React /ES6 Development environment with Webpack, Express and Babel</title><link>https://blog.shemu.top/posts/settle-react-es6/</link><guid isPermaLink="true">https://blog.shemu.top/posts/settle-react-es6/</guid><description>转载自Setting up your React /ES6 Development environment with Webpack, Express and Babel</description><pubDate>Fri, 27 Jan 2017 00:00:00 GMT</pubDate><author>guoshencheng@shemu.top (Duluu Guo)</author></item></channel></rss>