ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SiYuan v3.6.1 版本详解:细节体验改进、安全修复与主题内核 API 深度解析

SiYuan v3.6.1 版本详解:细节体验改进、安全修复与主题内核 API 深度解析 SiYuan v3.6.1 版本详解细节体验改进、安全修复与主题内核 API 深度解析【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuanv3.6.1 是思源笔记SiYuan在 v3.6.x 系列中的一次面向细节的稳定版本更新。该版本以改进一些细节为总基调围绕编辑器撤销、数据库字段与预览图、块链接导出、插件停靠栏、发布服务安全、桌面端启动加载、退出同步等十余处体验细节进行打磨同时为开发者新增了两个主题相关内核 API 和一个全量表情预览页面。本文将基于官方变更记录逐条还原该版本的改进内容与底层实现并结合仓库源码讲解setTheme、reloadTheme两个新增 API 的参数规范与调用链路帮助用户理解升级收益、帮助插件与主题开发者快速上手新接口。一、版本概况与定位v3.6.1 延续了思源高频迭代、持续打磨细节的发布节奏从 变更记录 与中文版 v3.6.1_zh_CN.md 可见本次变更共分为三大类类别数量核心主题改进功能Enhancement10 项编辑器、数据库、导出、插件、发布、桌面端、同步等细节体验修复缺陷Bugfix1 项修复若干安全漏洞开发者Development3 项新增 2 个内核 API 1 个表情 HTML 页面从变更条目对应的 issue/PR 编号16134~17237可以推断这些改动横跨了约两个月的用户反馈与社区贡献积累属于典型的多入口汇总、细节导向的小版本。对于普通用户而言该版本最直接的感知点是制卡撤销更可靠、导出块链接更完整、启动更快、退出不丢数据对于开发者而言则是主题切换与重载开始拥有官方内核 API。二、改进功能逐项详解1. 改进快速制卡后的撤销逻辑快速制卡Quick make card是思源将任意块快速转换为卡片用于闪卡复习的高频操作。此前在制卡之后执行撤销可能无法正确回退到制卡前的状态。本版本针对该场景重构了撤销栈的记录时机。在源码层面制卡入口分布在多处 UI 中例如 navigation.ts、openTitleMenu.ts 与 gutter/index.ts最终汇聚到 makeCard.ts 执行块转换。改进的核心思路是让制卡操作与其前后的编辑操作在历史记录undo中形成清晰、可回退的边界确保一次撤销即可完整还原转换动作而不是只回退部分属性改动。2. 改进数据库关联字段的默认图标思源数据库属性视图的关联relation字段用于建立文档、块之间的引用关系。此前新建关联字段时使用的默认图标辨识度不足本版本优化了该默认图标使其在数据库工具栏与字段设置中更容易与其他字段类型文本、数字、日期、单选、多选、文件等区分。3. 改进关闭用户指南笔记本的体验思源在首次安装后会内置用户指南笔记本用于引导新手了解块编辑、数据库、发布等功能对应 app/guide 目录下的.sy文档树。此前用户手动关闭该笔记本时界面反馈不够清晰甚至可能造成困惑。本版本优化了关闭流程的交互让关闭与重新打开/恢复的入口更明确避免误操作导致指南丢失。4. 改进块链接的导出块链接(())语法是思源跨文档引用的基础。此前将含块链接的文档导出为 Markdown 时块链接可能退化为普通文本或丢失目标锚点。本版本改进了导出流程中块链接的解析与渲染确保导出结果保留可识别的引用形式便于在其他笔记工具或静态站点中继续使用。5. 改进插件启用/禁用时停靠栏图标的持久性思源插件可以注册自定义停靠栏Dock图标。此前在启用或禁用插件后停靠栏布局可能出现图标残留或缺失需要手动调整。本版本修复了停靠栏配置在插件生命周期变更时的持久化逻辑使插件的停靠栏条目随插件状态正确增删且不会影响其他插件与内置面板的布局。6. 改进发布服务的安全性发布Publish功能允许将笔记本以网页形式对外分享对应 publish_access.go 等内核模块。本版本针对发布服务做了安全加固重点收紧访问控制与请求校验降低公开站点被异常访问或注入的风险。对于自托管部署的用户建议升级后复查发布站点的访问授权设置。7. RTL 不再应用于行级公式思源支持从右到左RTL的文本方向设置用于阿拉伯语、希伯来语等场景。但此前 RTL 属性会错误地作用于行级数学公式行内公式导致公式渲染顺序错乱。本版本将行内公式从 RTL 作用域中排除保证公式始终按数学规范从左到右渲染这是对多语言排版与公式编辑并存场景的精细修复。8. 改进桌面端主窗口的加载桌面端Electron主窗口的启动加载速度与稳定性是影响体感的关键。本版本针对主窗口加载流程做了优化相关实现位于 electron/main.js 与 electron/window.js减少启动阶段的阻塞与闪烁使窗口更快进入可用状态尤其对大型工作空间大量笔记本与文档的启动体验有明显帮助。9. 改进退出时的数据同步退出应用是数据安全的关键节点。本版本加强了退出流程中的数据同步保障在退出前确保待写入的文档、索引与数据库变更完整落盘避免因快速关闭窗口导致最后几分钟的编辑未保存。这一改进与内核的存储与仓库层storage.go、repository.go的同步逻辑直接相关。10. 改进数据库预览图片加载数据库的预览模式如图库画廊视图会展示附件图片的缩略图。本版本优化了预览图片的加载策略与缓存处理减少滚动浏览大量图片时的卡顿与重复加载。从文件结构看这与资产asset管理与 assets.go 的引用解析机制相关。三、安全修复修复若干安全漏洞v3.6.1 修复了若干安全漏洞对应 issue #17209。思源作为可自托管的本地优先知识库其安全边界主要包括内核 API 的鉴权、工作空间文件的访问控制、发布服务的对外暴露面等。该版本对上述攻击面进行了漏洞修复建议所有部署了公开访问发布、云端同步的用户优先升级。内核侧的通用防护可见 router.go 中统一挂载的CheckAuth、CheckAdminRole、CheckReadonly中间件链路。四、开发者更新新增主题内核 API 与表情预览页本次版本对开发者最重要的变化是新增了两个主题相关内核 API以及一个全量表情 HTML 页面。下面结合源码逐一讲解。1. 内核 API/api/setting/setTheme该 API 用于以编程方式切换主题及外观模式是主题开发者和自动化脚本期待已久的官方入口。其核心实现位于 setting.gofunc setTheme(c *gin.Context) { ret : gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) arg, ok : util.JsonArg(c, ret) if !ok { return } var theme, appearanceMode string var modesRaw []any if !util.ParseJsonArgs(arg, ret, util.BindJsonArg(theme, theme, false, false), util.BindJsonArg(modes, modesRaw, false, false), util.BindJsonArg(appearanceMode, appearanceMode, false, false), ) { return } theme, appearanceMode strings.TrimSpace(theme), strings.TrimSpace(appearanceMode) modes : make([]int, 0, 2) if theme ! { for _, m : range modesRaw { mf, ok : m.(float64) if !ok { break } mi : int(mf) if mi ! 0 mi ! 1 { break } modes append(modes, mi) } if len(modes) 0 { ret.Code -1 ret.Msg [modes] is required ([0] for light, [1] for dark, [0,1] for both) return } } if err : model.SetTheme(theme, modes, appearanceMode); err ! nil { ret.Code -1 ret.Msg err.Error() return } model.InitAppearance() util.BroadcastByType(main, setAppearance, 0, , model.Conf.Appearance) }请求参数说明JSON Body参数类型必填说明themestring否主题名称如daylight、midnight为空时静默忽略modesmodesint 数组条件必填主题模式集合[0]表示仅浅色[1]表示仅深色[0,1]表示同时支持浅色与深色appearanceModestring否外观模式用于指定当前启用的浅色/深色状态几个值得注意的实现细节参数校验严谨modes中的元素仅接受0或1其余值会中断解析当theme非空但modes为空数组时接口会返回错误[modes] is required ([0] for light, [1] for dark, [0,1] for both)避免传入无效主题模式。空主题静默当theme为空字符串时modes与appearanceMode会被忽略便于调用方只更新外观模式而不切换主题。完成后广播设置成功后调用model.InitAppearance()重新初始化外观并通过util.BroadcastByType(main, setAppearance, ...)向所有主窗口广播外观变更事件前端据此实时刷新主题样式无需重启。从 router.go 可以看到该 API 的路由注册方式且与其他设置类 API 一样经过三层中间件保护ginServer.Handle(POST, /api/setting/setTheme, model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, setTheme)即必须登录CheckAuth、必须为管理员角色CheckAdminRole、且当前工作空间非只读CheckReadonly。调用方式为POST请求体为 JSON。调用示例切换为主题 daylight同时支持浅色与深色两种模式POST /api/setting/setTheme Authorization: Token API Token { theme: daylight, modes: [0, 1], appearanceMode: light }2. 内核 API/api/ui/reloadTheme该 API 用于在主题文件发生变更后强制重新加载主题是主题开发调试流程的核心工具。实现位于 ui.gofunc reloadTheme(c *gin.Context) { ret : gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) model.LoadThemes() util.BroadcastByType(main, setAppearance, 0, , model.Conf.Appearance) }其逻辑非常简洁调用model.LoadThemes()从appearance/themes目录重新加载主题配置与样式思源内置主题见 themes/daylight 与 themes/midnight然后同样通过setAppearance广播通知所有窗口刷新。这意味着主题开发者修改主题文件后可以通过一次 API 调用即时看到效果而无需重启内核。其路由注册同样位于 router.go并挂载了与setTheme一致的三层中间件。3. 新增全量表情 HTML 页面版本同时新增了一个展示所有表情符号的 HTML 页面。思源的表情数据与配置位于 appearance/emojis含 conf.json 与 index.html该页面将内置的表情集合以可视化方式集中呈现便于用户浏览、挑选表情也方便表情包开发者核对符号与快捷键的映射关系。五、升级与获取v3.6.1 属于 v3.6.x 系列的小版本更新升级方式与思源常规版本一致桌面端/移动端在应用内检查更新或前往官方下载页获取对应平台安装包自托管 Docker拉取最新镜像并重建容器启动时内核会自动完成数据迁移无需手动干预内核 API 兼容性新增的/api/setting/setTheme与/api/ui/reloadTheme均为增量接口不影响既有 API插件与脚本可直接按本文参数规范接入。六、小结v3.6.1 虽然体量不大但覆盖了编辑器撤销、数据库交互、导出、插件生态、发布安全、桌面端启动与退出同步等多个高频场景属于升级无感、但细节体验有明显提升的版本。对于普通用户建议关注快速制卡撤销、退出数据同步与主窗口加载三项改进对于插件与主题开发者则强烈建议将主题切换迁移到新的setTheme/reloadTheme内核 API 上以获得参数校验、管理员鉴权与全端广播的官方保障。若需进一步了解相关源码可参考 setting.go、ui.go 与 router.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),仅供参考
返回列表