思源笔记 v2.10.7 版本深度解析:数据库公测开启,编辑器、鉴权与导出能力全面打磨
【免费下载链接】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.7 官方变更记录为主线,逐项解析该版本在编辑体验、搜索替换、导出预览、数据同步、移动端与 Web 鉴权等方面的 13 项改进、9 项缺陷修复与 5 项开发者变更,并结合仓库源码(kernel/server/serve.go、kernel/model/session.go、kernel/model/search.go等)说明其底层实现逻辑。读完本文,你将完整掌握 v2.10.7 的功能变化脉络、关键修复背后的技术原因,以及"数据库"公测在此版本中的开启方式与后续演进方向。
版本概述与升级建议
v2.10.7 是一个缺陷修复版本,官方建议用户升级。该版本的核心意义有两点:
- 修复了一批影响日常使用的问题:包括 Android 14 上的闪退、列表项 Shift+Tab 异常、禁用全部插件后集市区失效、代码块行号错位等;
- 正式开启"数据库"特性公测:从此版本开始,付费用户可以优先参与数据库特性的公测(对应 GitHub issue #9242)。这是思源笔记后续"属性视图 / 数据库"体系大规模落地前的一个重要里程碑。
补充说明:官方在该版本同时宣传了"功能特性(PRO Features)"的早鸟价阶段,并注明年付订阅会员已包含功能特性,无需单独购买。该信息属于当时的商业运营内容,与功能演进本身无直接关系。
改进功能详解
v2.10.7 共包含 13 项改进,可归纳为"文档树与编辑体验""表格与公式""搜索替换""导出预览""Pad 与同步""Web 鉴权"六类。
1. 文档树与编辑体验
| 改进项 | 说明 |
|---|---|
| 创建笔记本后自动刷新排序(#9213) | 新建笔记本后文档树立即按当前排序规则刷新,无需手动操作即可看到笔记本出现在正确位置 |
| 改进列表项下包含多块时的传统缩进表现(#9226) | 修复列表项包含多个块(如引用块、代码块)时"传统缩进"样式下的层级展示问题 |
| 改进分隔线编辑(#9259) | 优化分隔线(---)在编辑器中的选中与编辑交互 |
2. 表格内|与行级公式 / 行级代码
表格单元格在 Markdown 中使用|作为列分隔符,因此当单元格内出现行级公式(行内数学)或行级代码且其内容本身包含|时,容易导致解析与渲染错位。v2.10.7 分别针对两种场景做了专项改进:
- 表格中包含
|时行级公式的处理(#9227); - 表格中包含
|时行级代码的处理(#9252)。
这类问题通常发生在编辑器底层基于 AST(抽象语法树)的 Protyle 渲染层,需要区分"作为表格分隔符的|"与"公式/代码内联内容中的|",本版本对这两类内联节点在表格上下文中的解析进行了修正。
3. 搜索替换:不再剔除关键字首尾空格
此前的搜索替换逻辑会先对关键字(keyword)做首尾空格剔除(trim),导致用户输入"带空格的精确短语"时无法命中,或替换结果与预期不一致。v2.10.7 起不再剔除关键字首尾空格(#9229),允许关键字包含前导/尾部空格进行精确匹配。
从当前仓库源码看,搜索替换的替换环节位于 kernel/model/search.go,其NodeLinkDest等节点的替换调用replaceNodeTokens(n, method, keyword, strings.TrimSpace(replacement), r),即关键字按用户输入原样参与匹配,而替换文本仍做规范化处理;后续 kernel/sql/block.go 中还有专门针对"搜索替换与空格"的进一步改进注释(#10231),说明该方向在后续版本仍在持续演进。
4. 导出 PDF 长表格分页策略
当文档中包含非常长的表格时,导出 PDF 的跨页分页容易出现表头错位、行被拦腰切断等问题。v2.10.7 通过 PR #9234 改进了长表格的分页策略,使长表格在跨页时保持更合理的行切分与表头重复展示,提升导出文档的可读性。
5. 导出预览:F5 刷新 + 载入动画 + 自动刷新
围绕"导出预览"模式,v2.10.7 提供了三项体验改进:
- 导出预览模式下支持
F5快捷键刷新(#9235):在预览页直接按F5即可重新载入预览内容; - 为预览模式添加载入动画(#9247):预览内容加载期间显示加载动画,避免空白等待;
- 预览模式自动刷新(#9247):相关内容变更后预览自动刷新,无需手动操作。
这三项改进让"导出预览"成为接近所见即所得的实时预览环境,配合导出前的快速校对非常实用。
6. Pad 端退出应用时保存布局
修复了 Pad(平板)端通过正常路径退出应用时工作区布局(打开的页签、面板位置等)未保存的问题(#9244)。此前 Pad 端退出可能导致下次启动时布局回退,本版本确保退出前将布局持久化,与桌面端行为保持一致。
7. 数据同步网络连通性检查
改进数据同步前的网络连通性检查(#9251)。从 kernel/model/sync.go 的formatRepoErrorMsg可以看出,同步失败会被细分为多种可识别错误类型,例如:
cloud.ErrCloudAuthFailed(云同步鉴权失败)cloud.ErrCloudObjectNotFound(云端对象不存在)dejavu.ErrCloudLocked(云端锁冲突)cloud.ErrSystemTimeIncorrect(系统时间不正确)cloud.ErrCloudServiceUnavailable/cloud.ErrCloudTooManyRequests(服务不可用 / 限流)
v2.10.7 改进的是同步开始前对网络连通性的检测:在网络不通或服务不可达时尽早给出明确提示,而不是在超时后才报错,从而减少用户在"同步卡住"状态下的困惑。
8. 浏览器端非127.0.0.1访问时的鉴权失败提示
思源笔记默认只允许本机访问,当通过浏览器以非127.0.0.1地址(如局域网 IP、自定义域名)访问且未设置锁屏密码时,会因安全策略拒绝请求。此前这类场景的报错提示不够直观,v2.10.7 将其改为明确的鉴权失败提示(#9224),引导用户先设置锁屏密码。
该逻辑的源码位于 kernel/model/session.go:当Conf.AccessAuthCode(锁屏密码)为空时,中间件会综合校验clientIP、Host、Origin、X-Forwarded-Host是否为本地地址,只要任一来源指向非本机,就返回 HTTP 401 并携带中文/英文双语提示:
Auth failed: for security reasons, please set [Lock screen password] when using non-127.0.0.1 access/为安全起见,使用非 127.0.0.1 访问时请设置 [锁屏密码]
前端侧,app/src/util/fetch.ts 中也有对应的处理:收到鉴权失败响应后直接刷新页面,避免用户在未授权状态下继续操作。
缺陷修复详解
v2.10.7 共修复 9 个缺陷,覆盖移动端稳定性、列表编辑、插件体系、搜索分页、闪卡、嵌入块与代码块渲染。
| 缺陷 | 影响场景 |
|---|---|
| Android 14 上闪退(#9212) | 修复了 Android 14 系统下的应用崩溃问题,属于移动端兼容性关键修复 |
| 列表项 Shift+Tab 异常(#9237) | 列表项中按Shift+Tab进行"取消缩进/提升层级"时行为异常 |
| 禁用所有插件后其他集市区不工作(#9238) | 插件市场中所有插件被禁用后,主题、图标等"其他集市区"无法正常加载使用 |
| 任务列表中嵌套列表后粘贴数据不完整(#9239) | 在任务列表(- [ ])内嵌套列表再粘贴内容时,粘贴结果缺失部分块 |
| 搜索界面连续快速点击分页按钮后出现负数(#9243) | 快速连点分页按钮导致页码计数器溢出为负数的边界问题 |
| 闪卡页签无法拖拽(#9250) | 闪卡页签在页签栏中无法被拖拽调整位置 |
| 从嵌入块打开文档后不应显示"退出聚焦"(#9254) | 从嵌入块(Embed Block)跳转打开文档后,错误地出现"退出聚焦"入口 |
| Ctrl+滚轮调整字号后代码块行号错位(#9260) | 使用Ctrl+滚轮缩放字号后,代码块行号与代码行错位 |
| 调整外观-字号后代码块行号错位(#9267) | 通过"设置 - 外观 - 字号"调整全局字号后,代码块行号同样错位 |
其中两个代码块行号错位问题(#9260、#9267)都与"动态调整字号后代码块行号容器未同步重排"相关,一个来自快捷键缩放路径,一个来自外观设置路径,本版本对两条路径下的行号重排逻辑做了统一修复。
开发者相关变更
v2.10.7 同时包含 5 项面向开发者 / 插件作者的功能变更:
- 属性视图添加"资源类型"列(#8895):属性视图(Attribute View,即数据库的前身)新增
asset资源类型列,可在表格/看板等视图中展示文档内的资源(图片、附件等)。 - 数据库插入块时增加动画(#9092):向数据库插入块时增加过渡动画,提升交互反馈。
- 改进文档块标菜单中的插件菜单项位置(#9225,PR):调整文档标题图标菜单中插件菜单项的排列顺序,使其更符合使用习惯。
- 数据库公测(#9242):v2.10.7 起数据库特性进入公测,付费用户优先参与。
- 为 OPTIONS 请求添加
Access-Control-Max-Age标头(#9257,PR):优化跨域预检(CORS preflight)的性能。
CORS 预检缓存:Access-Control-Max-Age的实现
第 5 项变更值得展开说明。思源内核基于 Gin 框架实现了统一的 CORS 中间件,位于 kernel/server/serve.go 的corsMiddleware():
- 统一设置
Access-Control-Allow-Origin: *、Access-Control-Allow-Credentials: true、Access-Control-Allow-Headers等基础标头; - 对
/webdav、/caldav、/carddav分别使用各自的方法集合; - 其他路径使用通用方法集合,并在收到
OPTIONS预检请求时,新增Access-Control-Max-Age: 600标头后以204 No Content直接结束请求。
Access-Control-Max-Age: 600意味着浏览器对相同跨域预检请求的结果可缓存 600 秒(10 分钟),在这段时间内再次发起跨域请求时将跳过 OPTIONS 预检,直接发送实际请求。对于频繁调用内核 API 的浏览器端插件或自定义前端应用,可显著减少无效的网络往返,降低请求延迟。
数据库公测与属性视图演进
"数据库"是思源笔记基于"属性视图"演进的核心数据管理能力。从仓库源码结构看,数据库 / 属性视图的内核实现集中在 kernel/av 目录,包含av.go(基础类型与操作)、calc.go/calc_template.go(计算与模板)、filter.go/group.go/sort.go(筛选、分组、排序)、layout.go及layout_table.go、layout_kanban.go、layout_gallery.go(表格、看板、画廊等视图布局)等文件;SQL 层面的查询实现在 kernel/sql/av.go 以及av_table.go、av_kanban.go、av_gallery.go等文件中。v2.10.7 的"资源类型列"(#8895)与"插入块动画"(#9092)即是在该体系之上新增的能力,为其后续成长为完整的"数据库"功能奠定基础。
升级与验证建议
- 升级路径:v2.10.7 为缺陷修复版本,官方建议直接升级。升级后建议重点验证:Android 14 设备启动是否正常、代码块行号在缩放/改字号后是否对齐、列表嵌套粘贴是否完整、搜索替换带空格的短语是否按预期命中。
- 数据库公测:付费用户可在该版本起参与数据库特性公测,体验属性视图 / 数据库能力;非付费用户可关注后续版本的公测开放节奏。
- 浏览器远程访问:如需通过非
127.0.0.1地址访问思源笔记,务必先在"设置"中配置锁屏密码,否则将按 kernel/model/session.go 中的安全策略被拒绝访问。 - 插件 / 自定义前端:若你的插件或自定义前端与内核 API 存在跨域调用,本版本新增的
Access-Control-Max-Age会加快预检流程;若在/webdav、/caldav、/carddav路径下使用,注意这些路径走的是各自独立的方法集合。
总结
v2.10.7 是思源笔记在"缺陷修复 + 数据库公测"双线推进下的一个重要版本:一方面通过 13 项改进与 9 项修复提升了编辑器(表格、列表、分隔线、代码块行号)、搜索替换、导出预览、Pad 布局与数据同步的稳定性与体验;另一方面正式开启数据库公测,并通过属性视图资源列、插入动画、CORS 预检缓存等变更,为后续的数据库能力爆发做好了铺垫。对于关注思源笔记演进或需要排查上述问题的用户,本版本的变更记录具有直接的参考价值。
【免费下载链接】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),仅供参考