From dd63f2d3614d440d6cd550556d64b1c48f981650 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Wed, 5 Apr 2023 09:45:21 +0800 Subject: [PATCH 1/5] :memo: Prompt to return to the desktop on the Android https://github.com/siyuan-note/siyuan/issues/7886 --- app/appearance/langs/en_US.json | 2 +- app/appearance/langs/es_ES.json | 2 +- app/appearance/langs/fr_FR.json | 2 +- app/appearance/langs/zh_CHT.json | 2 +- app/appearance/langs/zh_CN.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index c40a05396..f81ca111c 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -1,5 +1,5 @@ { - "returnDesktop": "Press back again again to exit.", + "returnDesktop": "Press back again to desktop", "enterNew": "Enter to create", "enterNewTip": "No documents found, Enter to create a new document.", "searchTip1": "to navigate", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index 2b4d8ab5c..ead81d977 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -1,5 +1,5 @@ { - "returnDesktop": "Presiona atrás de nuevo para salir.", + "returnDesktop": "Presiona volver de nuevo al escritorio", "enterNew": "Ingresar para crear", "enterNewTip": "No se encontraron documentos, ingrese para crear un nuevo documento.", "searchTip1": "para navegar", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index 5139ee5bd..021bce334 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -1,5 +1,5 @@ { - "returnDesktop": "Appuyez à nouveau pour quitter.", + "returnDesktop": "Appuyez à nouveau sur le bureau", "enterNew": "Entrez pour créer", "enterNewTip": "Aucun document trouvé, entrez pour créer un nouveau document.", "searchTip1": "pour naviguer", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index 64c47e3a4..4f7d8957e 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -1,5 +1,5 @@ { - "returnDesktop": "再按一次退出應用", + "returnDesktop": "再按一次返回桌面", "enterNew": "回車創建", "enterNewTip": "搜索結果為空,回車創建新文檔", "searchTip1": "導航", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index 809ab1256..1356edc4e 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -1,5 +1,5 @@ { - "returnDesktop": "再按一次退出应用", + "returnDesktop": "再按一次返回桌面", "enterNew": "回车创建", "enterNewTip": "搜索结果为空,回车创建新文档", "searchTip1": "导航", From c836dc72ce2926712c2b3d37dd4f690b6a73dde9 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Wed, 5 Apr 2023 14:43:38 +0800 Subject: [PATCH 2/5] :bug: Initialization interface hangs on the macOS Fix https://github.com/siyuan-note/siyuan/issues/7887 --- app/electron/init.html | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/app/electron/init.html b/app/electron/init.html index 35ed4fb94..70a07683b 100644 --- a/app/electron/init.html +++ b/app/electron/init.html @@ -416,9 +416,21 @@ } const walk = (dir, files = []) => { + var dirFiles; const fs = require('fs') + try { + if (!fs.existsSync(dir)) { + console.log("dir [" + dir + "] not exists") + return files + } + + dirFiles = fs.readdirSync(dir) + } catch (e) { + console.error("read dir [" + dir + "] failed: ", e) + return files + } + const path = require('path') - const dirFiles = fs.readdirSync(dir) for (const f of dirFiles) { let stat = fs.lstatSync(dir + path.sep + f) if (stat.isSymbolicLink()) { From 0d832cc97e9d777575450bcb920e129687ce1913 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Wed, 5 Apr 2023 14:51:00 +0800 Subject: [PATCH 3/5] :bug: Initialization interface hangs on the macOS Fix https://github.com/siyuan-note/siyuan/issues/7887 --- app/electron/init.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/electron/init.html b/app/electron/init.html index 70a07683b..e8a02a70a 100644 --- a/app/electron/init.html +++ b/app/electron/init.html @@ -416,7 +416,7 @@ } const walk = (dir, files = []) => { - var dirFiles; + let dirFiles; const fs = require('fs') try { if (!fs.existsSync(dir)) { From 813de05019a66342dff9450f9b4dd314e69ece6d Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Wed, 5 Apr 2023 15:22:44 +0800 Subject: [PATCH 4/5] :art: Improve kernel HTTP panic recover Fix https://github.com/siyuan-note/siyuan/issues/7888 --- kernel/model/session.go | 24 ++++++++++++++++++++++++ kernel/server/serve.go | 9 ++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/kernel/model/session.go b/kernel/model/session.go index 53ba90f58..fdf0c2858 100644 --- a/kernel/model/session.go +++ b/kernel/model/session.go @@ -19,6 +19,7 @@ package model import ( "net/http" "strings" + "time" "github.com/88250/gulu" "github.com/gin-gonic/gin" @@ -230,3 +231,26 @@ func CheckAuth(c *gin.Context) { c.Next() } + +var timingAPIs = map[string]bool{ + "/api/search": true, +} + +func Timing(c *gin.Context) { + + now := time.Now().UnixMilli() + c.Next() + elapsed := time.Now().UnixMilli() - now + //if 000 < elapsed { + logging.LogInfof("[%s] elapsed [%dms]", c.Request.RequestURI, elapsed) + //} +} + +func Recover(c *gin.Context) { + defer func() { + logging.Recover() + c.Status(500) + }() + + c.Next() +} diff --git a/kernel/server/serve.go b/kernel/server/serve.go index 3dede84be..d72a7444d 100644 --- a/kernel/server/serve.go +++ b/kernel/server/serve.go @@ -51,9 +51,12 @@ func Serve(fastMode bool) { gin.SetMode(gin.ReleaseMode) ginServer := gin.New() ginServer.MaxMultipartMemory = 1024 * 1024 * 32 // 插入较大的资源文件时内存占用较大 https://github.com/siyuan-note/siyuan/issues/5023 - ginServer.Use(gin.Recovery()) - ginServer.Use(corsMiddleware()) // 后端服务支持 CORS 预检请求验证 https://github.com/siyuan-note/siyuan/pull/5593 - ginServer.Use(gzip.Gzip(gzip.DefaultCompression, gzip.WithExcludedExtensions([]string{".pdf", ".mp3", ".wav", ".ogg", ".mov", ".weba", ".mkv", ".mp4", ".webm"}))) + ginServer.Use( + model.Timing, + model.Recover, + corsMiddleware(), // 后端服务支持 CORS 预检请求验证 https://github.com/siyuan-note/siyuan/pull/5593 + gzip.Gzip(gzip.DefaultCompression, gzip.WithExcludedExtensions([]string{".pdf", ".mp3", ".wav", ".ogg", ".mov", ".weba", ".mkv", ".mp4", ".webm"})), + ) cookieStore.Options(sessions.Options{ Path: "/", From 97c6bb92733d36f7433824b4123602005c6f9088 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Wed, 5 Apr 2023 15:55:07 +0800 Subject: [PATCH 5/5] :art: Monitor the search performance and suggest solutions Fix https://github.com/siyuan-note/siyuan/issues/7873 --- app/appearance/langs/en_US.json | 3 ++- app/appearance/langs/es_ES.json | 3 ++- app/appearance/langs/fr_FR.json | 3 ++- app/appearance/langs/zh_CHT.json | 3 ++- app/appearance/langs/zh_CN.json | 6 +++++- kernel/model/session.go | 29 +++++++++++++++++++++++------ 6 files changed, 36 insertions(+), 11 deletions(-) diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index f81ca111c..013d3bdba 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -1157,6 +1157,7 @@ "196": "Do not set the workspace under the path of a third-party sync disk, otherwise the data will be damaged (iCloud/OneDrive/Dropbox/Google Drive/Nutstore/Baidu Netdisk/Tencent Weiyun, etc.)", "197": "Currently the editor is in read-only mode. If you need to edit content, please switch to edit mode", "198": "This is not a valid Data archive. If the archive was exported from [Doc tree], please import it from [Doc tree]", - "199": "This is not a valid .sy.zip archive. If the archive was exported from [Settings], please import it from [Settings]" + "199": "This is not a valid .sy.zip archive. If the archive was exported from [Settings], please import it from [Settings]", + "200": "The response time of the global search is slow. It is recommended to adjust [Settings - Search - Number of search results displayed] to 64 or a smaller value. For more suggestions, please refer to the performance optimization chapter of the user guide" } } diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index ead81d977..de6f335ec 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -1157,6 +1157,7 @@ "196": "No configure el espacio de trabajo bajo la ruta de un disco de sincronización de terceros, de lo contrario, los datos se dañarán (iCloud/OneDrive/Dropbox/Google Drive/Nutstore/Baidu Netdisk/Tencent Weiyun, etc.)", "197": "Actualmente, el editor se encuentra en modo de solo lectura. Si necesita editar contenido, cambie al modo de edición", "198": "Este no es un archivo data.zip válido. Si el archivo se exportó de [Árbol de documentos], importalo de [Árbol de documentos]", - "199": "Este no es un archivo .sy.zip válido. Si el archivo se exportó desde [Configuración], impórtelo desde [Configuración]" + "199": "Este no es un archivo .sy.zip válido. Si el archivo se exportó desde [Configuración], impórtelo desde [Configuración]", + "200": "El tiempo de respuesta de la búsqueda global es lento. Se recomienda ajustar [Configuración - Búsqueda - Número de resultados de búsqueda mostrados] a 64 o un valor menor. Para obtener más sugerencias, consulte el capítulo de optimización del rendimiento de la guía del usuario" } } diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index 021bce334..848c23988 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -1157,6 +1157,7 @@ "196": "Ne définissez pas l'espace de travail sous le chemin d'un disque de synchronisation tiers, sinon les données seront endommagées (iCloud/OneDrive/Dropbox/Google Drive/Nutstore/Baidu Netdisk/Tencent Weiyun, etc.)", "197": "Actuellement, l'éditeur est en mode lecture seule. Si vous devez modifier le contenu, veuillez passer en mode édition", "198": "Ceci n'est pas une archive data.zip valide. Si l'archive a été exportée depuis [Doc tree], veuillez l'importer depuis [Doc tree]", - "199": "Ceci n'est pas une archive .sy.zip valide. Si l'archive a été exportée depuis [Paramètres], veuillez l'importer depuis [Paramètres]" + "199": "Ceci n'est pas une archive .sy.zip valide. Si l'archive a été exportée depuis [Paramètres], veuillez l'importer depuis [Paramètres]", + "200": "Le temps de réponse de la recherche globale est lent. Il est recommandé d'ajuster [Paramètres - Recherche - Nombre de résultats de recherche affichés] à 64 ou à une valeur inférieure. Pour plus de suggestions, veuillez vous référer au chapitre sur l'optimisation des performances de la notice" } } diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index 4f7d8957e..8c59e099f 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -1157,6 +1157,7 @@ "196": "請勿將工作空間設置在第三方同步盤路徑下,否則數據會被損壞(iCloud/OneDrive/Dropbox/Google Drive/堅果雲/百度網盤/騰訊微雲等)", "197": "目前編輯器正處於只讀模式狀態,如果需要編輯內容,請切換到編輯模式", "198": "這不是一個有效的 Data 壓縮包。如果該數據包是從 [文檔樹] 導出的,請從 [文檔樹] 導入", - "199": "這不是一個有效的 .sy.zip 壓縮包。如果該數據包是從 [設置] 中導出的,請從 [設置] 中導入" + "199": "這不是一個有效的 .sy.zip 壓縮包。如果該數據包是從 [設置] 中導出的,請從 [設置] 中導入", + "200": "全局搜索響應時間較慢,建議將 [設置 - 搜索 - 搜索結果顯示數] 調整為 64 或更小的值,更多建議請參考用戶指南性能優化章節" } } diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index 1356edc4e..6e0bad5db 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -956,6 +956,9 @@ "openSource": "访问 GitHub 项目", "resetWindow": "重置窗口并退出程序", "quit": "退出程序" + }, + "_performance": { + }, "_kernel": { "0": "查询笔记本失败", @@ -1157,6 +1160,7 @@ "196": "请勿将工作空间设置在第三方同步盘路径下,否则数据会被损坏(iCloud/OneDrive/Dropbox/Google Drive/坚果云/百度网盘/腾讯微云等)", "197": "目前编辑器正处于只读模式状态,如果需要编辑内容,请切换到编辑模式", "198": "这不是一个有效的 Data 压缩包。如果该数据包是从 [文档树] 导出的,请从 [文档树] 导入", - "199": "这不是一个有效的 .sy.zip 压缩包。如果该数据包是从 [设置] 中导出的,请从 [设置] 中导入" + "199": "这不是一个有效的 .sy.zip 压缩包。如果该数据包是从 [设置] 中导出的,请从 [设置] 中导入", + "200": "全局搜索响应时间较慢,建议将 [设置 - 搜索 - 搜索结果显示数] 调整为 64 或更小的值,更多建议请参考用户指南性能优化章节" } } diff --git a/kernel/model/session.go b/kernel/model/session.go index fdf0c2858..66a5351a1 100644 --- a/kernel/model/session.go +++ b/kernel/model/session.go @@ -18,6 +18,8 @@ package model import ( "net/http" + "os" + "strconv" "strings" "time" @@ -232,18 +234,33 @@ func CheckAuth(c *gin.Context) { c.Next() } -var timingAPIs = map[string]bool{ - "/api/search": true, +var timingAPIs = map[string]int{ + "/api/search/fullTextSearchBlock": 200, // Monitor the search performance and suggest solutions https://github.com/siyuan-note/siyuan/issues/7873 } func Timing(c *gin.Context) { + p := c.Request.URL.Path + tip, ok := timingAPIs[p] + if !ok { + c.Next() + return + } + + timing := 15 * 1000 + if timingEnv := os.Getenv("SIYUAN_PERFORMANCE_TIMING"); "" != timingEnv { + val, err := strconv.Atoi(timingEnv) + if nil == err { + timing = val + } + } now := time.Now().UnixMilli() c.Next() - elapsed := time.Now().UnixMilli() - now - //if 000 < elapsed { - logging.LogInfof("[%s] elapsed [%dms]", c.Request.RequestURI, elapsed) - //} + elapsed := int(time.Now().UnixMilli() - now) + if timing < elapsed { + logging.LogWarnf("[%s] elapsed [%dms]", c.Request.RequestURI, elapsed) + util.PushMsg(Conf.Language(tip), 7000) + } } func Recover(c *gin.Context) {