思源筆記 v3.0.10 版本解讀:資料庫視圖細節打磨與資料索引效能優化
【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间,让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan
v3.0.10 是思源筆記(SiYuan)面向日常編輯高頻場景的一次「細節修補 + 效能收斂」版本,改進重點集中於兩條主線:一是資料索引(資料庫索引)的建置與更新效能,涵蓋編輯、建立文件與匯入等多條寫入路徑;二是資料庫視圖(屬性視圖 Attribute View)的使用細節,包括新增「行號」欄位類型、過濾選項值搜尋、範本/關聯/彙總計算、解綁與新增資料庫等交互完善。本文以官方變更記錄 v3.0.10_zh_CHT.md 為主體(另有簡體中文版本可對照閱讀:v3.0.10_zh_CN.md 與英文版 v3.0.10.md),並結合本倉庫的前後端實作原始碼,逐條解讀每項變更的動機、實現位置與實際影響,幫助你在升級前後準確評估行為變化。
版本概覽:兩條改進主線
官方概述將此版本定義為「改進資料索引和資料庫視圖相關細節」,從變更清單的構成看,其改動可分為四類:
| 分類 | 代表變更 | 影響範圍 |
|---|---|---|
| 資料庫欄位能力 | 新增「行號」欄位類型、改進資源欄位編輯、改進勾選方塊欄位排序 | 資料庫表格/畫廊/看板等視圖 |
| 資料庫交互細節 | 過濾選項值支援搜尋、綁定塊支援「新增至資料庫」、改進解綁塊、改進引用錨文本 | 資料庫操作流程與區塊綁定 |
| 資料索引效能 | 編輯文件、建立文件、匯入.sy.zip與 Markdown 時的索引效能 | 索引佇列與寫入路徑 |
| 編輯與介面修正 | 右鍵複製選單、Del鍵行為、搜尋關鍵字疊加、拼字檢查範圍、行動端滑動等 | 通用編輯器與 UI |
「改進功能」共 30 餘項,「修復缺陷」共 8 項,屬典型的穩定性迭代版本,未引入破壞性架構調整,升級風險較低。
資料庫欄位體系:新增「行號」欄位類型
本版本最重要的資料庫能力擴充,是由 Pull Request #11008 引入的**「行號」(lineNumber)欄位類型**,可讓資料庫自動為每一行產生序號列。
欄位類型體系的後端定義
思源筆記的資料庫(屬性視圖)欄位類型在內核層由KeyType常數完整定義,位於 kernel/av/av.go:
// KeyType 描述了屬性視圖屬性欄位的類型。 type KeyType string const ( KeyTypeBlock KeyType = "block" // 主鍵 KeyTypeText KeyType = "text" // 文字 KeyTypeNumber KeyType = "number" // 數字 KeyTypeDate KeyType = "date" // 日期 KeyTypeSelect KeyType = "select" // 單選 KeyTypeMSelect KeyType = "mSelect" // 多選 KeyTypeURL KeyType = "url" // URL KeyTypeEmail KeyType = "email" // Email KeyTypePhone KeyType = "phone" // 電話 KeyTypeMAsset KeyType = "mAsset" // 資源 KeyTypeTemplate KeyType = "template" // 範本 KeyTypeCreated KeyType = "created" // 建立時間 KeyTypeUpdated KeyType = "updated" // 更新時間 KeyTypeCheckbox KeyType = "checkbox" // 勾選方塊 KeyTypeRelation KeyType = "relation" // 關聯 KeyTypeRollup KeyType = "rollup" // 彙總 KeyTypeLineNumber KeyType = "lineNumber" // 行號 )可以從該定義看出兩個資訊點:其一,v3.0.10 之後資料庫欄位類型達到 17 種,「行號」與「主鍵、建立時間、更新時間」一樣屬於由系統維護、而非使用者逐格填寫的自動計算型欄位;其二,Key結構體中每個欄位類型可攜帶各自專屬的配置(如單選的Options、數字的NumberFormat、範本的Template、關聯的Relation、彙總的Rollup),後續前端可據此渲染不同的編輯器。
前端渲染與特殊處理
行號欄位在前端的落點集中在app/src/protyle/render/av/目錄下:
- col.ts:新增欄位選單中註冊
lineNumber類型,並將其顯示名稱指向語言資源window.siyuan.languages.lineNumber;且行號欄位被安排在「建立時間」等系統欄位之前插入(檔案內註解標明「在建立時間前插入 lineNumber」),這說明行號列在表格視圖中有既定的列順序策略。 - cell.ts:定義行號單元格的取值與渲染分支,並在多處把
lineNumber與created、updated、template、rollup並列處理——這些欄位都不接受使用者直接編輯,因此在單元格交互邏輯中會被排除在可編輯清單之外。 - calc.ts:當資料行進行排序、篩選等計算時,行號作為基於行位置的派生值被單獨處理,避免隨內容變更而錯誤重算。
- action.ts:在行操作(如新增、刪除、更新欄位)的判斷中,將
lineNumber與系統時間欄位一併排除,防止使用者誤編輯。 - gallery/item.ts:畫廊視圖中同樣透過
fieldType === "lineNumber"判斷是否輸出序號資訊。 - 樣式方面,app/src/assets/scss/business/_av.scss 為
[data-dtype="lineNumber"]提供了專用呈現規則,確保行號列在各視圖下外觀統一。
實務要點:若要為清單建立流水序號,直接在資料庫表格視圖新增一欄並選取「行號」即可;該欄位由系統依當前行順序自動生成,不佔用內容欄位,也不會被手動改寫。
資料庫過濾與排序:選項搜尋與多項修正
過濾選項值支援搜尋
此前當單選/多選欄位的可選項很多時,在過濾面板中人工捲動尋找目標項效率偏低。v3.0.10 為資料庫過濾面板的選項清單加入了搜尋框,其實作位置在 app/src/protyle/render/av/filter.ts:
const searchInput = options.length > 5 ? `<input class="b3-text-field" placeholder="${window.siyuan.languages.search}" contenteditable="false">【免费下载链接】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),仅供参考