SiYuan v3.0.11 版本变更深度解析:数据库表格交互、编辑器细节与移动端体验的批量打磨
本篇文章围绕思源笔记(SiYuan)内核仓库中 v3.0.11 英文变更记录(以及对应的 简体中文、繁体中文 记录)展开,逐条梳理该版本针对数据库(属性视图/AV)表格交互、编辑器与块操作、移动端、安全隐私、集市与插件开发等维度的 26 项功能增强、8 项缺陷修复、1 项文档改进与 1 项开发者接口变更。读完本文,你不仅能对照 issue 编号完整掌握 v3.0.11 的改动清单与用户侧收益,还能在仓库源码中找到这些改动对应的前端渲染层(TypeScript)与后端数据层(Go)实现位置,便于进一步深入代码或评估升级影响。
一、版本概览与总体印象
与 v3.0.x 系列其他版本一致,v3.0.11 的定位是「修复一些缺陷并改进大量细节」,本身不含破坏性的大功能重构,而是一次典型的质量打磨型迭代。
从变更记录的结构统计看,本版的关注点高度集中:
| 类别 | 数量 | 主题分布 |
|---|---|---|
| 功能增强(Enhancement) | 26 | 数据库表格交互约占一半,其余为编辑器、移动端、安全、集市、提及/标签面板 |
| 缺陷修复(Bugfix) | 8 | 镜像数据库、嵌入块、关系图、反向链接、解绑块、主键编辑等 |
| 文档改进(Document) | 1 | 用户指南的格式化元素与快捷键章节 |
| 开发者(Development) | 1 | 插件 Custom 类新增 editors 字段 |
其中**数据库(SiYuan 的属性视图 / Attribute View,仓库中常以 av 为目录名)**相关改动占据了最大比重,反映了该阶段开发重心集中在数据库表格体验的打磨上。下面按主题分组展开,每个条目均继承原文完整信息,并补充源码定位。
二、数据库(属性视图)是本版改动的主战场
数据库在 SiYuan 中对应内核侧的 AV(Attribute View)子系统,源码分布在后端 kernel/av(Go 实现)与前端渲染层 app/src/protyle/render/av(TypeScript 实现)。v3.0.11 中与之直接相关的条目约占总量一半,可再细分为交互、字段与过滤、行绑定三类。
2.1 表格视图的行、列与拖拽交互增强
- 改进数据库表格视图行/列拖放排序(#11048):行/列拖拽排序的命中与反馈优化,属于高频操作体验改进。
- 拖动数据库列时编辑器不应滚动(#11056):此前拖动列时主编辑器内容可能同步滚动、干扰拖拽定位,本版限制了这一副作用。
- 改进更新数据库表格视图中的列的交互(#11084):对「更新列」操作的交互流程(确认、应用)做了细化。列的新增、重命名与类型调整逻辑在前端集中在 app/src/protyle/render/av/action.ts,可在此追踪列级操作的实际调用。
- 数据库新建列时菜单位置不正确(#11051,修复):新建列弹出菜单的定位出现偏差,本版修正坐标计算。
- 数据库表格视图中的自定义图标不再变形(#11066):自定义图标在表格单元格中按比例渲染,避免被拉伸变形。
- 编辑数据库表格视图中的链接时选择所有文本(#11060):点击进入链接单元格编辑态时自动全选,符合「进入即全选、直接覆盖」的编辑预期。
- 在数据库中添加行后无法立即编辑主键(#11079,修复):新增行后主键单元格应直接进入可编辑态,此前的焦点丢失问题被修复。
- 列表项下表格内删除列后无法输入(#11085,修复):特殊结构(列表项内部的数据库表格)中删除列后编辑器失焦、无法继续输入的缺陷得到修复。
- 嵌入块中的数据库界面颜色异常(#11032,修复):嵌入块(embed block)场景下数据库 UI 颜色异常,涉及前端渲染层的样式隔离问题。
2.2 镜像数据库与多视图联动
- 调整镜像数据库的列宽度会影响其他视图(#11019,修复):镜像数据库(mirror database)与源数据库共享数据,本版修复了调整列宽「串改」到其他视图的问题——即视图级列宽配置与数据本体解耦。镜像语义在后端 kernel/av/mirror.go 中有专门实现,可从绑定/引用关系的角度理解「视图间影响」的来源。
2.3 字段过滤、排序与汇总计算
- 数据库日期过滤器排除空值(#11061):日期字段筛选时自动忽略空值行,避免空日期参与过滤导致的结果偏差。
- 改进数据库多选字段排序(#11062):多选(multi-select)字段参与排序时按选项语义而非文本处理。多选字段的值表达与比较可在后端 kernel/av/value.go 中进一步查看。
- 改进数据库汇总过滤(#11059):汇总(rollup)字段的过滤行为优化。汇总字段依赖关联行的计算值,其计算与过滤分别位于后端 kernel/av/calc.go 与 kernel/av/filter.go。
- 改进数据库汇总字段设置(#11083):汇总字段的设置交互(选择关联字段与聚合方式)被细化,同样可在 kernel/av/calc.go 中看到聚合计算的底层支撑。
- 当数据库模板字段报告错误时提示(#11070):模板(template)字段的公式/模板表达式执行出错时给出明确提示,而不是静默失败。模板求值逻辑位于后端 kernel/av/calc_template.go。
2.4 行绑定与「添加到数据库」
- 数据库中未绑定的行支持「添加到数据库」(#11093):未绑定块的行此前无法纳入其他数据库,本版允许通过右键菜单将这类行「添加到数据库」。对应前端入口包括 app/src/protyle/render/av/addToDatabase.ts 以及块右键菜单中的
addToDatabase动作(见 app/src/protyle/gutter/index.ts 与 app/src/protyle/header/openTitleMenu.ts),并可通过「通用设置」中的快捷键addToDatabase(定义于 app/src/constants.ts)触发。 - 数据库解绑块导致条目被删除(#11101,修复):在「绑定/解绑」语义下,解绑不应删除数据库条目本身,本版修复了该误删路径。从后端看,行与块的绑定关系由 AV 与文档树的映射维护,相关数据模型可参考 kernel/av 下对属性视图行/块关联的处理。
说明:以上分类中,用户可直接感知的交互改动大多落在前端渲染层
protyle/render/av,而过滤、排序、汇总、模板等「语义」改动则由内核kernel/av提供计算支撑——这也是 SiYuan 数据库功能「前端即时交互 + 后端持久化计算」的典型分工。
三、编辑器与块操作细节打磨
- 改进包含 iframe 的块的拖动和选择(#11033):若块内包含 iframe,鼠标事件常被 iframe 内容抢占,导致拖动/选区不稳定。本版改进了这类块的拖拽与框选行为。
- 改进
Ctrl+Click选择/取消选择块(#11075):优化多块选择时的「加选/减选」手感,涉及编辑器块级选区管理。 - 支持用其他元素替换文本元素(#11058):支持将文本块直接替换为其他元素类型(如转为标题、列表等),避免「先删除再新建」的操作链路。
- 改进「复制 文本」(#11057)*:优化块菜单「复制为文本」类操作的复制结果格式。复制相关底层实现在内核侧 kernel/model/clipboard.go 可进一步查看。
- 改进 HTML 解析代码块(#11068):对粘贴或导入内容中的 HTML 代码块解析更健壮,避免代码内容被错误转义或拆块。
- 当提及展开数设置为 0 时提及面板不应关闭(#11097):设置中将 @ 提及的自动展开数量设为 0 后,手动唤起的提及面板此前会被立即关闭,本版修正该逻辑。
- 限制标签面板中列出的标签的最大数量(#11071):为标签面板的展示列表设置上限,防止标签数量巨大时面板渲染卡顿,属于超大数据量场景下的性能保护。
四、移动端体验改进
- 改进移动端底部状态栏(#11041):针对移动端(手机/平板)底部状态栏的信息密度与触控区域做调整。
- 改进移动端上数据库输入时的滑动(#11077):移动端编辑数据库单元格时,软键盘与页面滚动存在冲突,本版优化了输入过程中的视图滚动行为。
以上两处均落在移动端 UI 层 app/src/mobile,说明数据库与编辑器改造在 v3.0.11 中同步考虑了移动端一致性。
五、安全、链接与退出体验
- 浏览器剪藏扩展隐藏令牌明文(#10975):针对浏览器剪藏场景,避免 API 令牌以明文形式暴露在剪藏扩展中,提升凭证安全性。
- 支持在资源列中打开 siyuan 协议链接(#11073):数据库的「资源」列单元格中可识别并打开
siyuan://协议链接,打通数据库与笔记内部导航。 - 新窗口中的链接使用浏览器打开(#11050):从新窗口打开的链接改为交给系统浏览器,避免在应用窗口内捕获外链。桌面端窗口外链的处理策略可参考 app/electron/main.js 中的窗口事件逻辑。
- 提示未正常退出(#11054):当上次会话未正常退出(如强杀进程)时,下次启动给出提示,帮助用户感知异常退出并检查数据状态。
六、集市安装体验
- 更改集市安装包超时为 2 分钟(#11106):将集市(Bazaar)安装包的下载/安装超时统一调整为 2 分钟。集市功能在内核侧由 kernel/bazaar 目录承载(安装与包管理逻辑见其中的
install.go、package.go等文件),前端触发入口位于插件/主题/挂件等集市界面;该调整主要针对网络波动时安装流程更容易「卡死」的痛点,让超时行为更可预期。
七、开发者接口与文档更新
- 在插件的
Custom类中添加editors(#11072):这是本版唯一面向插件开发者的接口变更。Custom是插件自定义 Dock/标签页所用的类,本版为其新增了editors字段(Protyle[]类型),使插件能够访问挂载在自定义面板中的编辑器实例。实现可直接在 app/src/layout/dock/Custom.ts 中看到:
import {Protyle} from "../../protyle";
export class Custom extends Model {
// ...
public editors: Protyle[] = [];
}
插件的入口装配逻辑(Custom 的实例化、Custom/MobileCustom 的分发)见 app/src/plugin/index.ts。升级到 v3.0.11 后,需要遍历自定义面板内编辑器的插件可直接遍历 custom.editors 而无需自行维护引用。
- 改进用户指南的格式化元素和快捷键章节(#11049,PR):用户指南文档结构调整,属于文档侧改进,不影响运行时行为。
八、其余缺陷修复一览
除上述按主题展开的修复外,仍有部分缺陷修复值得关注:
- 关系图刷新无效(#11087,修复):关系图视图的刷新动作此前可能无效果,本版修复后刷新能正确拉取最新节点关系。关系图的数据与接口分别涉及 kernel/model/graph.go 与 kernel/api/graph.go。
- 「移动」块后反向链接面板错误(#11092,修复):将块移动到其他文档后,反向链接面板出现错乱,本版修正引用关系更新。反向链接处理位于内核侧 kernel/model/backlink.go,其正确性依赖移动操作后引用索引的同步。
九、升级建议与源码导览
v3.0.11 是一次偏「打磨」的版本:没有配置项或数据结构的破坏性变更,改动集中在数据库表格交互、编辑器细节与移动端体验,因此升级风险较低;但若你的工作流重度依赖数据库(尤其是镜像数据库、汇总/模板字段、多选字段排序),建议升级后重点回归上述场景。涉及插件开发者的唯一接口变化是 Custom.editors 的新增,为纯增量、向后兼容。
如需核对原文或继续深入,可直接阅读仓库内的一手资料:
- 变更记录:英文 v3.0.11.md、简体中文 v3.0.11_zh_CN.md、繁体中文 v3.0.11_zh_CHT.md
- 数据库前端交互:目录 app/src/protyle/render/av,其中 action.ts 承载列级操作、addToDatabase.ts 承载「添加到数据库」
- 数据库后端计算:目录 kernel/av,过滤/排序/汇总/模板分别对应
filter.go、sort.go、calc.go、calc_template.go,镜像语义见mirror.go - 插件接口:新增的
editors字段见 app/src/layout/dock/Custom.ts,插件装配见 app/src/plugin/index.ts - 集市安装模块:kernel/bazaar
- 用户指南文档改动的配套仓库侧记录:CHANGELOG.md
安装与升级方面,桌面端各平台的打包配置位于 app/electron-builder.yml 及同目录下的平台分支配置,可据此了解产物形态;实际升级建议通过应用内「检查更新」或官方发布渠道获取对应安装包。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0631
MiniCPM5-2BMiniCPM5-2B 是一款面向端侧、本地部署和资源受限场景的 2B 稠密 Transformer,能够达到同尺寸开源模型 SOTA 水平。Markdown00
video-shotcraftAI宣传片skill,使用 Remotion 制作电影级产品视频:提供106 张镜头配方卡和可复用的视频魔板。适用于 Claude Code 与 Codex以及所有其他智能体Markdown00
HivisionIDPhotos⚡️HivisionIDPhotos: a lightweight and efficient AI ID photos tools. 一个轻量级的AI证件照制作算法。Python09
DragonOSDragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for **Serverless** scenarios. 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算Serverless场景而设计。Rust00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00