
思源笔记 v3.3.2 变更深度解析数据库筛选与分组、剪藏优化及内核 API 改进【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan导读本文以思源笔记Siyuanv3.3.2 版本的官方变更记录v3.3.2_zh_CHT.md为骨架逐项拆解该版本在数据库字段编辑与筛选、分组视图性能、折叠标题复制、闪卡、剪藏扩展以及面向开发者的内核 API 增强等关键改进并结合 kernel 与 app/src 的源码实现说明各项变更背后的工作原理与实际应用场景。读完本文你将完整掌握 v3.3.2 的功能增量、对应的问题背景以及如何利用新增的disabledInPublish字段与改进后的appendBlock/insertBlock/prependBlock内核 API 进行插件开发与发布运维。版本定位与概览v3.3.2 是一个以“改进细节”为主的维护型版本。官方概述仅一句话——“該版本改進了一些細節”但细看变更清单可以发现该版本存在两条清晰的主线数据库属性视图/Attribute View体验集中优化字段编辑菜单、汇总字段筛选、日期字段筛选、新增选项交互、跨分组拖拽同步、分组视图性能等 8 项以上改动是本次版本的核心投入方向剪藏与编辑器输入链路的细节修复HTML 表格剪藏改进、浏览器剪藏支持剪藏到数据库、拖入多个文件不再被默认程序打开、输入法粘贴链接标点重复等问题修复。此外面向开发者的变更包括集市插件包元数据新增disabledInPublish字段、新增expandDocTree插件 API、改进内核 APIappendBlock/insertBlock/prependBlock。数据库属性视图体验集中改进字段编辑菜单与选项交互改进本版本对数据库字段的编辑交互做了三处针对性调整改进数据库字段编辑菜单对应 issue 15185重构了字段编辑入口的菜单组织使字段类型、属性配置等操作更清晰数据库中新建数据如果在折叠分组内不再弹出编辑框issue 15728此前在折叠的分组内新建数据会强制弹出编辑框打断操作流本版本改为直接创建保持原有折叠状态数据库新增选项时禁止编辑issue 15751新建选项的瞬间锁定编辑状态避免在选项尚未落库时被误改导致数据不一致。这些交互调整对应的是 kernel/av 下属性视图相关模块与 app/src/av 前端渲染层的配合逻辑。从源码结构看属性视图的字段、选项、行数据均通过内核事务transaction机制落库前端交互层在 v3.3.2 中收紧了选项新建与分组内新建的触发条件属于典型的“减少误操作”型改进。汇总字段筛选支持「任一」「所有」和「没有」这是本版本数据库筛选能力的重要增强。此前汇总字段rollup的筛选只支持单一量词v3.3.2 起支持三种量词任一Any满足任意一个关联条件的行即命中所有All必须满足全部关联条件的行才命中没有None不满足任何关联条件的行命中。内核侧的量词定义位于 kernel/av/filter.goFilterQuantifierUndefined FilterQuantifier // 等同于 Any FilterQuantifierAny FilterQuantifier Any FilterQuantifierAll FilterQuantifier All FilterQuantifierNone FilterQuantifier None从源码可以看出未显式指定量词FilterQuantifierUndefined时行为等同于Any保证旧数据的筛选语义兼容三种量词在 filter.go 中分别由独立的分支处理如case FilterQuantifierAny:、case FilterQuantifierAll:、case FilterQuantifierNone:逻辑清晰可扩展。配套的还有“改进数据库汇总字段筛选”issue 15740与“改进数据库日期字段筛选”issue 15744。日期字段筛选的改进包含一项重要修复数据库日期字段无法粘贴 0 点时间issue 15742——此前粘贴形如00:00的时间会被判为无效本版本修正了该解析路径。跨分组拖拽同步与分组视图性能数据库条目跨分组拖拽后同步更新其他视图中的分组issue 15755此前在表格/看板/画廊等多个视图并存时条目从一个分组拖到另一个分组其他视图的分组归属可能不刷新v3.3.2 修复了该同步问题。这与 kernel/av/layout_table.go、kernel/av/layout_kanban.go、kernel/av/layout_gallery.go 等多个布局实现之间的数据一致性机制相关提升数据库分组视图性能issue 15764)针对分组Group视图在大数据量下的卡顿做了性能优化涉及 kernel/av/group.go 中分组聚合逻辑的调用频次与缓存策略调整。编辑器交互改进与剪藏增强折叠标题的复制/剪切语义调整v3.3.2 将折叠标题的复制/剪切改为复制/剪切「标题及其下方块」并支持多标题复制/剪切issue 8019。这是一次语义修正旧行为折叠状态下复制标题仅复制标题本身新行为复制/剪切操作作用于标题及其折叠区域内的全部内容块且支持同时选中多个折叠标题批量操作。该行为在编辑器层实现涉及 app/src/protyle 中标题块heading与选区range处理逻辑的配合用户在使用大纲折叠长文档后可以更直觉地整段搬运内容。代码块复制与语言选择细节代码块选择复制时仅复制纯文本issue 15733此前从代码块中框选复制会夹带编辑器内部 DOM 结构粘贴到外部程序时格式异常本版本改为仅复制纯文本内容代码块语言提示搜索内容为空时使用默认排序issue 15737在代码块语言下拉框中输入关键字清空后语言列表恢复默认排序而非停留在上次过滤状态。剪藏功能增强浏览器剪藏扩展支持剪藏页面到数据库issue 15758剪藏结果不再仅限于插入文档还可以直接作为数据库属性视图的行数据写入打通了“网页信息 → 结构化数据库”的采集链路改进 HTML 表格剪藏issue 15781针对网页中复杂 HTML 表格合并单元格、嵌套表格等的剪藏转换质量做了优化剪藏后表格结构与内容更接近原网页。其他编辑器与输入修复拖入多个文件到编辑器不再被默认程序打开issue/pull 15773此前批量拖入文件时部分文件会触发系统默认程序打开本版本修正为全部作为附件/嵌入内容插入编辑器部分输入法在块末尾粘贴链接后标点符号重复插入issue 15801修复了中文输入法如拼音类在块末尾粘贴链接后出现标点重复的问题属于输入法合成事件与编辑器粘贴处理冲突的边界修复批量插入文件到编辑器时异常issue 15768修复批量插入场景下的崩溃或部分文件丢失问题预览模式下无法设置只读模式issue 15756修复了预览preview场景下只读模式开关失效的问题。其他体验改进Android 隐藏底部手势导航栏issue 15763在 Android 端隐藏系统底部手势导航条为编辑区腾出更多可视空间涉及 kernel/mobile 与移动端界面的协同点击无文档的笔记本时自动新建文件issue 15782当用户点击一个尚无任何文档的笔记本notebook时自动新建一个默认文档避免“空笔记本无法直接开始编辑”的困惑PDF 文件名过长无法生成标注图片issue 15739缺陷修复PDF 标注annotation功能在文件名超长时无法生成标注图片本版本修复了该路径下的文件名截断与图片生成问题视频块网络网址不正确issue 15741缺陷修复修正了视频块中网络视频地址解析异常的问题。面向开发者元数据字段与插件 API代码片段与集市插件新增disabledInPublish字段v3.3.2 为两类资源引入了disabledInPublish字段用于在发布服务Publish中禁用特定代码片段/插件代码片段Snippets新增字段disabledInPublishissue 15806用于识别发布服务中是否已停用集市插件包元数据同步新增字段disabledInPublishissue 11730用于识别插件在发布服务中是否已停用。内核侧的数据结构定义代码片段配置结构体位于 kernel/conf/snippet.gotype Snippet struct { ... DisabledInPublish bool json:disabledInPublish }插件元数据结构体位于 kernel/model/plugin.go注释明确为 “Whether disabled in publish mode”集市解析逻辑位于 kernel/bazaar/package.go 与 kernel/bazaar/plugin.go安装插件时会将disabledInPublish一并解析出来。在接口层kernel/api/snippet.go 的代码片段读取接口会先判断当前上下文是否为发布环境isPublish : model.IsReadOnlyRoleContext(c) var snippets []*conf.Snippet for _, s : range confSnippets { if isPublish s.DisabledInPublish { continue } ... }也就是说当请求来自发布服务只读角色上下文时标记了disabledInPublish的代码片段会被直接跳过不会注入发布页面。而在写入接口 setSnippet 中disabledInPublish是可选的布尔字段if nil ! m[disabledInPublish]因此旧版客户端不传该字段也能正常保存保证了向前兼容。插件开发者的实用建议如果你的插件或自定义 CSS/JS 代码片段依赖本地文件、仅限桌面端使用或包含与发布场景冲突的逻辑可在集市插件package.json元数据或代码片段配置中设置disabledInPublish: true避免发布站点加载后出现样式错乱或脚本报错。新增插件 APIexpandDocTreev3.3.2 为插件系统新增了expandDocTree接口issue 15639用于在文档树中定位并展开指定文档或笔记本。前端插件 API 定义位于 app/src/plugin/API.tsexport const expandDocTree async (options: { id: string, isSetCurrent?: boolean }) { ... };其核心逻辑先判断传入的id是笔记本还是文档若在window.siyuan.notebooks中找到匹配则视为笔记本否则调用/api/block/getBlockInfo查询该文档所属的笔记本box与路径在文件树文件侧边栏中选中对应条目isSetCurrent默认为true即展开的同时将该条目设为当前选中项若条目的折叠箭头已处于展开状态b3-list-item__arrow--open则直接返回避免重复加载子树否则调用file.getLeaf(liElement, notebookId)懒加载子节点并展开。该 API 对自动化插件例如导入文档后自动定位到新文档、跳转到指定笔记本下的某个文档非常实用无需再自行模拟点击文件树节点。内核 APIappendBlock/insertBlock/prependBlock改进v3.3.2 改进了内核 APIappendBlock、insertBlock和prependBlockissue 15798。这三个 API 的底层实现位于 kernel/api/block_op.goappendBlockkernel/api/block_op.go向指定容器块末尾追加内容。仅使用parentID定位目标且目标必须是容器块treenode.CheckContainerParent校验否则视为非法嵌套直接报错支持dataType: markdown此时会通过dataBlockDOM将 Markdown 转换为块 DOM 后再写入prependBlockkernel/api/block_op.go向指定容器块开头插入内容参数与校验逻辑与appendBlock对称使用prependInsert动作insertBlockkernel/api/block_op.go在指定位置中间插入内容支持通过parentID、previousID、nextID三个定位参数组合确定插入点三者均为可选灵活度最高。三个 API 的共同点是最终都会构造事务model.Transaction并调用model.PerformTransactions与model.FlushTxQueue落库随后通过broadcastTransactions将变更广播给前端实时刷新。v3.3.2 的改进主要在于定位参数容错、非法嵌套校验提示以及 Markdown 转换链路的健壮性插件开发者在使用这三个 API 时应注意目标块必须是容器块文档、列表、引用块等否则接口返回错误dataType支持markdown与块 DOMdataBlockDOM格式两种insertBlock的定位参数可同时省略多个但需至少提供一种有效定位方式否则无法确定插入点。下载与升级方式v3.3.2 的官方分发渠道为B3log 官网下载页GitHub Releases 页面。用户可直接覆盖安装对应平台的安装包工作区数据data目录无需迁移升级后首次启动会自动执行内核与索引的一致性检查。本仓库中的完整变更历史可参阅 app/changelogs 目录其中 v3.3.x 系列更新记录位于 app/changelogs/v3.3.x当前版本的中文简体变更说明见 v3.3.2.zh-CN.md繁体中文见 v3.3.2.zh-TW.md英文见 v3.3.2.md。小结v3.3.2 作为思源笔记 v3.3.x 周期中的一次细节改进版本其技术增量可归纳为三条主线数据库体验汇总字段筛选量词扩展任一/所有/没有、字段编辑与选项交互收紧、跨视图分组同步与分组视图性能提升编辑器与剪藏折叠标题整段复制/剪切、代码块纯文本复制、HTML 表格与数据库剪藏增强、若干输入与文件拖拽缺陷修复开发者能力disabledInPublish发布禁用机制代码片段 插件元数据、expandDocTree插件 API、三个块插入内核 API 的健壮性改进。对于日常用户升级后可重点关注数据库筛选量词与折叠标题复制这两项高频操作的变化对于插件开发者disabledInPublish与expandDocTree则是可直接投入使用的增量能力。【免费下载链接】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),仅供参考