🎨 Warn users about potential performance issues when running on non-SSD drives https://github.com/siyuan-note/siyuan/issues/16835

Signed-off-by: Daniel <845765@qq.com>
This commit is contained in:
Daniel 2026-01-15 20:55:00 +08:00
parent 94ae418708
commit 2df2f2eb3a
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
18 changed files with 82 additions and 18 deletions

View file

@ -1720,6 +1720,7 @@
"274": "يحتوي هذا المجلد على ملفات أخرى، يرجى إنشاء مجلد جديد كمساحة عمل",
"275": "يتعذر فتح المستند الذي تم إنشاؤه بواسطة إصدار أحدث. يرجى الترقية إلى أحدث إصدار ثم المحاولة مرة أخرى",
"276": "جارٍ تنظيف الملفات المؤقتة...",
"277": "اكتمل تنظيف الملفات المؤقتة، تم حذف [%d] ملفًا، تم تحرير [%s] من مساحة القرص"
"277": "اكتمل تنظيف الملفات المؤقتة، تم حذف [%d] ملفًا، تم تحرير [%s] من مساحة القرص",
"278": "مساحة العمل غير موجودة على قرص الحالة الصلبة (SSD)، قد يؤدي ذلك إلى تدهور كبير في الأداء، يُنصح بوضع مساحة العمل على قرص SSD"
}
}

View file

@ -1720,6 +1720,7 @@
"274": "Dieser Ordner enthält andere Dateien, erstellen Sie bitte einen neuen Ordner als Arbeitsbereich",
"275": "Dokumente, die mit einer neueren Version erstellt wurden, können nicht geöffnet werden. Bitte aktualisieren Sie auf die neueste Version und versuchen Sie es erneut",
"276": "Temporäre Dateien werden bereinigt...",
"277": "Bereinigung der temporären Dateien abgeschlossen, [%d] Dateien entfernt, [%s] Festplattenspeicher freigegeben"
"277": "Bereinigung der temporären Dateien abgeschlossen, [%d] Dateien entfernt, [%s] Festplattenspeicher freigegeben",
"278": "Der Arbeitsbereich befindet sich nicht auf einer SSD, was zu erheblichen Leistungseinbußen führen kann, es wird empfohlen, den Arbeitsbereich auf einer SSD zu platzieren"
}
}

View file

@ -1720,6 +1720,7 @@
"274": "This folder contains other files, please create a new folder as the workspace",
"275": "Cannot open documents created by a newer version. Please upgrade to the latest version and try again",
"276": "Cleaning temporary files...",
"277": "Temporary files cleaned, [%d] files removed, [%s] disk space freed"
"277": "Temporary files cleaned, [%d] files removed, [%s] disk space freed",
"278": "The workspace is not located on a solid-state drive (SSD), which can cause significant performance degradation, it is recommended to place the workspace on an SSD"
}
}

View file

@ -1720,6 +1720,7 @@
"274": "Esta carpeta contiene otros archivos, cree una nueva carpeta como espacio de trabajo",
"275": "No se puede abrir el documento creado con una versión más reciente. Actualiza a la última versión e inténtalo de nuevo",
"276": "Limpiando archivos temporales...",
"277": "Limpieza de archivos temporales completada, [%d] archivos eliminados, se liberaron [%s] de espacio en disco"
"277": "Limpieza de archivos temporales completada, [%d] archivos eliminados, se liberaron [%s] de espacio en disco",
"278": "El espacio de trabajo no está ubicado en un disco de estado sólido (SSD), esto puede provocar una disminución notable del rendimiento, se recomienda colocar el espacio de trabajo en un SSD"
}
}

View file

@ -1720,6 +1720,7 @@
"274": "Ce dossier contient dautres fichiers, créez un nouveau dossier comme espace de travail",
"275": "Impossible d'ouvrir le document créé par une version plus récente. Veuillez mettre à jour vers la dernière version et réessayer",
"276": "Nettoyage des fichiers temporaires...",
"277": "Nettoyage des fichiers temporaires terminé, [%d] fichiers supprimés, [%s] d'espace disque libéré"
"277": "Nettoyage des fichiers temporaires terminé, [%d] fichiers supprimés, [%s] d'espace disque libéré",
"278": "L'espace de travail n'est pas placé sur un disque SSD, ce qui peut entraîner une baisse significative des performances, il est recommandé de placer l'espace de travail sur un SSD"
}
}

