
思源笔记 v3.1.21 更新技术解析文档树性能、反向链接浮窗与粘贴事件总线【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuanv3.1.21 是思源笔记SiYuan在 v3.1.x 迭代周期中的一次细节打磨版本集中改进了文档树刷新与列出性能、反向链接面板交互、PWA 标题栏适配、属性搜索高亮等十余项体验并修复了标签搜索转义缺陷、将桌面端升级至 Electron v33.4.0。本文以官方发布说明为主体结合当前仓库源码逐条剖析本次更新的实现原理与影响范围帮助开发者与用户理解这些细节改进背后的技术动因。版本概览一次聚焦编辑器体验的细节迭代根据 v3.1.21_zh_CN.md 的发布说明本版本变更记录分为四类改进功能10 项、修复缺陷1 项、开发重构1 项、开发者相关2 项。从条目分布可以清晰看出v3.1.21 的重心几乎全部落在编辑器交互与知识组织体验上文档树创建文档后即时刷新、提升列出性能反向链接面板支持悬停块图标直接打开浮窗浏览器端PWA标题栏颜色随主题自适应编辑器列表项虚影、块选择、图片排版、属性搜索高亮剪藏支持删除图片链接数据库为绑定块的主键补充图标标识。下面按发布说明的分类逐条展开并给出对应的源码级依据。改进功能详解文档树创建即刷新列出性能优化本版本包含两项文档树相关改进改进创建文档时刷新文档树issue #12109此前在部分场景下创建文档后文档树不会立即更新需要手动刷新或等待下一次渲染本次修复了该刷新链路保证新文档创建后树结构即时反映。改进列出文档树的性能issue #13844针对大知识库中文档数量庞大、展开目录时树节点渲染卡顿的问题进行了性能优化。文档树是思源笔记文件系统FileTree在界面侧的核心呈现其数据由内核侧kernel/api/filetree.go提供界面侧通过 app/src/util/Tree.ts 统一渲染。树节点的刷新性能通常与「展开时按需加载子文档」及「节点差异更新」策略相关本次优化后在包含数千文档的工作空间中展开目录树的响应速度有可感知的提升。反向链接面板悬停块图标打开浮窗反向链接面板支持悬停块图标打开浮窗issue #13253在反向链接面板中每条反向链接都对应着源文档中的具体块。此前用户需要通过右键菜单或点击面包屑等操作才能预览目标块内容本次改进后鼠标悬停在反向链接条目前的块图标上即可直接弹出块浮窗预览减少了「查看反链来源上下文」的操作路径。该能力建立在 app/src/block/popover.ts 的块浮窗机制之上——从源码注释可见该模块明确服务「编辑器内容块引用 / backlinks / tag / bookmark / 套娃」等场景。反向链接面板本身的渲染逻辑位于 app/src/layout/dock/Backlink.ts其中通过getDockByType(backlink)管理面板显隐而浮窗的触发则复用popover的块级悬停逻辑两者在本版本中完成衔接。适应 PWA 标题栏颜色适应 PWA 标题栏颜色issue #13780思源笔记支持以 PWA渐进式 Web 应用形式在浏览器中安装运行。PWA 的窗口标题栏颜色由meta nametheme-color标签决定而思源笔记具备浅色/深色主题切换能力——若theme-color固定不变切换主题后浏览器标题栏颜色将与页面背景脱节。在 app/src/util/assets.ts 中可以看到该适配的实现方式代码在BROWSER 构建分支即非 Electron 桌面端、非移动端 WebView 环境下通过以下逻辑动态写入theme-color/// #if BROWSER if (!window.webkit?.messageHandlers !window.JSAndroid !window.JSHarmony (serviceWorker in window.navigator) (caches in window) (fetch in window) navigator.serviceWorker) { document.head.insertAdjacentHTML(afterbegin, meta nametheme-color content${getComputedStyle(document.body).getPropertyValue(--b3-body-background).trim()}); } /// #endif关键点在于theme-color的值动态取自 CSS 变量--b3-body-background因此无论切换浅色还是深色主题浏览器标题栏颜色都会跟随当前主题的背景色实时更新。同时该逻辑仅对支持 Service Worker、Cache API 等 PWA 特性的浏览器环境生效避免干扰桌面端与移动端原生容器。改进列表项的虚影与鼠标选择块改进列表项的虚影PR #13821虚影ghost是思源编辑器中拖动块时显示的占位效果。本次调整了列表项在拖拽虚影中的样式呈现避免占位阴影遮挡相邻内容。改进鼠标选择块PR #14010优化了通过鼠标拖拽选中整块内容时的命中范围与视觉反馈使块选择block selection更加精准。这两项均属于编辑器Protyle/WYSIWYG交互细节相关事件处理逻辑位于 app/src/protyle/wysiwyg/index.ts 中包括块选择工具栏的弹出时机、paste/select等事件的绑定等。属性搜索与高亮改进改进属性搜索和高亮issue #13843属性Attribute是思源笔记中附加在块上的键值元数据支持在搜索中按属性条件过滤。本次改进优化了属性搜索的匹配过程以及命中内容的标记高亮展示。属性渲染与过滤的核心实现位于内核侧 kernel/model/attribute_view.go 与 kernel/sql/attribute.go高亮标记逻辑则由 kernel/search/mark.go 的MarkText等函数承担。浏览器剪藏扩展支持删除图片链接浏览器剪藏扩展支持删除图片链接issue #13941思源笔记的浏览器剪藏扩展在剪藏网页时会将页面中的图片一并采集。部分网页中的图片为装饰性或版权受限资源用户希望剪藏时将其过滤掉。本次更新为剪藏扩展增加了删除图片链接img标签的能力剪藏后的文档将不再包含被移除的图片及其失效引用避免出现大量空链接。为数据库绑定块的主键添加图标为数据库绑定块的主键添加图标issue #13945在思源的数据库Attribute View / 属性视图中可以绑定块作为记录Row。此前绑定块的主键Primary Key字段在界面中缺乏明显的视觉标识本次为其补充了专用图标使用户能一眼识别出记录所属的绑定块。数据库绑定块的界面渲染位于 app/src/protyle/render/av 目录含表格、看板、画廊等布局的渲染器主键标识相关的样式与图标定义集中在对应 SCSS 与图标资源中。删除图片之间的空格将导致换行删除图片之间的空格将导致换行issue #13949思源编辑器遵循 Markdown 语义两个图片之间若存在空格会被解析为独立行内元素并产生换行。当用户删除图片之间的空格例如调整排版时后块内布局会随之变化。本次更新明确了这一行为——删除图片之间的空格将导致换行即空格是分隔两个图片元素的关键字符删除后两张图片将重新组合为新的块结构。这属于编辑器对 Markdown 解析规则与 DOM 结构重排的细节修正。缺陷修复标签搜索转义本次版本唯一列入「修复缺陷」分类的条目是标签搜索未正确转义issue #13919当用户输入的标签搜索关键词包含 HTML 特殊字符如、、、等时此前搜索结果的返回内容未做统一转义可能导致前端渲染异常或搜索结果展示错乱。内核侧的修复体现在标签搜索接口与模型层。接口searchTag位于 kernel/api/search.go其返回结构为ret.Data map[string]any{ tags: tags, k: k, }而标签匹配与结果清洗在 kernel/model/tag.go 的SearchTags中完成func SearchTags(keyword string) (ret []string) { ret []string{} sql.FlushQueue() labels : labelBlocksByKeyword(keyword) keyword strings.Join(strings.Split(keyword, ), search.TermSep) for label : range labels { if keyword { ret append(ret, util.EscapeHTML(label)) continue } _, t : search.MarkText(label, keyword, 1024, Conf.Search.CaseSensitive) ret append(ret, t) } sort.Strings(ret) return }可以看到当关键词为空即仅浏览标签时返回结果通过util.EscapeHTML(label)进行 HTML 转义而在带关键词搜索时search.MarkText负责将命中片段以mark标记高亮。本次修复正是完善了这一转义链路确保任何输入下返回的标签文本都满足安全、一致的前端渲染前提。开发重构升级 Electron v33.4.0升级到 Electron v33.4.0issue #14009思源笔记桌面端基于 Electron 构建构建配置见 app/electron-builder.yml。本次将 Electron 运行时从既有版本升级至v33.4.0以获得 Chromium 与 Node.js 底层能力的安全修复和稳定性改进。值得注意的是当前仓库 app/package.json 中electron依赖已进一步演进至42.6.1说明团队在 v3.1.21 之后仍在持续推进运行时版本升级以保持桌面端容器与现代 Web 标准同步。开发者相关改动发布说明中的「开发者」分类主要面向插件开发者与主题开发者本版本包含两项为 pasteText 事件也发出总线粘贴事件为 pasteText 事件也发出总线粘贴事件PR #13927思源笔记内置了一套面向插件的事件总线EventBus插件可以通过监听总线事件来介入编辑器流程。粘贴paste是插件最常拦截处理的场景之一。在 app/src/protyle/util/paste.ts 中粘贴流程在多个入口处通过以下模式向插件广播paste事件const emitResult protyle.app.plugins[i].eventBus.emit(paste, { protyle, resolve, textHTML, textPlain, siyuanHTML, files }); if (emitResult) { resolve(undefined); }代码中可见readLocalFile处理本地文件粘贴与paste主流程处理剪贴板文本/HTML/Siyuan 内部格式两处都会依次遍历所有已加载插件并广播事件插件可通过resolve回调返回修改后的textHTML、textPlain、siyuanHTML或files以改写粘贴内容。本次 PR 的意义在于此前通过pasteText程序化粘贴文本路径触发的粘贴并未广播总线事件导致依赖粘贴钩子的插件在pasteText场景下失效本次补齐后两条粘贴路径都统一发出总线粘贴事件插件开发者可以确信无论用户走剪贴板粘贴还是程序化pasteText自己的拦截逻辑都能生效。事件名定义可参见 app/src/types/index.d.ts 中paste事件类型。改进字体大小 CSS 和列表项伪元素布局改进字体大小 CSS 和列表项伪元素布局PR #13959面向主题开发者的样式层调整。思源的自定义字体大小通过 CSS 变量体系--b3-font-size等贯穿编辑器与界面本次完善了字体大小相关的 CSS 规则同时针对列表项.li的伪元素布局进行了修正使自定义主题在调整字号与列表缩进时表现更稳定。相关样式基础定义于 app/src/assets/scss/main/_main.scss其中包含了titlebar-area-*环境变量等桌面窗口适配规则。下载与升级v3.1.21 的安装包与更新说明可通过以下渠道获取对应官方发布渠道此处仅作说明不提供外部链接官方下载页B3log 社区提供的思源笔记下载页面各平台 Release 发布页GitHub Releases。桌面端用户可直接在应用内「设置 → 关于」中检查更新浏览器端 PWA 用户刷新页面即可获取最新资源。若希望自行构建或审阅本版本源码可克隆仓库后按 app/package.json 与 app/webpack.config.js 中的脚本进行构建。小结v3.1.21 虽然没有引入全新的大功能模块但其价值恰恰体现在「细节」二字文档树在创建与列出的即时性与性能、反向链接面板的悬停浮窗、PWA 主题色跟随、标签搜索转义安全、粘贴事件总线统一以及 Electron 运行时升级共同构成了这次围绕编辑器体验与插件生态的扎实迭代。对于插件开发者paste总线事件的补全意味着更完整的钩子覆盖对于主题开发者CSS 与伪元素布局的调整降低了自定义成本对于普通用户文档树与反向链接的交互改进则直接提升了日常笔记与知识回溯的效率。【免费下载链接】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),仅供参考