From af434451e0e6257f9a64e80f4019804b8f89e201 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 5 Dec 2024 09:01:51 +0800 Subject: [PATCH] :zap: Improve system font loading https://github.com/siyuan-note/siyuan/issues/13356 --- kernel/api/system.go | 2 +- kernel/main.go | 2 ++ kernel/util/font.go | 19 ++++++++++++++++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/kernel/api/system.go b/kernel/api/system.go index edbb590e0..4020cf1a0 100644 --- a/kernel/api/system.go +++ b/kernel/api/system.go @@ -548,7 +548,7 @@ func setFollowSystemLockScreen(c *gin.Context) { func getSysFonts(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) - ret.Data = util.GetSysFonts() + ret.Data = util.LoadSysFonts() } func version(c *gin.Context) { diff --git a/kernel/main.go b/kernel/main.go index 1addbca3f..80b6a3462 100644 --- a/kernel/main.go +++ b/kernel/main.go @@ -48,6 +48,8 @@ func main() { util.PushClearAllMsg() job.StartCron() + + go util.LoadSysFonts() go model.AutoGenerateFileHistory() go cache.LoadAssets() go util.CheckFileSysStatus() diff --git a/kernel/util/font.go b/kernel/util/font.go index 5cc3637e4..b01a7303a 100644 --- a/kernel/util/font.go +++ b/kernel/util/font.go @@ -20,6 +20,8 @@ import ( "os" "sort" "strings" + "sync" + "time" "github.com/88250/gulu" "github.com/ConradIrwin/font/sfnt" @@ -30,7 +32,20 @@ import ( "golang.org/x/text/transform" ) -func GetSysFonts() (ret []string) { +var ( + sysFonts []string + sysFontsLock = sync.Mutex{} +) + +func LoadSysFonts() (ret []string) { + sysFontsLock.Lock() + defer sysFontsLock.Unlock() + + if 0 < len(sysFonts) { + return sysFonts + } + + start := time.Now() fonts := loadFonts() ret = []string{} for _, font := range fonts { @@ -39,6 +54,8 @@ func GetSysFonts() (ret []string) { ret = gulu.Str.RemoveDuplicatedElem(ret) ret = removeUnusedFonts(ret) sort.Strings(ret) + sysFonts = ret + logging.LogInfof("loaded system fonts [%d] in [%dms]", len(sysFonts), time.Since(start).Milliseconds()) return }