View file

@ -1720,6 +1720,7 @@
"274": "התיקיה הזו מכילה קבצים נוספים, צור תיקיה חדשה כסביבת עבודה",
"275": "לא ניתן לפתוח את המסמך שנוצר בגרסה חדשה יותר. יש לעדכן לגרסה העדכנית ביותר ולנסות שוב",
"276": "ניקוי קבצים זמניים...",
"277": "ניקוי הקבצים הזמניים הושלם, נמחקו [%d] קבצים, שוחררו [%s] מקום בדיסק"
"277": "ניקוי הקבצים הזמניים הושלם, נמחקו [%d] קבצים, שוחררו [%s] מקום בדיסק",
"278": "מרחב העבודה לא מאוחסן בכונן מצב מוצק (SSD), הדבר עלול להוביל לירידה משמעותית בביצועים, מומלץ לאחסן את מרחב העבודה על גבי SSD"
}
}

View file

@ -1720,6 +1720,7 @@
"274": "Questa cartella contiene altri file, crea una nuova cartella come spazio di lavoro",
"275": "Impossibile aprire il documento creato con una versione più recente. Aggiorna all'ultima versione e riprova",
"276": "Pulizia dei file temporanei in corso...",
"277": "Pulizia dei file temporanei completata, [%d] file rimossi, liberati [%s] di spazio su disco"
"277": "Pulizia dei file temporanei completata, [%d] file rimossi, liberati [%s] di spazio su disco",
"278": "Lo spazio di lavoro non è su un disco a stato solido (SSD), ciò può causare una diminuzione significativa delle prestazioni, si consiglia di posizionare lo spazio di lavoro su un SSD"
}
}

View file

@ -1720,6 +1720,7 @@
"274": "このフォルダーには他のファイルが含まれています。新しいフォルダーをワークスペースとして作成してください",
"275": "新しいバージョンで作成された文書を開くことができません。最新バージョンにアップデートしてから再試行してください",
"276": "一時ファイルをクリーンアップしています...",
"277": "一時ファイルのクリーンアップが完了しました。[%d]件のファイルを削除し、合計で [%s] のディスク容量を解放しました"
"277": "一時ファイルのクリーンアップが完了しました。[%d]件のファイルを削除し、合計で [%s] のディスク容量を解放しました",
"278": "ワークスペースがSSD上に配置されていません、これにより著しいパフォーマンス低下が発生する可能性があるため、ワークスペースをSSD上で使用することを推奨します"
}
}

View file

@ -1720,6 +1720,7 @@
"274": "이 폴더에는 다른 파일이 포함되어 있습니다. 새 폴더를 생성하여 작업 공간으로 사용하세요",
"275": "더 높은 버전에서 생성된 문서는 열 수 없습니다. 최신 버전으로 업그레이드한 후 다시 시도해 주세요",
"276": "임시 파일을 정리하는 중...",
"277": "임시 파일 정리 완료, [%d]개 파일이 삭제되어 총 [%s]의 디스크 공간이 확보되었습니다"
"277": "임시 파일 정리 완료, [%d]개 파일이 삭제되어 총 [%s]의 디스크 공간이 확보되었습니다",
"278": "작업 공간이 SSD에 있지 않습니다, 이로 인해 성능이 크게 저하될 수 있으므로 작업 공간을 SSD에 두어 사용하시기 바랍니다"
}
}

View file

@ -1720,6 +1720,7 @@
"274": "Ten folder zawiera inne pliki, utwórz nowy folder jako przestrzeń roboczą",
"275": "Nie można otworzyć dokumentu utworzonego w nowszej wersji. Zaktualizuj program do najnowszej wersji i spróbuj ponownie",
"276": "Czyszczenie plików tymczasowych...",
"277": "Czyszczenie plików tymczasowych zakończone, usunięto [%d] plików, zwolniono [%s] miejsca na dysku"
"277": "Czyszczenie plików tymczasowych zakończone, usunięto [%d] plików, zwolniono [%s] miejsca na dysku",
"278": "Obszar roboczy nie znajduje się na dysku SSD, co może spowodować znaczny spadek wydajności, zaleca się umieszczenie obszaru roboczego na dysku SSD"
}
}

