
思源笔记 v2.10.16 版本深度解析闪卡进度重置、同步完整性校验与桌面端独立显卡优化【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan导读本文基于思源笔记SiYuanv2.10.16 版本官方更新日志繁体中文版、简体中文版结合仓库内核源码kernel/model/flashcard.go、kernel/api/search.go 等对该版本的核心特性进行纵深解读。读完本文你将掌握闪卡复习进度的重置机制与底层实现、数据同步本地分块完整性校验的改进要点、桌面端多显卡场景下独立显卡的默认启用方式以及/api/query/sql新运算符与/api/search/getEmbedBlock内核 API 的使用方法并了解本版本在编辑器交互、移动端、AI 模型支持等多个维度的细节变更。版本概述三大核心改进v2.10.16 是思源笔记 v2.10.x 系列的一个功能增强型版本其概述明确指出本版本的三项核心改进支持重置闪卡复习进度——解决闪卡学习过程中进度失控、无法重新开始的痛点改进了数据同步本地分块完整性校验——增强同步过程中的数据可靠性桌面端多显卡时默认使用独立显卡——改善集成显卡机型上渲染性能。除此之外该版本还围绕编辑器交互、文档切换、移动端体验、AI 模型支持、开发者 API 等方向做了大量细节改进并修复了一项缺陷。以下按变更记录的分组逐项展开。核心特性一支持重置闪卡复习进度功能背景与使用场景在闪卡Flashcard的间隔重复Spaced Repetition学习中卡片会根据用户的复习表现不断调整下次复习时间与调度状态。当用户希望从头开始学习某张卡片、某个文档甚至整个笔记本的闪卡时v2.10.16 之前缺乏一键重置的手段。本次更新对应官方 issue #9564新增了重置闪卡复习进度能力用户可以在闪卡管理界面中按文档tree、笔记本notebook或卡包deck维度批量重置复习进度。源码级实现原理重置功能的内核实现位于 kernel/model/flashcard.go 的ResetFlashcards函数中。从源码结构看其核心逻辑可以概括为三层第一层按维度收集块 ID。函数签名ResetFlashcards(typ, id, deckID string, blockIDs []string)支持两种调用路径当blockIDs非空时表示调用方已明确指定要重置的块集合。此时如果deckID为空例如从全局闪卡管理入口进入内核会遍历所有卡包逐个卡包查找包含这些块的卡包 ID 后分别执行重置对应注释从全局管理进入时不会指定卡包 ID这时需要遍历所有卡包当blockIDs为空时则根据typ参数notebook、tree、deck三种类型分页拉取对应范围内的全部闪卡块收集其块 ID 后统一重置。第二层事务化的移除 重新添加。真正的重置动作在resetFlashcards函数中完成其实现非常巧妙——它构造了两个连续的内核事务操作PerformTransactionstransactions : []*Transaction{ { DoOperations: []*Operation{ { Action: removeFlashcards, DeckID: deckID, BlockIDs: blockIDs, }, }, }, { DoOperations: []*Operation{ { Action: addFlashcards, DeckID: deckID, BlockIDs: blockIDs, }, }, }, }即先执行removeFlashcards将卡片从卡包中移除再立即执行addFlashcards重新为这些块添加全新卡片。由于新添加的卡片没有历史复习记录其调度状态自然回到初始状态从而实现了重置效果。这种方式利用了既有的事务机制保证操作可回滚、可同步并且与数据仓库的变更记录体系天然兼容。第三层块属性IAL的同步维护。在移除阶段doRemoveFlashcards会通过removeBlocksDeckAttr清理块的 IAL 属性NodeAttrRiffDecks在添加阶段doAddFlashcards则重新写入卡包 ID 属性。值得注意的是源码中明确标注了加密笔记本不支持闪卡注释加密笔记本不支持闪卡移除时也跳过避免无谓写入加密 tree重置操作会跳过加密笔记本中的块避免明文复习计划落盘全局 riff 存储。相关配套改进与本特性配套本版本还通过 PR #9673 实现了闪卡管理界面按到期时间升序排序。这一逻辑同样体现在源码中kernel/model/flashcard.go 的getCardsBlocks函数在返回卡片列表前先使用sort.Slice按FSRSCard.C.Due下次复习时间升序排列due为零值未安排复习的新卡时则按卡片 ID 排序保证管理界面中最紧急的卡片排在最前。核心特性二改进数据同步本地分块完整性校验数据同步是思源笔记云服务的关键能力。同步引擎在传输前会将数据切分为块chunk并计算校验信息v2.10.16对应 issue #9688对本地分块完整性校验进行了改进主要目的是在同步前更早、更准确地发现本地数据块的损坏或缺失避免将损坏数据上传或导致同步失败。从仓库结构看同步相关实现分布在 kernel/model/sync.go 与 kernel/model/cloud_service.go 等文件中本次改进属于同步链路底层的健壮性增强通过更严格的本地分块校验将问题拦截在数据上传之前降低云端数据被污染的风险。此外版本还提供了数据同步索引耗时提示的配置能力issue #9698用户可以在设置中开启以便在同步索引耗时较长时获得明确的进度反馈。同步设置入口为设置 → 关于 → 数据同步中的对应选项具体配置项名为数据同步索引耗时提示。核心特性三桌面端多显卡时默认使用独立显卡针对搭载双显卡如 Intel 核显 NVIDIA/AMD 独显的桌面机型v2.10.16对应 issue #9694让思源笔记桌面端在检测到多显卡可用时默认使用独立显卡运行。这一改进的实用价值在于Electron 应用默认通常由系统分配 GPU往往倾向省电的集成显卡导致界面渲染尤其是大型文档、白板、图表等 GPU 负载场景卡顿。默认启用独立显卡可显著提升渲染流畅度同时用户依然可以在系统中手动切换回集成显卡以节省功耗。与之配套桌面端还新增了设置 Chromium 命令行参数的能力issue #9696允许高级用户通过配置向底层 Chromium 传递自定义命令行参数例如强制启用硬件加速的--enable-gpu或禁用 GPU 的--disable-gpu等相关入口位于桌面端设置中这为 GPU 兼容性问题提供了灵活的兜底手段。编辑器与交互体验改进本版本在编辑器与通用交互上有一批细致入微的改动覆盖复制菜单、拼写检查、换行保留、空元素清理等场景行级代码与键盘元素的右键复制菜单#9630在行级代码如code和键盘元素如kbdCtrl/kbd上右键可直接复制其内容无需先选中再复制行级代码与代码块中停用拼写检查#9672避免在代码语境中出现误报的拼写错误提示行级公式与备注支持保留换行#9664在行级公式$...$和备注中输入换行后渲染时能够正确保留行级代码、标签和键盘元素首字母前按回车后不保留空元素#9682优化了在这些内联元素开头处按回车后的交互避免残留空元素改进行级代码前删除的交互#9690在行级代码前执行删除操作时的行为更加符合直觉改进行级代码前删除的交互#9690同上为行级代码边界处的删除操作提供了更友好的体验macOS 桌面端^D默认操作改进#9643调整了 macOS 上CtrlD的默认行为减少误触冲突。页签与窗口管理页签支持取消全部分屏和取消分屏#9586当文档被分屏显示后可通过页签右键菜单快速取消全部或单个分屏多窗口情况下创建日志不再切换#9669在后台窗口创建日志日记时焦点不再强制切换到该窗口避免打断当前工作流最近文档切换器支持输入搜索过滤#9663并在主菜单中新增入口#9666切换最近文档时可直接输入关键词过滤且主菜单中可以直接打开该切换器支持调整配置快捷键CtrlTab和CtrlShiftTab#9645这两个页签切换快捷键此前为固定行为本版本起可在快捷键设置中自定义。引用与面包屑同一个块重复引用相同块时仅计一次引用#9670修正了反链/引用统计中同一文档内重复引用被多次计数的行为移动端和平板端支持长按面包屑打开文档#9674在移动设备上通过长按面包屑可直接打开对应上级文档移动端支持启动时关闭所有页签#9678移动端新增该启动选项保证每次打开应用时页签环境干净。AI 能力新增 OpenAI 模型支持本版本为 AI 写作/问答功能扩展了 OpenAI 模型白名单#9659新增支持gpt-3.5-turbo-1106gpt-4-1106-preview用户在 AI 相关设置中选择模型时即可在下拉列表中选用上述新模型。需要说明的是模型名称需与使用的 API 服务实际兼容未在列表中的模型可通过自定义模型地址等方式接入具体以仓库 kernel/model/ai.go 的实现与 AI 设置界面为准。鉴权页与数据仓库清理改进改进鉴权页退出应用#9680鉴权身份验证页面上的退出操作流程更清晰避免误触退出清理数据仓库时清理校验索引#9665执行清理数据仓库时同时清理与之关联的校验索引避免清理后残留无效索引导致后续校验异常。缺陷修复本版本修复的缺陷数量不多但针对性强无法删除空格命名的查询条件#9700此前在数据库/查询条件中名称为空格的条件无法被删除本版本修复了该交互问题。文档改进Docker Compose 示例本版本通过 PR #9679 新增了Docker Compose 部署示例并更新了用户指南中数据同步章节的注意事项#9699。对于希望以容器化方式自托管思源笔记的用户可以参考仓库根目录的 Dockerfile 以及新增的 Compose 示例进行编排部署同步章节的注意事项更新则帮助自托管用户正确理解数据同步的边界与行为。由于本文基于更新日志撰写具体 Compose 文件内容以仓库 docs 目录及发行说明为准。开发者相关变更本版本面向开发者/插件作者提供了多项内核与数据库能力升级1. 内核 API/api/query/sql支持||运算符#9662/api/query/sql是思源笔记暴露给插件/脚本执行 SQL 查询的内核接口。本版本起该接口支持的 SQL 语法新增了||连接运算符即可以在查询中使用A || B拼接字符串。该运算符由底层 SQLite 引擎解析便于在查询结果中直接生成拼接字段例如block_id || - || type这类表达式减少在应用层二次拼接的代码量。相关路由注册可参见 kernel/api/router.go。2. 新增内部内核 API/api/search/getEmbedBlock#9681本版本新增了内部内核 API/api/search/getEmbedBlock其服务端处理函数getEmbedBlock位于 kernel/api/search.go。从源码看该接口接收以下请求参数参数类型说明embedBlockIDstring嵌入块Embed Block的块 IDincludeIDsstring[]需要包含的块 ID 列表headingModeint可选0显示标题与下方块1仅显示标题2仅显示标题下方的块breadcrumbbool可选是否返回面包屑信息接口返回blocks字段其中包含嵌入块所关联的内容块。值得注意的是源码注释提到该接口同时支持查询嵌入块时执行 JavaScript对应 issue #9648即嵌入块中的动态内容可以在查询时被求值。在只读角色ReadOnly上下文中响应会经过发布访问Publish Access过滤kernel/model/search.go 中的GetEmbedBlock与FilterEmbedBlocksByPublishAccess。3. 数据库表格视图增强#9660 / #9667表格视图勾选框列#9667数据库表格视图中新增勾选框列便于快速选中/标记行调整列宽后计算行未对齐#9660修复了表格视图中调整列宽后计算行汇总/统计行与数据列未对齐的显示问题。4. heading2doc / li2doc 排序改进#9668改进了文档树转换heading 转文档、列表项转文档场景下的排序逻辑使批量转换后的文档顺序更加稳定、可预期。版本升级建议对于重度使用闪卡复习的用户v2.10.16 的重置进度功能值得立即体验——可在闪卡管理界面按文档/笔记本/卡包重置或在内核事务层面理解其移除后重建卡片的实现对于双显卡笔记本用户升级后思源笔记将自动优先使用独立显卡若遇到渲染异常可通过新增的 Chromium 命令行参数配置进行排查对于插件开发者/api/query/sql的||运算符与新增的/api/search/getEmbedBlock接口可以直接在插件中调用相关请求参数与返回结构可参考上述源码位置。该版本的完整官方变更记录可分别查阅 v2.10.16 英文版、简体中文版 与繁体中文版闪卡相关实现可深入阅读 kernel/model/flashcard.go搜索类 API 实现可参考 kernel/api/search.go 与 kernel/model/search.go。【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考