ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

SiYuan v3.1.9 技术解析:块级编辑器增强、数据库视图搜索与内核 API 扩展

SiYuan v3.1.9 技术解析:块级编辑器增强、数据库视图搜索与内核 API 扩展 SiYuan v3.1.9 技术解析块级编辑器增强、数据库视图搜索与内核 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思源笔记开源仓库中的 v3.1.9 版本变更记录v3.1.9.md 及中文版 v3.1.9_zh_CN.md系统拆解该版本的 17 项功能增强、6 项缺陷修复、4 项架构升级与 3 项开发者能力扩展。该版本是一个典型的细节打磨 能力补全型迭代编辑交互、数据库视图、数据同步、移动端体验均有实质改进并新增了内核 API 与插件方法。读者将能据此了解 SiYuan 的块编辑器事件处理、数据库视图搜索、云端快照清理策略以及内核 API/api/block/getDocsInfo的完整调用链与实现原理。版本定位细节全面打磨官方建议升级v3.1.9 的官方版本定位为改进很多细节并修复一些缺陷建议升级。从变更范围看该版本横跨编辑器交互、数据库属性视图、数据同步、导出与剪藏、移动端、文档与国际化、底层依赖七大领域是 v3.1.x 系列中覆盖面较广的一个补强版本。需要说明的是本文章节严格以官方变更记录v3.1.9.md为骨架并结合当前仓库源码对其中关键条目做实现层面的佐证与展开便于开发者与研究者深入追溯。一、编辑器交互增强从光标到拖拽的细节打磨1. 超级块内按 Enter 新建块在超级块super block中按下 Enter 键创建新块的体验得到改进对应 issue 10696。超级块是 SiYuan 中承载复杂排版的容器结构其内部块的新建、拆分与光标定位逻辑位于 app/src/protyle 目录的编辑器事件处理中该改进直接影响editorCommonEvent.ts中的键盘事件分支。2. 相邻行级元素合并改进相邻行级inline元素的合并行为issue 12033涉及 Markdown 语法解析与块模型层。行级元素合并的核心逻辑集中在 kernel/treenode 与 kernel/model/block.go该改进减少了连续行级元素在编辑与导出时的冗余节点使文档树更干净。3. 超链接支持多种格式复制超链接元素现在可以按多种格式复制issue 12198包括纯文本、Markdown 语法与 HTML 等目标格式。前端复制逻辑位于 app/src/util 的剪贴板工具链配合 kernel/util/clipboard.go 实现不同格式的内容渲染。4.Alt拖动从文档树拖入块引用这是本版本一个高价值的交互增强按住 Alt 键将文档树上的文档拖入编辑器时会直接插入块引用block refissue 12482而普通拖动则用于移动块或创建标题。该逻辑的判定在 app/src/protyle/util/editorCommonEvent.ts 中可以看到拖拽提示会根据event.altKey在拖动转为标题dragTip2Heading与拖动引用dragTipRef两种语言提示间切换从源码层面印证了Alt键作为拖拽语义切换键的设计。5. 块拖动改进与向下键光标行为块拖动issue 12651改进了块在文档树与编辑器之间的拖拽判定与落点计算减少误拖拽。向下键光标定位issue 12710按下 Down 键后光标移动到下一行的开头而非行内任意位置这是对中文/英文混排场景下光标导航一致性的细节修正。6. 部分块背景色支持透明度为部分块添加背景颜色透明度支持issue 12713。该改动对应 app/src/assets 下的 SCSS 主题变量体系属于外观层appearance/themes的视觉细节调整后续主题开发者可在自定义主题中利用带透明度的背景色。二、数据库属性视图能力补全数据库database即属性视图 Attribute View是 v3.x 系列的核心能力本版本对其做了三处增强1. 支持数据库视图搜索issue 12620数据库视图新增搜索能力可在表视图、看板视图、画廊视图等布局中对行进行关键字过滤。底层实现分布在 kernel/av属性视图内核与 kernel/sql/av_table.go、kernel/sql/av_kanban.go、kernel/sql/av_gallery.go 等按视图类型拆分的查询模块中搜索条件的拼装走属性视图过滤器filter与排序sort管线。2. 绑定容器块的数据库主键内容更新issue 12664当文档/列表项等**绑定到数据库作为主键列primary key**的容器块内容发生变化时其主键字段的索引与展示会同步更新。该逻辑位于 kernel/av 与 kernel/model/attribute_view.go 的属性视图刷新链路中保证绑定关系下主键内容的一致性。3. 移动端数据库编辑改进issue 12671移动端app/src/mobile的数据库编辑交互得到优化主要针对触屏场景下单元格编辑、字段类型切换与视图切换的易用性。三、数据同步与存储云端快照自动清理与超时设置1. 官方云端自动清理 30 天以上未引用的数据快照issue 8056这是本版本在数据治理上的一项长期能力官方云端存储中超过 30 天且未被引用的数据快照会被自动清理。所谓未引用指快照不再被任何文档内容所关联。该机制与 kernel/model/sync.go 中的云同步快照管理逻辑相关配合仓库 kernel/model/cloud_service.go 中的云端存储交互实现。该策略有效控制云存储占用但使用者应注意重要历史快照应及时确认其引用关系避免超过 30 天未引用而被清理。2. WebDAV/S3 数据同步请求超时设置改进issue 12734WebDAV 与 S3 协议同步的请求超时设置得到改进允许更合理的超时配置以适配不同网络环境。相关配置项位于 kernel/conf/sync.go实际请求逻辑可追溯至 kernel/util/webdav.goWebDAV与 S3 兼容存储客户端封装。3. 删除或回滚文档后自动刷新引用计数issue 12682当文档被删除或回滚后涉及该文档的引用计数会自动刷新避免因文档生命周期变更导致引用数滞留错误。引用计数的维护位于 kernel/model/ref.go 与 kernel/treenode 的块树索引中该修复保证了反向链接面板与引用统计的准确性。4. 数据索引性能改进issue 12777数据索引data indexing性能得到优化。索引队列与索引写入逻辑位于 kernel/sql/index_queue.go、kernel/sql/queue.go该改进在大工作区大量文档场景下可缩短启动与重建索引的耗时。四、导出与剪藏性能与格式细节导出 .sy.zip 笔记本性能改进issue 12653.sy.zip是 SiYuan 的笔记本地导出/备份格式打包性能优化相关实现可见 kernel/model/export.go 与 kernel/util/zip.go。嵌入块embedded block标题级别导出改进issue 12741导出时嵌入块中的标题级别heading level映射更准确涉及 kernel/model/export.go 中标题归一化逻辑与 kernel/treenode/heading.go。HTML 公式剪藏改进issue 12677从网页剪藏包含 LaTeX 公式的 HTML 内容时公式识别与转换更加可靠相关解析逻辑位于 kernel/model/md2html.go 与 kernel/util/lute.go 的 Lute 引擎调用层。代码块内gt;无法替换的修复issue 12660此前在代码块中执行替换操作时HTML 实体gt;无法被替换属于编辑器查找替换管线的转义边界问题修复位于块编辑器事件处理与块操作kernel/api/block_op.go的替换实现中。五、缺陷修复清单闪卡、嵌入标题、搜索忽略除上述条目外v3.1.9 还修复了以下问题均为用户可感知的稳定性修复修复项涉及模块搜索忽略ignore在某些情况下不生效issue 12662app/src/search 与 kernel/search/find.go嵌入标题块后折叠/展开异常issue 12703标题块嵌入kernel/model/embedding.go设置闪卡到期时间不生效issue 12743闪卡调度kernel/model/flashcard.goiOS 16.x 无法打开资源文件issue 12675移动端资源访问路径处理移动端无法启用允许执行 HTML 块内脚本选项issue 12744app/src/config 移动端设置面板其中闪卡到期时间与搜索忽略两项与用户日常使用密切相关升级后建议立即验证在闪卡设置中重新设置到期时间并确认搜索面板的忽略项如忽略代码块、忽略行级元素等在全局搜索中生效。六、架构与依赖升级Electron、PDF.js、Pandoc 与 Flatpak本版本的开发重构Refactor包含四项依赖与打包层升级PDF.js v4.7.85issue 11650PDF 查看器内核升级带来更稳健的 PDF 渲染与标注能力前端 PDF 渲染入口位于 app/src/asset 相关模块。Electron v32.2.0issue 12735桌面端容器升级主进程入口见 app/electron/main.js配套的桌面端打包配置见 app/electron-builder.yml 及各平台变体。Pandoc v3.5issue 12750导入/导出转换器升级SiYuan 通过 app/pandoc 目录携带各平台预编译包内核侧调用封装在 kernel/util/pandoc.go。Flatpak 使用$XDG_CONFIG_HOME而非$HOMEissue 12768Linux Flatpak 发行包的配置目录路径规范调整符合 XDG Base Directory 规范避免配置写入主目录根路径。三项升级均涉及二进制依赖PDF.js 前端包、Electron 运行时、Pandoc 可执行文件因此v3.1.9 的安装包体积与运行内存占用相比上一版本可能有所变化属于正常的依赖换代成本。七、开发者能力扩展内核 API 与插件方法v3.1.9 为插件开发者与 API 调用方带来了三项可直接使用的能力。1. 内核 API/api/block/getDocsInfoPR 12723该 API 用于批量获取文档doc的信息包括标题、属性、引用计数与属性视图信息是文档列表类插件的重要数据来源。路由注册位于 kernel/api/router.goginServer.Handle(POST, /api/block/getDocsInfo, model.CheckAuth, getDocsInfo)请求参数JSON body见 kernel/api/block.go参数类型说明idsstring[]文档块 ID 列表必填refCountboolean是否查询引用计数avboolean是否查询属性视图信息核心实现位于 kernel/model/blockinfo.go 的GetDocsInfo首先调用FlushTxQueue()冲刷待提交事务队列保证读取的是最新数据通过filesys.LoadTrees(blockIDs)加载文档树用treenode.GetBlockTrees获取块树索引对加密笔记本encrypted box会额外尝试从treenode.GetOpenedEncryptedBoxIDs()中查找已打开的加密盒中的块树提取文档标题tree.Root.IALAttr(title)、文档属性parse.IAL2Map以及滚动位置scroll数据其中scroll数据会做一次防御性 HTML 反转义防止历史数据残留 HTML 实体导致 JSON 解析失败kernel/model/blockinfo.go在只读角色上下文发布访问下会通过FilterBlockInfoByPublishAccess对返回信息做发布权限过滤。该 API 适合在插件中用于批量展示文档元信息、构建文档统计面板或实现文档级导航。2. 插件方法exitSiYuanPR 12767插件 API 新增exitSiYuan方法允许插件以编程方式触发应用退出。其实现位于 app/src/dialog/processSystem.ts在 app/src/plugin/API.ts 中挂载到插件 API 对象上桌面端与移动端均可用移动端入口见 app/src/mobile/menu/index.ts。// 插件代码中的调用方式示意 this.exitSiYuan();注意exitSiYuan默认会先尝试切换当前工作区setCurrentWorkspace参数实际退出前建议插件做好数据落盘确认。3. 工作区菜单按钮的data-id属性PR 12648工作区菜单workspace menu的按钮元素新增data-id属性便于主题与插件通过 DOM 选择器精准定位菜单按钮。该改动位于 app/src/menus/workspace.ts对需要自定义工作区菜单样式的主题开发者尤其有用。八、国际化与文档同步更新国际化翻译新增/完善了希伯来语、德语、波兰语和俄语翻译PR 12683对应语言文件位于 app/appearance/langs如he.json、de.json、pl.json、ru.json仓库内还提供 scripts/check-lang-keys.py 与 scripts/check-translations.py 用于校验各语言键值一致性。用户指南改进完善了搜索忽略章节PR 12663与上述搜索忽略修复形成配套用户可在应用内帮助文档中查阅最新说明。九、升级建议与下载综合来看v3.1.9 属于低风险、高收益的升级版本没有破坏性配置变更编辑器交互与数据一致性均有提升且依赖升级为后续版本铺路。官方建议所有用户升级。升级方式与资源桌面端在应用内设置 → 关于中检查更新或从官方下载渠道获取安装包各平台打包配置见 app/electron-builder.yml。移动端从应用商店更新更新后可在关于中查看导入/导出相关设置issue 12699 的新增项。升级后建议重新验证闪卡到期时间、搜索忽略项、WebDAV/S3 同步超时配置三项设置确保配置在新版本中按预期生效。如需自行构建验证可参考仓库根目录的 README.md 与 app/package.json前端依赖管理及 kernel/go.mod内核 Go 依赖按官方文档构建对应平台版本。【免费下载链接】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),仅供参考
返回列表