View file

@ -1720,6 +1720,7 @@
"274": "Esta pasta contém outros arquivos, crie uma nova pasta para o espaço de trabalho",
"275": "Não é possível abrir o documento criado por uma versão mais recente. Atualize para a versão mais recente e tente novamente",
"276": "Limpando arquivos temporários...",
"277": "Limpeza de arquivos temporários concluída, [%d] arquivos removidos, [%s] de espaço em disco liberado"
"277": "Limpeza de arquivos temporários concluída, [%d] arquivos removidos, [%s] de espaço em disco liberado",
"278": "O espaço de trabalho não está em um disco de estado sólido (SSD), o que pode causar uma queda significativa de desempenho, recomenda-se colocar o espaço de trabalho em um SSD"
}
}

View file

@ -1720,6 +1720,7 @@
"274": "Эта папка содержит другие файлы, создайте отдельную папку для рабочего пространства",
"275": "Невозможно открыть документ, созданный в более новой версии. Пожалуйста, обновите приложение до последней версии и попробуйте снова",
"276": "Очистка временных файлов...",
"277": "Очистка временных файлов завершена, удалено [%d] файлов, освобождено [%s] дискового пространства"
"277": "Очистка временных файлов завершена, удалено [%d] файлов, освобождено [%s] дискового пространства",
"278": "Рабочее пространство не размещено на твердотельном накопителе (SSD), это может привести к заметному снижению производительности, рекомендуется разместить рабочее пространство на SSD"
}
}

View file

@ -1720,6 +1720,7 @@
"274": "Bu klasör başka dosyalar içeriyor, lütfen yeni bir klasör oluştur ve onu çalışma alanı olarak kullan",
"275": "Daha yeni bir sürümde oluşturulmuş belgeler açılamıyor. Lütfen en son sürüme yükseltip tekrar deneyin",
"276": "Geçici dosyalar temizleniyor...",
"277": "Geçici dosyalar temizlendi, [%d] dosya silindi, toplam [%s] boş alan açıldı"
"277": "Geçici dosyalar temizlendi, [%d] dosya silindi, toplam [%s] boş alan açıldı",
"278": "Çalışma alanı katı hal sürücüsünde (SSD) değil, bu belirgin bir performans düşüşüne yol açabilir, çalışma alanınızı SSD'de tutmanız önerilir"
}
}

View file

@ -1720,6 +1720,7 @@
"274": "該資料夾包含其他檔案,請新建一個資料夾作為工作空間",
"275": "無法打開由新版本建立的檔案,請升級到最新版本後再試",
"276": "正在清理臨時檔案...",
"277": "清理臨時檔案完畢,已刪除 [%d] 個檔案,共釋放 [%s] 磁碟空間"
"277": "清理臨時檔案完畢,已刪除 [%d] 個檔案,共釋放 [%s] 磁碟空間",
"278": "工作空間未放置在固態硬碟上,這會導致顯著的效能下降,建議將工作空間放置在固態硬碟上使用"
}
}

View file

@ -1720,6 +1720,7 @@
"274": "该文件夹包含了其他文件,请新建一个文件夹作为工作空间",
"275": "无法打开新版本创建的文档,请升级到最新版本后再试",
"276": "正在清理临时文件...",
"277": "清理临时文件完毕,已删除 [%d] 个文件,共释放 [%s] 磁盘空间"
"277": "清理临时文件完毕,已删除 [%d] 个文件,共释放 [%s] 磁盘空间",
"278": "工作空间未放置在固态硬盘上,这会导致显著的性能下降,建议将工作空间放置在固态硬盘上使用"
}
}

View file

