思源笔记 v2.8.4 发布深度解读:移动端体验重塑、闪卡与搜索增强、新增内核 Move Block API
【免费下载链接】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.8.4 于 2023-04-11 发布,是 2.8.x 系列中一次以“移动端体验重塑 + 内核健壮性加固”为核心的迭代,覆盖交互细节、搜索、闪卡、AI、编辑器与内核 API 等近 40 项改进。本文以仓库中的官方发布说明 v2.8.4.md(及其 简体中文对照版)为主体,结合仓库源码逐条展开说明,帮助读者完整理解本次版本的变化、背后的实现位置,以及可用于二次开发的关键改动。
版本信息与变更日志规范
本次版本为v2.8.4,属于思源笔记桌面端 / 移动端 / 内核同步发布的例行版本。值得注意的是,本版本同时也是思源笔记变更日志管理方式的“分水岭”:此前 CHANGELOG 采用单一文件累积,而本版本起改为每个发布版本独立成文件、并在发布目录内同时提供英文与简体中文两份对照(见 app/changelogs 目录结构)。仓库根目录的 CHANGELOG.md 与 kernel、app 中各模块源码共同构成了可逐条追溯发布内容的完整证据链。
本次变更共分为五个类别,下文按主题重组后逐类展开,确保原发布说明中的每一条都被覆盖并补充说明。
移动端交互体验改进(本版本改进密度最高的区域)
v2.8.4 在移动端(Android / iOS)投入了大量交互打磨,主要围绕“手势防误触、软键盘配合、面板拉出、图片浏览、退出路径”等高频场景:
- 退出与返回路径更清晰:移动端退出应用按钮被调整到更易点击的位置(#7879);Android 端按返回键时提示返回桌面,而非直接退出(#7886);Android 浏览图片时支持通过系统返回键返回上一级(#7938)。
- 手势与面板冲突修复:在移动端图表上滑动不再拉出侧栏面板(#7882);左右滑动拉出侧栏面板时,编辑器自动失焦(#7896);iOS 端拖拽音频块播放进度条时不再误拉出左右侧栏(#7898);移动端支持悬浮软键盘(#7940)。
- 工具栏与菜单呈现优化:改进移动端编辑工具栏
+的点击交互一致性(#7885);行级元素(内联样式)菜单仅在点击BIU或选中文本后才弹出,避免误触(#7892);修复移动端编辑工具栏下方空白遮挡问题(#7880);改进某些移动设备上非全屏菜单的显示(#7912);为移动端弹出菜单增加过渡动画(#7934)。 - 斜杠菜单与键盘联动:在移动端点击斜杠菜单后,隐藏键盘即可关闭斜杠菜单(#7895)。
- 编辑器内容支持增强:移动端支持 KaTeX 宏定义渲染(#7909),保证数学公式宏在移动端与桌面端一致;在标题块开头输入
#不再弹出标签搜索列表(#7933),消除输入歧义。 - 整体体验:针对移动端用户交互体验做了一轮系统性改进(#7335),涉及多处细节收敛;移动端搜索输入(代码块语言、模板、嵌入块等场景)与整体搜索功能均有增强(#7597、#7830),相关交互实现位于 app/src/mobile 目录下的移动端专属逻辑中。
提示:移动端与桌面端共享编辑器内核(app/src/editor、app/src/protyle),差异部分集中在 app/src/mobile,上述改动大多通过该目录与平台适配代码实现。
编辑器、文档编排与布局
桌面端编辑器与内容组织同样有多处行为调整,直接影响日常书写效率:
- 标题块级别快速修改:现在可以直接在标题行首输入
#来调整标题级别(#7924),配合“标题块开头输入#不再弹出标签搜索”的改动(#7933),两者共同构成更顺手的标题编辑流。大纲面板同步支持显示标题块的外观样式(#7872),便于在文档结构视图中直接看到标题所用样式。 - 页签与分屏定位:改进页签分屏切换后的浏览位置定位(#7915),切换页签后会按区域(range)重新定位到原阅读位置;修复快速关闭页签导致编辑区白屏的问题(#7878),保证多页签高频操作下的稳定性。
- 布局保存:保存布局(layout)支持同名覆盖(#7893),避免重复新建同名布局;同时修复保存新窗口布局时的错误(#7913)。
- 超级块排版:超级块水平布局时增加了子块之间的间隔(#7939),缓解多个子块紧贴带来的视觉拥挤。
- 表格解析修复:修复表格内超链接地址或标题包含
|时的解析错误(#7917),避免 Markdown 表格分隔符被误判。
以上布局相关代码主要位于 app/src/layout,文档树与标题相关的折叠/移动逻辑见 kernel/api/block_op.go、kernel/treenode。
搜索:输入体验与性能监控
本版本对搜索进行了输入体验与性能两个层面的改进:
- 搜索输入优化:代码块语言、模板、嵌入块等“结构化候选”的搜索输入体验得到改进(#7597),输入更少字符即可命中目标项。
- 移动端搜索增强(#7830)覆盖移动端搜索交互链路。
- 搜索性能监控:新增搜索性能监控并在必要时给出优化建议(#7873)。该主题在文档层面也有呼应——本次随版本在用户指南中新增了“性能优化”章节(#7889)。
从内核看,搜索链路分布在 kernel/api/search.go(对外 API)、kernel/model/search.go(执行逻辑)与 kernel/search(底层索引与命中等),其中中文繁简处理还受 kernel/conf/search.go 中hanSensitive(是否区分繁简字形)等配置约束;前端搜索交互则在 app/src/search 目录中维护。性能建议的落地通常与数据量、索引规模相关,若在超大数据集上检索变慢,可按用户指南中的性能优化章节排查。
闪卡(间隔重复)体系的同步增强
闪卡相关改动横跨“入口便捷性、移动端展示、编辑撤销、写入可靠性、底层事务模型”五个层次:
- 入口便捷:闪卡被加入“最近打开文档”与切换器(Switcher)候选列表(#7881),可像切换文档一样快速定位到卡包。
- 移动端展示:闪卡间隔复习界面支持在移动端全屏显示(#7932)。
- 编辑撤销:快速制卡(Quick Mark / Quick Card)支持 Ctrl+Z 撤销(#7937),与普通块编辑的操作历史打通。
- 可靠性修复:修复快速制卡与快速标记未完成写入的问题(#7923)。
- 底层重构:将
addRiffCards/removeRiffCards调整为异步事务(#7936),避免大量卡片批量操作时阻塞主流程。
内核中的对应实现可以直接对照源码验证:两个 API 均注册于 kernel/api/router.go(POST /api/riff/addRiffCards与POST /api/riff/removeRiffCards),其实现分别位于 kernel/api/riff.go(addRiffCards)与 kernel/api/riff.go(removeRiffCards)。从源码看,二者接收deckID与blockIDs,通过构造addFlashcards/removeFlashcards操作组装成model.Transaction后调用model.PerformTransactions与model.FlushTxQueue落库——这正是“异步事务”重构后的执行模型,保证批量卡片增删与数据同步队列(kernel 侧事务系统)一致。
AI 能力:翻译语种扩展与动作行为修正
本版本对 AI 功能有两处行为层面的调整:
- 翻译支持繁体中文(#7891):AI 翻译的目标语种列表新增“繁体中文”,中文用户在简繁之间互译时不再依赖外部转换工具。内核侧 AI 相关能力集中在 kernel/api/ai.go 与 kernel/agent(智能体与会话、模型元数据、工具定义均在此目录)。
- 自定义 AI 动作不再将自身插入到内容中(#7894):此前执行自定义 AI 动作时,动作指令文本可能残留进正文;本次修正后动作仅产生结果内容,保持文档干净。
内核健壮性与系统稳定性
内核层(Go 实现)本次重点加固了“服务崩溃恢复、网络连通检测、配置容错”三类问题:
- 改进内核 HTTP 服务崩溃恢复(#7888):增强内核 HTTP 服务的 panic recover 机制,避免单个请求异常拖垮整个内核进程。内核服务端入口与路由装配见 kernel/server/serve.go 与 kernel/api/router.go。
- 改进数据同步的联网检查(#7890):优化同步前对网络连通性的探测方式,减少因网络探测误判导致同步失败或卡顿;相关逻辑位于 kernel/api/sync.go 与 kernel/model/sync.go。
- local.json 损坏自动恢复(#7911):当本地配置文件
local.json损坏时,不再阻塞进入主界面,而是清空该文件后以默认配置启动,显著提升异常断电等场景下的可用性。 - 报错通知附带版本信息(#7899):所有错误通知的结尾统一附加当前版本号,用户向社区反馈问题时可直接复制版本上下文。
- 升级后显示“思源笔记最新变化”(#7902):升级完成后弹出 What's New 说明,帮助用户快速了解新版本要点(其内容来源即本目录中的各版本发布说明)。
- 导出与预览细节:修复导出 PDF 在缩放比例不为 1 时边距错误(#7900);修复“聚焦后切换到导出预览、再切回编辑模式未恢复焦点”的问题(#7901);修复
fetchPost调用getBlockInfo时 API 端点地址错误(#7918,pull 对应修复 上游逻辑)。 - 文档树快捷键:修复文档树中 Ctrl+↑ 折叠失效(#7931)。
- 托盘与桌面细节:修复切换外观语言后系统托盘菜单文案未同步更新的问题(#7935);修复间隔复习界面全屏后窗口按钮重叠(#7877);修复 macOS 端初始化界面挂起(#7887);修复点击工具栏并隐藏键盘后移动端出现空白区域(#7880)。
新增内核 API:Move block
本次版本最重要的开发者向改动是新增了移动块的官方内核 API(#7903):POST /api/block/moveBlock。其路由注册见 kernel/api/router.go,实现位于 kernel/api/block_op.go。
从 实现源码 可以确认该 API 的关键语义与约束:
- 请求参数包括
id(待移动块的 ID,必填)以及可选的parentID、previousID; - 移动目标由两个参数协同决定:指定
previousID时,目标块会移动到该块之后;未指定previousID而指定parentID时,则作为该容器块的子块插入; - 参数有严格校验:
previousID对应的块不允许是文档块(类型为"d",源码见 kernel/api/block_op.go);仅依靠parentID定位时目标必须是容器块,否则会进行非法嵌套检查并拒绝执行。
参考调用示例(JSON body):
{ "id": "2023041100000000000000000000000a", "parentID": "2023041100000000000000000000000b", "previousID": "2023041100000000000000000000000c" }需要说明的是,previousID与parentID同时为空时目标块无法确定,内核会返回错误;实际业务中两个参数通常只显式提供一个即可。该 API 适合需要在文档间或文档内批量重排块的插件开发者使用,也是后续自动化整理工作流的基础能力之一。
其他值得关注的能力
- 微信思源小助手剪藏解析改进(#7942):改进从微信“思源小助手”转发剪藏内容的链接解析,减少剪藏内容进入笔记本后的格式错乱。
- 错误通知版本信息、WhatsNew等已在上文覆盖。
文档、重构与开发者基础工作
- 文档更新:用户指南新增“性能优化”章节(#7889),并补充了 Docker 伺服(自托管部署)的注意事项与限制(#7897)。部署相关内容可进一步查阅仓库 Dockerfile 以及 kernel/entrypoint.sh。
- 重构:
addRiffCards/removeRiffCards改为异步事务(#7936),见 kernel/api/riff.go。 - 开发者基础工作:
- 属性视图(Attribute View)开始向数据库表映射演进(#7677),这是思源“块级数据库化”能力的早期铺垫。如今该能力已在仓库中沉淀为独立的 kernel/av(属性视图引擎)与 kernel/sql 中的 av 系列文件(av.go 等),以及 kernel/api/av.go 对外 API;
- 变更日志管理方式调整(#7904、#7905、#7906):将 CHANGELOG.md 迁入 app/changelogs 目录、为每个版本拆分独立文件并补充简体中文版本——当前仓库的变更日志目录结构(如 v2.8.4 目录 下同时存在
v2.8.4.md与v2.8.4_zh_CN.md)正是这一规范落地后的结果。
小结
v2.8.4 虽然只是 2.8.x 系列的一次例行迭代,但其改进覆盖面并不“例行”:移动端在手势、软键盘、面板与菜单四个维度完成了密集的体验修正;闪卡体系从入口、展示到内核事务模型得到系统性加强;搜索在输入与性能监控两端同步推进;内核层以 panic 恢复、联网检测与配置容错提升了自托管场景下的稳定性。对开发者而言,本版本最大的增量是新增moveBlock内核 API,配合闪卡异步事务重构,为块级自动化操作提供了更可靠的基础。若需逐条核对,可直接翻阅 英文发布说明 与 简体中文发布说明,并对照上文给出的源码路径深入阅读。
【免费下载链接】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),仅供参考