<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[WindRunnerMax]]></title><description><![CDATA[自从厌倦于追寻，我已学一觅即中；当一股逆风袭来，我已能抵御八面来风，驾舟而行。]]></description><link>https://blog.youkuaiyun.com/qq_40413670</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_40413670]]></copyright><item><title><![CDATA[以轻量 LoopAgent 替代 RAG 实现文档检索]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/167668172</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/167668172</guid><author>qq_40413670</author><pubDate>Mon, 12 Oct 2026 09:46:55 +0800</pubDate><description><![CDATA[本文探讨基于PI框架实现轻量级文档检索Agent的思路，提出从“知识被动投放”向“模型主动探索”演进。通过Loop Agent机制，结合search_docs、list_docs、fetch_doc等工具，实现文档的智能检索与迭代优化。利用PI的steer/follow-up机制，支持动态干预与任务延续，提升检索灵活性与准确性，为知识库应用提供高效、自适应的解决方案。]]></description><category></category></item><item><title><![CDATA[从零实现富文本编辑器#14-编辑器历史变更管理与状态回溯]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/161998395</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/161998395</guid><author>qq_40413670</author><pubDate>Mon, 15 Jun 2026 10:59:45 +0800</pubDate><description><![CDATA[本文讨论了富文本编辑器中实现历史记录管理的两种方法：全量快照和基于变更的操作记录。重点分析了基于操作记录的实现方式，包括本地编辑场景下的撤销/重做功能，以及协同编辑场景中远程变更处理的复杂性。文章通过代码示例展示了如何记录和反转操作变更，并介绍了操作合并的策略。同时探讨了特殊场景（如图片上传）下的状态管理问题，提出了通过操作变换或合并操作来优化用户体验的方案。]]></description><category></category></item><item><title><![CDATA[基于 Markdown-It 的无序列表折叠插件]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/160817777</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/160817777</guid><author>qq_40413670</author><pubDate>Wed, 06 May 2026 11:02:10 +0800</pubDate><description><![CDATA[文章摘要： 本文探讨了在Markdown文档系统中实现折叠列表的技术方案。通过分析API文档的需求特点，提出利用HTML原生&lt;details&gt;和&lt;summary&gt;元素来实现无序列表的折叠展示效果。文章详细解析了无序列表到折叠结构的转换规则，包括将ul元素转换为block元素、将符合条件的li元素转换为details元素等。同时比较了在Markdown解析器MarkdownIt中实现该功能的两种技术路径：渲染时处理和解析时处理，并讨论了各自的优缺点。这种方案既能满足开发者阅读文档的需求]]></description><category></category></item><item><title><![CDATA[从零实现富文本编辑器#13-React非编辑节点的内容渲染]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/160104309</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/160104309</guid><author>qq_40413670</author><pubDate>Mon, 13 Apr 2026 10:41:10 +0800</pubDate><description><![CDATA[本文讨论了富文本编辑器中非编辑节点的内容渲染实现，主要包括占位节点、只读模式和插件渲染三个方面。在占位节点部分，分析了Quill和Slate的不同实现方式，提出了基于伪元素和React组件的解决方案，特别处理了IME输入时的显示问题。只读模式通过控制contentEditable属性和上下文状态实现，确保视图与状态同步。插件渲染模式则针对复杂节点类型（如超链接、引用块）提出了状态无关的渲染策略，优化了用户体验。文章还提供了相关开源项目的链接和系列教程参考，为开发者实现富文本编辑器提供了实用指导。]]></description><category></category></item><item><title><![CDATA[从零实现富文本编辑器#12-React可编辑节点的组件预设]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/159382918</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/159382918</guid><author>qq_40413670</author><pubDate>Mon, 23 Mar 2026 10:52:24 +0800</pubDate><description><![CDATA[本文讨论了富文本编辑器中编辑节点的组件预设实现，重点分析了零宽字符在选区模型和输入法处理中的关键作用。通过对比飞书文档等商业产品，阐述了零宽字符在Void节点和Embed节点中的不同应用场景，包括独占行节点处理、混合选区支持以及输入法兼容性问题。文章还介绍了编辑器框架如何通过预设组件结构（如HOC包装）来规范DOM行为，同时保持开发者自定义的灵活性。开源项目BlockKit提供了相关实现参考，展示了从零构建富文本编辑器的完整思路。]]></description><category></category></item><item><title><![CDATA[从零实现富文本编辑器#11-Immutable状态维护与增量渲染]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/157901534</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/157901534</guid><author>qq_40413670</author><pubDate>Mon, 09 Feb 2026 10:52:54 +0800</pubDate><description><![CDATA[本文探讨了富文本编辑器中增量更新与不可变状态的实现策略。首先分析了全量更新状态在性能上的不足，提出了基于行级不可变状态的优化方案，通过复用未变更的LineState对象减少重建开销。文章详细阐述了如何通过Delta操作实现行级别的状态更新，包括保留、删除和新增行状态的策略。同时讨论了LeafState与LineState的映射关系，以及如何利用\n节点作为状态映射的关键。最后提及了React视图层中key值维护的重要性，为后续实现高效渲染奠定了基础。这些优化策略旨在提升大型文档编辑时的性能表现。]]></description><category></category></item><item><title><![CDATA[从零实现富文本编辑器#10-React视图层适配器的模式扩展]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/156854884</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/156854884</guid><author>qq_40413670</author><pubDate>Mon, 12 Jan 2026 11:13:56 +0800</pubDate><description><![CDATA[本文介绍了基于MVC模式的富文本编辑器视图层设计，重点讨论了React作为视图层的适配方案。文章指出复用现有视图框架可以避免重新设计渲染逻辑，但需要处理视图状态同步、增量更新、DOM检查等核心问题。作者详细分析了编辑器生命周期与React组件的同步机制，探讨了实例化时机、SSR渲染、组件卸载等场景下的解决方案。同时提出了样式处理、文本换行等具体实现细节，并强调需要严格控制编辑器实例与组件的对应关系。项目开源地址和系列教程文章已提供，展示了从零实现富文本编辑器的完整思路。]]></description><category></category></item><item><title><![CDATA[从零实现富文本编辑器#9-编辑器文本结构变更的受控处理]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/156145504</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/156145504</guid><author>qq_40413670</author><pubDate>Mon, 22 Dec 2025 10:57:12 +0800</pubDate><description><![CDATA[本文探讨了富文本编辑器中处理文本结构性变更（如回车、删除、拖拽等操作）的关键问题。重点分析了回车操作在不同浏览器的差异表现，以及如何通过受控处理实现行结构的拆分和格式继承。作者提出基于BeforeInput事件阻止默认行为，结合Delta数据结构实现通用变更模式，并讨论了行格式继承的潜在解决方案。文章还简要提及删除和拖拽操作的处理策略，强调需关注Unicode字符和选区同步问题。开源项目BlockKit提供了相关实现参考。]]></description><category></category></item><item><title><![CDATA[基于 NodeJs 的分布式任务队列与容器优雅停机]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/155190973</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/155190973</guid><author>qq_40413670</author><pubDate>Mon, 24 Nov 2025 10:59:26 +0800</pubDate><description><![CDATA[本文探讨了后端异步任务处理方案，重点介绍了任务队列和优雅停机的实现。针对文档处理、LLMs调用等耗时任务，提出了基于内存变量控制并发的单实例任务队列方案，通过分配/释放Quota实现流量削峰。同时阐述了分布式锁的设计思路，并解释了递归调用中process.nextTick避免栈溢出的原理。优雅停机部分则涉及请求处理、资源释放等关键环节，为Node.js应用提供可靠的任务管理和进程关闭方案。]]></description><category></category></item><item><title><![CDATA[从零实现富文本编辑器#8-浏览器输入模式的非受控DOM行为]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/153624063</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/153624063</guid><author>qq_40413670</author><pubDate>Mon, 20 Oct 2025 11:10:28 +0800</pubDate><description><![CDATA[本文探讨了在实现富文本编辑器时处理浏览器DOM结构默认行为和IME输入法兼容性的挑战。文章分析了浏览器在ContentEditable模式下不同表现（如回车键处理差异），并提出通过脏DOM检查修复非受控输入导致的结构问题。重点介绍了针对行内节点的处理方案：利用WeakMap映射叶子状态，在行状态变更后检查并修正文本节点内容差异，确保DOM结构与Model层同步。该方法在保证性能的同时，有效解决了IME输入时浏览器默认行为与编辑器控制逻辑不一致的问题。]]></description><category></category></item><item><title><![CDATA[仿照豆包实现 Prompt 变量模板输入框]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/151957446</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/151957446</guid><author>qq_40413670</author><pubDate>Mon, 22 Sep 2025 10:57:36 +0800</pubDate><description><![CDATA[本文探讨了Prompt输入框的交互设计与实现方式，重点分析了豆包Web版中&quot;帮我写作&quot;模块的模板输入框设计。文章对比了三种常见实现形式：纯文本输入框、表单变量模板和变量模板输入框，详细解析了各自的特点与应用场景。特别关注了豆包采用slate框架实现变量模板输入框的技术细节，包括光标位置处理、inline节点设计等核心问题。最后提供了GitHub搜索框高亮匹配的实现示例，并介绍了如何通过CSS技巧实现透明输入与样式层叠的效果。文章附有相关代码示例和实现参考链接。]]></description><category></category></item><item><title><![CDATA[在富文本编辑器中实现 Markdown 流式增量解析算法]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/151140431</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/151140431</guid><author>qq_40413670</author><pubDate>Wed, 03 Sep 2025 10:31:13 +0800</pubDate><description><![CDATA[本文探讨了在SSE流式输出基础上实现Markdown增量解析与富文本编辑器渲染结合的算法。文章分析了流式场景下处理不完整Markdown文本的挑战，提出了增量解析的三个关键点：流式处理、增量更新和富文本解析。作者介绍了基于marked的词法解析方案，详细说明了归档索引机制和Token转换Delta片段的过程，并提供了heading和bold格式的解析示例。该算法能有效解决编辑器数据结构与DOM渲染的兼容问题，同时处理流式输出中的语法错误匹配问题。]]></description><category></category></item><item><title><![CDATA[从零实现富文本编辑器#7-基于组合事件的半受控输入模式]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/151105158</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/151105158</guid><author>qq_40413670</author><pubDate>Tue, 02 Sep 2025 10:33:50 +0800</pubDate><description><![CDATA[摘要 本文探讨了富文本编辑器中的输入模式实现，重点介绍了基于组合事件的半受控输入方案。文章分析了三种输入模式：非受控输入（完全依赖浏览器行为）、半受控输入（结合浏览器与自定义控制）和受控输入（完全自定义实现）。作者详细解析了Quill编辑器的非受控输入实现机制，包括通过MutationObserver监听DOM变化、文本diff算法获取变更操作等核心逻辑。文章还讨论了输入法兼容性等挑战，并提供了开源项目BlockKit的相关资源链接（GitHub仓库、在线编辑器和项目笔记）。]]></description><category></category></item><item><title><![CDATA[浅谈 RAG 并基于 NodeJS 实现基础向量检索服务]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/149961701</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/149961701</guid><author>qq_40413670</author><pubDate>Wed, 06 Aug 2025 10:24:16 +0800</pubDate><description><![CDATA[本文介绍了RAG（Retrieval-Augmented Generation）技术在自然语言处理中的应用。RAG通过结合检索和生成技术，有效提升了问答、代码生成等任务的准确性和专业性。文章重点探讨了RAG中文本向量化处理的关键环节，特别是数据分片策略：包括固定长度分片、基于句段分片和基于结构分片三种方式，分析了各自的优缺点及适用场景。作者指出当前RAG服务已较为成熟，但仍需根据具体需求选择合适的分片策略，通过重叠分片等方式优化检索效果。文章最后实现了一个基础RAG示例，展示了文本向量化和检索的核心流程。]]></description><category></category></item><item><title><![CDATA[从零实现富文本编辑器#6-浏览器选区与编辑器选区模型同步]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/149931616</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/149931616</guid><author>qq_40413670</author><pubDate>Tue, 05 Aug 2025 10:42:36 +0800</pubDate><description><![CDATA[本文介绍了浏览器选区与编辑器选区模型的同步实现。基于Range和Selection对象设计了两种选区模型(RawRange和Range)，并探讨了如何建立DOM选区与编辑器选区的关联关系。文章详细分析了选区同步的四种主要挑战：文本节点选区处理、非文本节点选区处理、选区状态标记以及浏览器事件兼容。作者提出通过双向转换机制实现选区同步，并分享了实现过程中的关键见解，包括参考quill和slate的设计思路、使用WeakMap优化节点映射等。该项目已开源，提供了在线演示和相关技术文档链接。]]></description><category></category></item><item><title><![CDATA[从零实现富文本编辑器#5-编辑器选区模型的状态结构表达]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/148555120</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/148555120</guid><author>qq_40413670</author><pubDate>Tue, 10 Jun 2025 10:25:06 +0800</pubDate><description><![CDATA[本文探讨了富文本编辑器选区模型的设计实现，重点对比了Quill、Slate和Lexical三种主流编辑器的数据结构与选区表达方式。选区模型的设计直接影响编辑器变更操作的效率，并分析了不同数据结构在遍历查找和应用变更时的优劣。]]></description><category></category></item><item><title><![CDATA[从零实现富文本编辑器#4-浏览器选区模型的核心交互策略]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/148278775</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/148278775</guid><author>qq_40413670</author><pubDate>Wed, 28 May 2025 10:27:00 +0800</pubDate><description><![CDATA[本文探讨了富文本编辑器中选区模型的设计与实现，重点分析了基于浏览器原生Range和Selection对象的选区操作机制。文章指出选区模型直接决定了编辑器操作范围的表现，并通过示例展示了Quill和Slate两种编辑器在选区表达上的差异。详细解析了Range对象的属性和方法（如setStart、getBoundingClientRect等），以及如何通过Selection对象处理用户选区交互。最后介绍了利用::highlight伪元素实现文本高亮的方法，为富文本编辑器的选区功能开发提供了实践指导。 ]]></description><category></category></item><item><title><![CDATA[富文本编辑器剪贴板模块基石-序列化与反序列化]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/147755203</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/147755203</guid><author>qq_40413670</author><pubDate>Wed, 07 May 2025 10:20:54 +0800</pubDate><description><![CDATA[在富文本编辑器中，序列化与反序列化是非常重要的环节，其涉及到了编辑器的内容复制、粘贴、导入导出等模块。当用户在编辑器中进行复制操作时，富文本内容会被转换为标准的HTML格式，并存储在剪贴板中。而在粘贴操作中，编辑器则需要将这些HTML内容解析并转换为编辑器的私有JSON结构，以便于实现跨编辑器内容的统一管理。]]></description><category></category></item><item><title><![CDATA[偶然发现Git文件夹非常大，使用BGF来处理Git历史Blob文件]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/147606091</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/147606091</guid><author>qq_40413670</author><pubDate>Tue, 29 Apr 2025 12:43:27 +0800</pubDate><description><![CDATA[我们使用Git来管理项目的时候，可能会提交一些Blob的二进制文件，这些文件并不能像文本文件一样采用diff delta的形式进行版本控制。如果这些文件一直跟随master的主版本，那么就是属于有效的文件。然而很多时候这些二进制文件会被删除重建，那么由于Git的特性，这些文件会一直留在Git的历史记录中，这样会导致Git仓库变得庞大，不利于版本控制和迁移。最直观的就是clone的时候会很慢，而使用--depth=1则无法看到历史提交的代码。]]></description><category></category></item><item><title><![CDATA[基于 OT-JSON 与 Immer 设计低代码/富文本场景的状态管理方案]]></title><link>https://blog.youkuaiyun.com/qq_40413670/article/details/147442455</link><guid>https://blog.youkuaiyun.com/qq_40413670/article/details/147442455</guid><author>qq_40413670</author><pubDate>Wed, 23 Apr 2025 10:13:35 +0800</pubDate><description><![CDATA[在这里我们基于Immer和OT-JSON设计了一套应用状态管理方案，通过Immer的草稿机制简化不可变数据操作，结合OT-JSON的原子化操作与协同算法，实现原子化、可协同、高扩展的应用级状态管理方案，以及按需渲染的视图性能优化方案。整体来说，这个方案比较适用于嵌套数据结构的动态组合与状态管理。在实际应用中，我们还是需要根据场景来选择合适的状态管理方案。在应用级别的场景中，例如富文本、画板、低代码中，顶层的架构设计还是非常重要的，所有的状态变更、节点类型都应该由这层架构设计扩展出来。]]></description><category></category></item></channel></rss>