@ -41,6 +41,7 @@ require (
github.com/gorilla/css v1.0.1
github.com/gorilla/websocket v1.5.3
github.com/imroc/req/v3 v3.57.0
github.com/jaypipes/ghw v0.21.2
github.com/jinzhu/copier v0.4.0
github.com/json-iterator/go v1.1.12
github.com/klippa-app/go-pdfium v1.17.2
@ -58,7 +59,7 @@ require (
github.com/sashabaranov/go-openai v1.41.2
github.com/shirou/gopsutil/v4 v4.25.12
github.com/siyuan-note/dataparser v0.0.0-20260115084335-b57cb8bc7c17
github.com/siyuan-note/dejavu v0.0.0-20260115094723-6e0b1a18fe74
github.com/siyuan-note/dejavu v0.0.0-20260115100906-6ced11ea86cd
github.com/siyuan-note/encryption v0.0.0-20251120032857-3ddc3c2cc49f
github.com/siyuan-note/eventbus v0.0.0-20240627125516-396fdb0f0f97
github.com/siyuan-note/filelock v0.0.0-20251212095217-08318833e008
@ -143,6 +144,7 @@ require (
github.com/hhrutter/tiff v1.0.2 // indirect
github.com/huandu/xstrings v1.5.0 // indirect
github.com/icholy/digest v1.1.0 // indirect
github.com/jaypipes/pcidb v1.1.1 // indirect
github.com/jaytaylor/html2text v0.0.0-20230321000545-74c2419ad056 // indirect
github.com/jolestar/go-commons-pool/v2 v2.1.2 // indirect
github.com/juju/errors v1.0.0 // indirect
@ -189,6 +191,7 @@ require (
golang.org/x/tools v0.40.0 // indirect
google.golang.org/protobuf v1.36.10 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
howett.net/plist v1.0.2-0.20250314012144-ee69052608d9 // indirect
modernc.org/fileutil v1.3.40 // indirect
)

View file

@ -243,6 +243,10 @@ github.com/icholy/digest v1.1.0 h1:HfGg9Irj7i+IX1o1QAmPfIBNu/Q5A5Tu3n/MED9k9H4=
github.com/icholy/digest v1.1.0/go.mod h1:QNrsSGQ5v7v9cReDI0+eyjsXGUoRSUZQHeQ5C4XLa0Y=
github.com/imroc/req/v3 v3.57.0 h1:LMTUjNRUybUkTPn8oJDq8Kg3JRBOBTcnDhKu7mzupKI=
github.com/imroc/req/v3 v3.57.0/go.mod h1:JL62ey1nvSLq81HORNcosvlf7SxZStONNqOprg0Pz00=
github.com/jaypipes/ghw v0.21.2 h1:woW0lqNMPbYk59sur6thOVM8YFP9Hxxr8PM+JtpUrNU=
github.com/jaypipes/ghw v0.21.2/go.mod h1:GPrvwbtPoxYUenr74+nAnWbardIZq600vJDD5HnPsPE=
github.com/jaypipes/pcidb v1.1.1 h1:QmPhpsbmmnCwZmHeYAATxEaoRuiMAJusKYkUncMC0ro=
github.com/jaypipes/pcidb v1.1.1/go.mod h1:x27LT2krrUgjf875KxQXKB0Ha/YXLdZRVmw6hH0G7g8=
github.com/jaytaylor/html2text v0.0.0-20180606194806-57d518f124b0/go.mod h1:CVKlgaMiht+LXvHG173ujK6JUhZXKb2u/BQtjPDIvyk=
github.com/jaytaylor/html2text v0.0.0-20230321000545-74c2419ad056 h1:iCHtR9CQyktQ5+f3dMVZfwD2KWJUgm7M0gdL9NGr8KA=
github.com/jaytaylor/html2text v0.0.0-20230321000545-74c2419ad056/go.mod h1:CVKlgaMiht+LXvHG173ujK6JUhZXKb2u/BQtjPDIvyk=
@ -375,8 +379,8 @@ github.com/shurcooL/gofontwoff v0.0.0-20181114050219-180f79e6909d/go.mod h1:05Ut
github.com/simplereach/timeutils v1.2.0/go.mod h1:VVbQDfN/FHRZa1LSqcwo4kNZ62OOyqLLGQKYB3pB0Q8=
github.com/siyuan-note/dataparser v0.0.0-20260115084335-b57cb8bc7c17 h1:cZbH1QcW/LWYtaKBv2i0O96qVm6HXKeEE3Z74VYdUHM=
github.com/siyuan-note/dataparser v0.0.0-20260115084335-b57cb8bc7c17/go.mod h1:zE2SJ4t+2lFAeLgmhi27YtfzdyOWh3l9DXXUr9m/xU0=
github.com/siyuan-note/dejavu v0.0.0-20260115094723-6e0b1a18fe74 h1:g1VIRSqpKUnSgV8LLtjWPOuII48ZL4raOW8fx2q+/hM=
github.com/siyuan-note/dejavu v0.0.0-20260115094723-6e0b1a18fe74/go.mod h1:WLGbo6s7L8Ed4W0hnDj9ofJ9mcQMlkjv3/JOp7RyrEk=
github.com/siyuan-note/dejavu v0.0.0-20260115100906-6ced11ea86cd h1:DIMArbQVffxrWnQXDeizBaHdapzc57nrQTnq+kqf4nE=
github.com/siyuan-note/dejavu v0.0.0-20260115100906-6ced11ea86cd/go.mod h1:WLGbo6s7L8Ed4W0hnDj9ofJ9mcQMlkjv3/JOp7RyrEk=
github.com/siyuan-note/encryption v0.0.0-20251120032857-3ddc3c2cc49f h1:HSgJKIAMgokJDAvBBfRj47SzRSm6mNGssY0Wv7rcEtg=
github.com/siyuan-note/encryption v0.0.0-20251120032857-3ddc3c2cc49f/go.mod h1:JE3S9VuJqTggyfhjesNDuqvqrRvwG3IctFjXXchLx1M=
github.com/siyuan-note/eventbus v0.0.0-20240627125516-396fdb0f0f97 h1:lM5v8BfNtbOL5jYwhCdMYBcYtr06IYBKjjSLAPMKTM8=
@ -575,6 +579,8 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
howett.net/plist v1.0.2-0.20250314012144-ee69052608d9 h1:eeH1AIcPvSc0Z25ThsYF+Xoqbn0CI/YnXVYoTLFdGQw=
howett.net/plist v1.0.2-0.20250314012144-ee69052608d9/go.mod h1:fyFX5Hj5tP1Mpk8obqA9MZgXT416Q5711SDT7dQLTLk=
modernc.org/fileutil v1.0.0/go.mod h1:JHsWpkrk/CnVV1H/eGlFf85BEpfkrp56ro8nojIq9Q8=
modernc.org/fileutil v1.3.40 h1:ZGMswMNc9JOCrcrakF1HrvmergNLAmxOPjizirpfqBA=
modernc.org/fileutil v1.3.40/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc=

View file

@ -35,6 +35,7 @@ import (
"github.com/denisbrodbeck/machineid"
"github.com/go-ole/go-ole"
"github.com/go-ole/go-ole/oleutil"
"github.com/jaypipes/ghw"
"github.com/siyuan-note/httpclient"
"github.com/siyuan-note/logging"
)
@ -105,6 +106,45 @@ func logBootInfo() {
if 0 < len(DisabledFeatures) {
logging.LogInfof("disabled features [%s]", strings.Join(DisabledFeatures, ", "))
}
if gulu.OS.IsWindows() || gulu.OS.IsLinux() {
go func() {
if ghw.DriveTypeSSD.String() != getWorkspaceDriveType() {
logging.LogWarnf("workspace dir [%s] is not in SSD drive, performance may be affected", WorkspaceDir)
WaitForUILoaded()
time.Sleep(3 * time.Second)
PushErrMsg(Langs[Lang][278], 15000)
}
}()
}
}
func getWorkspaceDriveType() string {
block, err := ghw.Block()
if err != nil {
logging.LogWarnf("get block storage info failed: %s", err)
return ""
}
if gulu.OS.IsWindows() {
part := filepath.VolumeName(WorkspaceDir)
for _, disk := range block.Disks {
for _, partition := range disk.Partitions {
if partition.MountPoint == part {
return partition.Disk.DriveType.String()
}
}
}
} else if gulu.OS.IsLinux() {
for _, disk := range block.Disks {
for _, partition := range disk.Partitions {
if strings.HasPrefix(WorkspaceDir, partition.MountPoint) {
return partition.Disk.DriveType.String()
}
}
}
}
return ""
}
func RandomSleep(minMills, maxMills int) {