news 2026/9/10 3:14:06

思源笔记 v2.10.16 版本深度解析:闪卡进度重置、同步完整性校验与桌面端独立显卡优化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
思源笔记 v2.10.16 版本深度解析:闪卡进度重置、同步完整性校验与桌面端独立显卡优化

思源笔记 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

导读:本文基于思源笔记(SiYuan)v2.10.16 版本官方更新日志(繁体中文版、简体中文版),结合仓库内核源码(kernel/model/flashcard.go、kernel/api/search.go 等)对该版本的核心特性进行纵深解读。读完本文,你将掌握闪卡复习进度的重置机制与底层实现、数据同步本地分块完整性校验的改进要点、桌面端多显卡场景下独立显卡的默认启用方式,以及/api/query/sql新运算符与/api/search/getEmbedBlock内核 API 的使用方法,并了解本版本在编辑器交互、移动端、AI 模型支持等多个维度的细节变更。

版本概述:三大核心改进

v2.10.16 是思源笔记 v2.10.x 系列的一个功能增强型版本,其概述明确指出本版本的三项核心改进:

  1. 支持重置闪卡复习进度——解决闪卡学习过程中"进度失控、无法重新开始"的痛点;
  2. 改进了数据同步本地分块完整性校验——增强同步过程中的数据可靠性;
  3. 桌面端多显卡时默认使用独立显卡——改善集成显卡机型上渲染性能。

除此之外,该版本还围绕编辑器交互、文档切换、移动端体验、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函数中完成,其实现非常巧妙——它构造了两个连续的内核事务操作(PerformTransactions):

transactions := []*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.SliceFSRSCard.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`)和键盘元素(如<kbd>Ctrl</kbd>)上右键,可直接复制其内容,无需先选中再复制;
  • 行级代码与代码块中停用拼写检查(#9672):避免在代码语境中出现误报的拼写错误提示;
  • 行级公式与备注支持保留换行(#9664):在行级公式($...$)和备注中输入换行后,渲染时能够正确保留;
  • 行级代码、标签和键盘元素首字母前按回车后不保留空元素(#9682):优化了在这些内联元素开头处按回车后的交互,避免残留空元素;
  • 改进行级代码前删除的交互(#9690):在行级代码前执行删除操作时的行为更加符合直觉;
  • 改进行级代码前删除的交互(#9690):同上,为行级代码边界处的删除操作提供了更友好的体验;
  • macOS 桌面端^D默认操作改进(#9643):调整了 macOS 上Ctrl+D的默认行为,减少误触冲突。

页签与窗口管理

  • 页签支持"取消全部分屏"和"取消分屏"(#9586):当文档被分屏显示后,可通过页签右键菜单快速取消全部或单个分屏;
  • 多窗口情况下创建日志不再切换(#9669):在后台窗口创建日志(日记)时,焦点不再强制切换到该窗口,避免打断当前工作流;
  • 最近文档切换器支持输入搜索过滤(#9663)并在主菜单中新增入口(#9666):切换最近文档时可直接输入关键词过滤,且主菜单中可以直接打开该切换器;
  • 支持调整配置快捷键Ctrl+TabCtrl+Shift+Tab(#9645):这两个页签切换快捷键此前为固定行为,本版本起可在快捷键设置中自定义。

引用与面包屑

  • 同一个块重复引用相同块时仅计一次引用(#9670):修正了反链/引用统计中同一文档内重复引用被多次计数的行为;
  • 移动端和平板端支持长按面包屑打开文档(#9674):在移动设备上通过长按面包屑可直接打开对应上级文档;
  • 移动端支持"启动时关闭所有页签"(#9678):移动端新增该启动选项,保证每次打开应用时页签环境干净。

AI 能力:新增 OpenAI 模型支持

本版本为 AI 写作/问答功能扩展了 OpenAI 模型白名单(#9659),新增支持:

  • gpt-3.5-turbo-1106
  • gpt-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)的块 ID
includeIDsstring[]需要包含的块 ID 列表
headingModeint(可选)0:显示标题与下方块;1:仅显示标题;2:仅显示标题下方的块
breadcrumbbool(可选)是否返回面包屑信息

接口返回blocks字段,其中包含嵌入块所关联的内容块。值得注意的是源码注释提到该接口同时支持查询嵌入块时执行 JavaScript(对应 issue #9648),即嵌入块中的动态内容可以在查询时被求值。在只读角色(ReadOnly)上下文中,响应会经过发布访问(Publish Access)过滤(kernel/model/search.go 中的GetEmbedBlockFilterEmbedBlocksByPublishAccess)。

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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 3:13:55

补全项目信息,获得高质量技术博客的生成基础

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 3:13:06

读懂ESP32核心板原理图:供电、引脚占用与MicroPython实战排查

简介&#xff1a;面向ESP32入门者与物联网项目开发者&#xff0c;压缩包整合了核心板及扩展板硬件原理图、ESP32中文手册和MicroPython实验例程&#xff0c;涵盖电路设计、传感器接入与WiFi/蓝牙通信等场景&#xff0c;可帮助读者从硬件到代码形成完整认知。包体共104个文件、约…

作者头像 李华
网站建设 2026/9/10 3:10:26

Scrapy爬取裁判文书网:加密参数还原与中间件实战

简介&#xff1a;这是一份基于 Scrapy 框架实现裁判文书网爬虫的完整项目源码&#xff0c;主要面向正在学习 Python 网络爬虫、准备毕业设计或课程设计的高校学生&#xff0c;也适合需要参考真实项目结构、希望快速上手数据采集的中级开发者。项目已经过本地编译验证&#xff0…

作者头像 李华
网站建设 2026/9/10 3:06:36

DevOps 平台有哪些?2026 主流企业级方案 4 类形态盘点

把 Jenkins 称作"DevOps 平台"&#xff0c;可能是过去十年选型里最贵的一个误会。 打开任何一份"DevOps 平台有哪些"的清单&#xff0c;Jenkins 几乎都在列&#xff1b;可它真正擅长的是流水线执行与插件生态&#xff0c;代码托管、制品策略、需求与审计都…

作者头像 李华
网站建设 2026/9/10 3:06:21

MoE混合精度量化实战:门控保精度+专家激进压缩

1. 这不是“把模型变小”的简单操作&#xff0c;而是给大模型装上智能节油系统你肯定见过这样的场景&#xff1a;一个70B参数的MoE大模型&#xff0c;在A100上推理时显存占用飙到85GB&#xff0c;吞吐量卡在3.2 token/s&#xff1b;而换用W8A8混合精度量化后&#xff0c;显存压…

作者头像 李华