Selaa lähdekoodia

refactor: nginx params optimization #236

Jacky 3 viikkoa sitten
vanhempi
commit
16369bc635
34 muutettua tiedostoa jossa 3649 lisäystä ja 1345 poistoa
  1. 4 5
      api/nginx/performance.go
  2. 11 10
      api/nginx/status.go
  3. 42 19
      app/src/api/ngx.ts
  4. 2 1
      app/src/components/EnvGroupTabs/EnvGroupTabs.vue
  5. 1 1
      app/src/components/SystemRestore/SystemRestoreContent.vue
  6. 186 58
      app/src/language/ar/app.po
  7. 186 58
      app/src/language/de_DE/app.po
  8. 183 58
      app/src/language/en/app.po
  9. 186 58
      app/src/language/es/app.po
  10. 185 58
      app/src/language/fr_FR/app.po
  11. 185 58
      app/src/language/ko_KR/app.po
  12. 177 58
      app/src/language/messages.pot
  13. 186 58
      app/src/language/ru_RU/app.po
  14. 186 58
      app/src/language/tr_TR/app.po
  15. 183 58
      app/src/language/vi_VN/app.po
  16. 200 69
      app/src/language/zh_CN/app.po
  17. 186 58
      app/src/language/zh_TW/app.po
  18. 1 1
      app/src/views/config/ConfigEditor.vue
  19. 2 2
      app/src/views/dashboard/NginxDashBoard.vue
  20. 126 0
      app/src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue
  21. 449 0
      app/src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue
  22. 44 0
      app/src/views/dashboard/components/ParamsOpt/SizeInput.vue
  23. 53 0
      app/src/views/dashboard/components/ParamsOpt/TimeInput.vue
  24. 130 0
      app/src/views/dashboard/components/ParamsOptimization.vue
  25. 0 327
      app/src/views/dashboard/components/PerformanceOptimization.vue
  26. 4 4
      app/src/views/site/cert/Cert.vue
  27. 2 1
      app/uno.config.ts
  28. 0 135
      internal/config/perf_opt.go
  29. 0 122
      internal/nginx/config_info.go
  30. 246 0
      internal/performance/config_info.go
  31. 289 0
      internal/performance/perf_opt.go
  32. 6 3
      internal/performance/performance.go
  33. 1 1
      internal/performance/process_info.go
  34. 7 6
      internal/performance/stub_status.go

+ 4 - 5
api/nginx/performance.go

@@ -3,8 +3,7 @@ package nginx
 import (
 	"net/http"
 
-	"github.com/0xJacky/Nginx-UI/internal/config"
-	"github.com/0xJacky/Nginx-UI/internal/nginx"
+	"github.com/0xJacky/Nginx-UI/internal/performance"
 	"github.com/gin-gonic/gin"
 	"github.com/uozi-tech/cosy"
 )
@@ -12,7 +11,7 @@ import (
 // GetPerformanceSettings retrieves current Nginx performance settings
 func GetPerformanceSettings(c *gin.Context) {
 	// Get Nginx worker configuration info
-	perfInfo, err := nginx.GetNginxWorkerConfigInfo()
+	perfInfo, err := performance.GetNginxWorkerConfigInfo()
 	if err != nil {
 		cosy.ErrHandler(c, err)
 		return
@@ -22,12 +21,12 @@ func GetPerformanceSettings(c *gin.Context) {
 
 // UpdatePerformanceSettings updates Nginx performance settings
 func UpdatePerformanceSettings(c *gin.Context) {
-	var perfOpt config.PerfOpt
+	var perfOpt performance.PerfOpt
 	if !cosy.BindAndValid(c, &perfOpt) {
 		return
 	}
 
-	err := config.UpdatePerfOpt(&perfOpt)
+	err := performance.UpdatePerfOpt(&perfOpt)
 	if err != nil {
 		cosy.ErrHandler(c, err)
 		return

+ 11 - 10
api/nginx/status.go

@@ -10,6 +10,7 @@ import (
 	"time"
 
 	"github.com/0xJacky/Nginx-UI/internal/nginx"
+	"github.com/0xJacky/Nginx-UI/internal/performance"
 	"github.com/gin-gonic/gin"
 	"github.com/uozi-tech/cosy"
 	"github.com/uozi-tech/cosy/logger"
@@ -18,18 +19,18 @@ import (
 // NginxPerformanceInfo stores Nginx performance-related information
 type NginxPerformanceInfo struct {
 	// Basic status information
-	nginx.StubStatusData
+	performance.StubStatusData
 
 	// Process-related information
-	nginx.NginxProcessInfo
+	performance.NginxProcessInfo
 
 	// Configuration information
-	nginx.NginxConfigInfo
+	performance.NginxConfigInfo
 }
 
 // GetDetailStatus retrieves detailed Nginx status information
 func GetDetailStatus(c *gin.Context) {
-	response := nginx.GetPerformanceData()
+	response := performance.GetPerformanceData()
 	c.JSON(http.StatusOK, response)
 }
 
@@ -70,7 +71,7 @@ func StreamDetailStatus(c *gin.Context) {
 
 // sendPerformanceData sends performance data once
 func sendPerformanceData(c *gin.Context) error {
-	response := nginx.GetPerformanceData()
+	response := performance.GetPerformanceData()
 
 	// Send SSE event
 	c.SSEvent("message", response)
@@ -82,7 +83,7 @@ func sendPerformanceData(c *gin.Context) error {
 
 // CheckStubStatus gets Nginx stub_status module status
 func CheckStubStatus(c *gin.Context) {
-	stubStatus := nginx.GetStubStatus()
+	stubStatus := performance.GetStubStatus()
 
 	c.JSON(http.StatusOK, stubStatus)
 }
@@ -97,7 +98,7 @@ func ToggleStubStatus(c *gin.Context) {
 		return
 	}
 
-	stubStatus := nginx.GetStubStatus()
+	stubStatus := performance.GetStubStatus()
 
 	// If current status matches desired status, no action needed
 	if stubStatus.Enabled == json.Enable {
@@ -107,9 +108,9 @@ func ToggleStubStatus(c *gin.Context) {
 
 	var err error
 	if json.Enable {
-		err = nginx.EnableStubStatus()
+		err = performance.EnableStubStatus()
 	} else {
-		err = nginx.DisableStubStatus()
+		err = performance.DisableStubStatus()
 	}
 
 	if err != nil {
@@ -126,7 +127,7 @@ func ToggleStubStatus(c *gin.Context) {
 	}
 
 	// Check status after operation
-	newStubStatus := nginx.GetStubStatus()
+	newStubStatus := performance.GetStubStatus()
 
 	c.JSON(http.StatusOK, newStubStatus)
 }

+ 42 - 19
app/src/api/ngx.ts

@@ -35,37 +35,59 @@ export interface NgxLocation {
 
 export type DirectiveMap = Record<string, { links: string[] }>
 
+export interface ProxyCacheConfig {
+  enabled: boolean
+  path: string
+  levels: string
+  use_temp_path: string
+  keys_zone: string
+  inactive: string
+  max_size: string
+  min_free: string
+  manager_files: string
+  manager_sleep: string
+  manager_threshold: string
+  loader_files: string
+  loader_sleep: string
+  loader_threshold: string
+  purger: string
+  purger_files: string
+  purger_sleep: string
+  purger_threshold: string
+}
+
 export interface NginxPerformanceInfo {
-  active: number // 活动连接数
-  accepts: number // 总握手次数
-  handled: number // 总连接次数
-  requests: number // 总请求数
-  reading: number // 读取客户端请求数
-  writing: number // 响应数
-  waiting: number // 驻留进程(等待请求)
-  workers: number // 工作进程数
-  master: number // 主进程数
-  cache: number // 缓存管理进程数
-  other: number // 其他Nginx相关进程数
-  cpu_usage: number // CPU 使用率
-  memory_usage: number // 内存使用率(MB)
-  worker_processes: number // worker_processes 配置
-  worker_connections: number // worker_connections 配置
-  process_mode: string // worker进程配置模式:'auto'或'manual'
+  active: number // Number of active connections
+  accepts: number // Total number of accepted connections
+  handled: number // Total number of handled connections
+  requests: number // Total number of requests
+  reading: number // Number of connections reading request data
+  writing: number // Number of connections writing response data
+  waiting: number // Number of idle connections waiting for requests
+  workers: number // Number of worker processes
+  master: number // Number of master processes
+  cache: number // Number of cache manager processes
+  other: number // Number of other Nginx-related processes
+  cpu_usage: number // CPU usage percentage
+  memory_usage: number // Memory usage in MB
+  worker_processes: number // worker_processes configuration
+  worker_connections: number // worker_connections configuration
+  process_mode: string // Worker process configuration mode: 'auto' or 'manual'
 }
 
 export interface NginxConfigInfo {
-  worker_processes: number
+  worker_processes: string
   worker_connections: number
   process_mode: string
-  keepalive_timeout: number
+  keepalive_timeout: string
   gzip: string
   gzip_min_length: number
   gzip_comp_level: number
   client_max_body_size: string
-  server_names_hash_bucket_size: number
+  server_names_hash_bucket_size: string
   client_header_buffer_size: string
   client_body_buffer_size: string
+  proxy_cache: ProxyCacheConfig
 }
 
 export interface NginxPerfOpt {
@@ -79,6 +101,7 @@ export interface NginxPerfOpt {
   server_names_hash_bucket_size: string
   client_header_buffer_size: string
   client_body_buffer_size: string
+  proxy_cache: ProxyCacheConfig
 }
 
 const ngx = {

+ 2 - 1
app/src/components/EnvGroupTabs/EnvGroupTabs.vue

@@ -20,7 +20,8 @@ const loading = ref({
   restart: false,
 })
 
-// 使用SSE composable
+// Use SSE composable
+// Error handling is implemented internally by useSSE with automatic reconnection
 const { connect, disconnect } = useSSE()
 
 // Get node data when tab is not 'All'

+ 1 - 1
app/src/components/SystemRestore/SystemRestoreContent.vue

@@ -35,7 +35,7 @@ const formModel = reactive({
   verifyHash: true,
 })
 
-// 添加两个变量控制模态框显示和倒计时
+// Add two variables to control modal display and countdown
 const showRestoreModal = ref(false)
 const countdown = ref(5)
 const countdownTimer = ref<ReturnType<typeof setInterval> | null>(null)

+ 186 - 58
app/src/language/ar/app.po

@@ -117,7 +117,7 @@ msgstr "الوضع المتقدم"
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr "بعد ذلك، قم بتحديث هذه الصفحة وانقر فوق إضافة مفتاح مرور مرة أخرى."
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:117
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:118
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:419
 msgid "All"
 msgstr "الكل"
@@ -214,7 +214,7 @@ msgstr "هل أنت متأكد أنك تريد الحذف؟"
 msgid "Are you sure you want to recover this item?"
 msgstr "هل أنت متأكد أنك تريد استرداد هذا العنصر؟"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
 #, fuzzy
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr "هل أنت متأكد أنك تريد الحذف؟"
@@ -231,7 +231,7 @@ msgstr "هل أنت متأكد أنك تريد إزالة هذا العنصر؟"
 msgid "Are you sure you want to remove this location?"
 msgstr "هل أنت متأكد أنك تريد إزالة هذا المكان؟"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
 #, fuzzy
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr "هل أنت متأكد أنك تريد مسح كافة التنبيهات؟"
@@ -270,8 +270,8 @@ msgstr "إعدادات المصادقة"
 msgid "Author"
 msgstr "الكاتب"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:178
-#: src/views/dashboard/components/PerformanceOptimization.vue:189
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:31
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:43
 msgid "Auto"
 msgstr ""
 
@@ -365,6 +365,11 @@ msgstr "أساسي"
 msgid "Basic Mode"
 msgstr "الوضع الأساسي"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119
+#, fuzzy
+msgid "Basic Settings"
+msgstr "إعدادات المصادقة الثنائية"
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:83
 #, fuzzy
 msgid "Batch Actions"
@@ -395,16 +400,45 @@ msgstr "بناء مع"
 msgid "CA Dir"
 msgstr "مجلد سلطة التصديق"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:124
+msgid "Cache"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178
+msgid "Cache items not accessed within this time will be removed"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350
+msgid "Cache loader processing time threshold"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:139
 #: src/views/dashboard/components/PerformanceTablesCard.vue:94
 msgid "Cache manager processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288
+msgid "Cache manager processing time threshold"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246
+msgid "Cache Manager Settings"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124
+#, fuzzy
+msgid "Cache Path"
+msgstr "المسار المتغير"
+
 #: src/composables/usePerformanceMetrics.ts:57
 #: src/views/dashboard/components/ProcessDistributionCard.vue:14
 msgid "Cache Processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137
+msgid "Cache subdirectory levels structure, e.g. 1:2"
+msgstr ""
+
 #: src/views/preference/CertSettings.vue:19
 msgid "CADir"
 msgstr "مجلد سلطة التصديق"
@@ -629,23 +663,23 @@ msgstr ""
 msgid "Click to copy"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:307
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:120
 msgid "Client Body Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:289
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:113
 msgid "Client Header Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:259
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99
 msgid "Client Max Body Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:308
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:121
 msgid "Client request body buffer size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:290
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:114
 msgid "Client request header buffer size"
 msgstr ""
 
@@ -681,7 +715,7 @@ msgstr ""
 msgid "Compare with Current"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:248
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr ""
 
@@ -732,7 +766,7 @@ msgstr ""
 msgid "Connection lost, please refresh the page."
 msgstr "تم فقدان الاتصال، يرجى تحديث الصفحة."
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:207
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61
 msgid "Connection timeout period"
 msgstr ""
 
@@ -889,6 +923,10 @@ msgstr "أيام"
 msgid "Decryption failed"
 msgstr "وصف"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150
+msgid "Define shared memory zone name and size, e.g. proxy_cache:10m"
+msgstr ""
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:21
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/certificate/components/RemoveCert.vue:87
@@ -1008,6 +1046,15 @@ msgstr ""
 msgid "Directives"
 msgstr "توجيهات"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135
+#, fuzzy
+msgid "Directory Levels"
+msgstr "توجيهات"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127
+msgid "Directory path to store cache files"
+msgstr ""
+
 #: src/views/site/site_edit/components/SiteStatusSegmented.vue:113
 #, fuzzy
 msgid "disable"
@@ -1249,7 +1296,7 @@ msgstr "تم تفعيل المصادقة الثنائية بنجاح"
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "فشل تفعيل التجديد التلقائي لـ %{name}"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:222
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:68
 msgid "Enable compression for content transfer"
 msgstr ""
 
@@ -1262,6 +1309,10 @@ msgstr "فشل التفعيل"
 msgid "Enable HTTPS"
 msgstr "تفعيل TOTP"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114
+msgid "Enable Proxy Cache"
+msgstr ""
+
 #: src/components/Notification/notifications.ts:25 src/language/constants.ts:54
 msgid "Enable Remote Site Error"
 msgstr "خطأ في تفعيل الموقع البعيد"
@@ -1620,7 +1671,7 @@ msgstr "فشل في الحصول على معلومات الشهادة"
 msgid "Failed to get certificate information"
 msgstr "فشل في الحصول على معلومات الشهادة"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:56
+#: src/views/dashboard/components/ParamsOptimization.vue:61
 #, fuzzy
 msgid "Failed to get Nginx performance settings"
 msgstr "فشل في الحصول على معلومات الشهادة"
@@ -1693,7 +1744,7 @@ msgstr ""
 msgid "Failed to revoke certificate"
 msgstr "فشل في الحصول على الشهادة"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:126
+#: src/views/dashboard/components/ParamsOptimization.vue:90
 #, fuzzy
 msgid "Failed to save Nginx performance settings"
 msgstr "فشل في الحصول على معلومات الشهادة"
@@ -1822,15 +1873,15 @@ msgstr "جارٍ الحصول على الشهادة، يرجى الانتظار.
 msgid "Github Proxy"
 msgstr "وكيل Github"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:221
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67
 msgid "GZIP Compression"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:247
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:87
 msgid "GZIP Compression Level"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:233
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:80
 msgid "GZIP Min Length"
 msgstr ""
 
@@ -1931,6 +1982,10 @@ msgstr "استيراد"
 msgid "Import Certificate"
 msgstr "استيراد شهادة"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176
+msgid "Inactive Time"
+msgstr ""
+
 #: src/views/dashboard/components/ProcessDistributionCard.vue:54
 msgid ""
 "Includes master process, worker processes, cache processes, and other Nginx "
@@ -2088,17 +2143,13 @@ msgstr "المُصدر: %{issuer}"
 msgid "Jwt Secret"
 msgstr "سر JWT"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:242
-msgid "KB"
-msgstr ""
-
 #: src/views/preference/components/RecoveryCodes.vue:74
 msgid ""
 "Keep your recovery codes as safe as your password. We recommend saving them "
 "with a password manager."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:206
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:60
 msgid "Keepalive Timeout"
 msgstr ""
 
@@ -2187,6 +2238,24 @@ msgstr "تحميل من الإعدادات"
 msgid "Load successfully"
 msgstr "تم التحميل بنجاح"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313
+#, fuzzy
+msgid "Loader Files"
+msgstr "إنشاء ملف"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308
+#, fuzzy
+msgid "Loader Settings"
+msgstr "تحميل من الإعدادات"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323
+msgid "Loader Sleep"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348
+msgid "Loader Threshold"
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:178
 msgid "Loading data..."
 msgstr ""
@@ -2289,7 +2358,22 @@ msgstr "إدارة المستخدمين"
 msgid "Managed Certificate"
 msgstr "شهادة مُدارة"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:179
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251
+#, fuzzy
+msgid "Manager Files"
+msgstr "إدارة المواقع"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261
+#, fuzzy
+msgid "Manager Sleep"
+msgstr "إدارة المواقع"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286
+#, fuzzy
+msgid "Manager Threshold"
+msgstr "إدارة التدفقات"
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:32
 msgid "Manual"
 msgstr ""
 
@@ -2324,11 +2408,15 @@ msgstr "الإصدار الحالي"
 msgid "Max Requests Per Second"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:260
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199
+msgid "Maximum Cache Size"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:100
 msgid "Maximum client request body size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:195
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:49
 #, fuzzy
 msgid "Maximum number of concurrent connections"
 msgstr "الإصدار الحالي"
@@ -2338,6 +2426,10 @@ msgstr "الإصدار الحالي"
 msgid "Maximum number of connections per worker process"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201
+msgid "Maximum total size of the cache"
+msgstr ""
+
 #: src/views/dashboard/components/PerformanceTablesCard.vue:195
 msgid "Maximum worker process number:"
 msgstr ""
@@ -2355,10 +2447,18 @@ msgstr "الذاكرة والتخزين"
 msgid "Memory Usage (RSS)"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:234
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81
 msgid "Minimum file size for compression"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224
+msgid "Minimum Free Space"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226
+msgid "Minimum free space in the cache directory"
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:29
 msgid "Minutes"
 msgstr "دقائق"
@@ -2618,8 +2718,8 @@ msgid ""
 msgstr "خطأ في تحليل تكوين Nginx"
 
 #: src/components/ChatGPT/ChatGPT.vue:374
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
 #: src/components/Notification/Notification.vue:133
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
@@ -2722,10 +2822,18 @@ msgstr "الإشعارات"
 msgid "Notifier not found"
 msgstr "لم يتم العثور على الملف"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:173
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26
 msgid "Number of concurrent worker processes, auto sets to CPU core count"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315
+msgid "Number of files processed by cache loader at once"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253
+msgid "Number of files processed by cache manager at once"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:129
 #: src/composables/usePerformanceMetrics.ts:169
 #: src/views/dashboard/components/PerformanceTablesCard.vue:120
@@ -2753,12 +2861,13 @@ msgstr ""
 "قد يتسبب وجوب تثبيت OCSP في حدوث أخطاء لبعض المستخدمين عند الوصول لأول مرة "
 "باستخدام Firefox."
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:227
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165
 #, fuzzy
 msgid "Off"
 msgstr "غير متصل"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:56
@@ -2789,7 +2898,8 @@ msgstr "حسنًا"
 msgid "OK"
 msgstr "حسنًا"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:226
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164
 msgid "On"
 msgstr ""
 
@@ -2797,7 +2907,7 @@ msgstr ""
 msgid "Once the verification is complete, the records will be removed."
 msgstr "بمجرد اكتمال التحقق، سيتم إزالة السجلات."
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:89
 #: src/views/dashboard/Environments.vue:100
@@ -2813,14 +2923,6 @@ msgstr ""
 msgid "OpenAI"
 msgstr "أوبن أي آي"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:164
-msgid "Optimize Nginx Performance"
-msgstr ""
-
-#: src/views/dashboard/components/PerformanceOptimization.vue:158
-msgid "Optimize Performance"
-msgstr ""
-
 #: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:231
 msgid "Or"
 msgstr "أو"
@@ -2877,6 +2979,11 @@ msgstr "إدارة المواقع"
 msgid "Params"
 msgstr "عوامل"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:109
+#: src/views/dashboard/components/ParamsOptimization.vue:115
+msgid "Params Optimization"
+msgstr ""
+
 #: src/views/preference/components/Passkey.vue:59
 msgid "Passkey"
 msgstr "مفتاح المرور"
@@ -2931,11 +3038,16 @@ msgstr "نفذ"
 msgid "Perform core upgrade error"
 msgstr "خطأ في تنفيذ ترقية النواة"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:121
+#, fuzzy
+msgid "Performance"
+msgstr "نفذ"
+
 #: src/views/dashboard/NginxDashBoard.vue:185
 msgid "Performance Metrics"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:122
+#: src/views/dashboard/components/ParamsOptimization.vue:86
 #, fuzzy
 msgid "Performance settings saved successfully"
 msgstr "تم التعطيل بنجاح"
@@ -3227,7 +3339,7 @@ msgstr "ملاحظة الإصدار"
 msgid "Reload"
 msgstr "إعادة تحميل"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:138
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:139
 #: src/views/environments/group/columns.ts:24
 #: src/views/environments/group/EnvGroup.vue:37
 #: src/views/environments/list/Environment.vue:120
@@ -3256,7 +3368,7 @@ msgstr "خطأ في إعادة تسمية الموقع البعيد"
 msgid "Reload Remote Nginx Success"
 msgstr "تم إعادة تسمية الموقع البعيد بنجاح"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:86
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:87
 msgid "Reload request failed, please check your network connection"
 msgstr ""
 
@@ -3416,7 +3528,7 @@ msgstr ""
 msgid "Restart"
 msgstr "إعادة تشغيل"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:150
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:151
 #: src/views/environments/list/Environment.vue:141
 #: src/views/environments/list/Environment.vue:149
 #, fuzzy
@@ -3443,7 +3555,7 @@ msgstr "خطأ في إعادة تسمية الموقع البعيد"
 msgid "Restart Remote Nginx Success"
 msgstr "تم إعادة تسمية الموقع البعيد بنجاح"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:106
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:107
 msgid "Restart request failed, please check your network connection"
 msgstr ""
 
@@ -3605,10 +3717,6 @@ msgstr "امسح رمز الاستجابة السريعة بهاتفك المح
 msgid "SDK"
 msgstr "حزمة تطوير البرمجيات SDK"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:216
-msgid "seconds"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgstr "تم نسخ السر"
@@ -3649,11 +3757,11 @@ msgstr "معلومات الخادم"
 msgid "Server Info"
 msgstr "معلومات الخادم"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:277
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:106
 msgid "Server Names Hash Bucket Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:278
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:107
 msgid "Server names hash table size"
 msgstr ""
 
@@ -3707,6 +3815,10 @@ msgid ""
 "com/guide/config-nginx.html for more information"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
+msgid "Shared Memory Zone"
+msgstr ""
+
 #: src/components/SensitiveString/SensitiveString.vue:40
 msgid "Show"
 msgstr "عرض"
@@ -3767,6 +3879,14 @@ msgstr "مجلد"
 msgid "Skip Installation"
 msgstr "تثبيت"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325
+msgid "Sleep time between cache loader iterations"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263
+msgid "Sleep time between cache manager iterations"
+msgstr ""
+
 #: src/views/certificate/components/CertificateEditor.vue:213
 msgid "SSL Certificate Content"
 msgstr "محتوى شهادة SSL"
@@ -3953,7 +4073,7 @@ msgstr "خطأ في تزامن التكوين"
 msgid "Sync Config Success"
 msgstr "تمت مزامنة التكوين بنجاح"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:124
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:125
 #: src/views/environments/group/EnvGroup.vue:18
 msgid "Sync Nodes"
 msgstr "مزامنة العقد"
@@ -4411,6 +4531,10 @@ msgstr "استخدم كلمة المرور لمرة واحدة"
 msgid "Use recovery code"
 msgstr "استخدم رمز الاسترداد"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158
+msgid "Use Temporary Path"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:333
 msgid "User"
 msgstr "مستخدم"
@@ -4560,14 +4684,18 @@ msgid ""
 "codes."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:194
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160
+msgid "Whether to use a temporary path when writing temporary files"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:48
 #, fuzzy
 msgid "Worker Connections"
 msgstr "الإصدار الحالي"
 
 #: src/composables/usePerformanceMetrics.ts:55
 #: src/views/dashboard/components/ConnectionMetricsCard.vue:48
-#: src/views/dashboard/components/PerformanceOptimization.vue:172
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:25
 #: src/views/dashboard/components/ProcessDistributionCard.vue:12
 msgid "Worker Processes"
 msgstr ""
@@ -4589,8 +4717,8 @@ msgstr "كتابة مفتاح الشهادة الخاص إلى القرص"
 msgid "Writing certificate to disk"
 msgstr "كتابة الشهادة إلى القرص"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
 #: src/views/preference/AuthSettings.vue:163
 #: src/views/preference/CertSettings.vue:72
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96

+ 186 - 58
app/src/language/de_DE/app.po

@@ -120,7 +120,7 @@ msgstr ""
 "Anschließend diese Seite aktualisieren und erneut auf Passkey hinzufügen "
 "klicken."
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:117
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:118
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:419
 msgid "All"
 msgstr "Alle"
@@ -225,7 +225,7 @@ msgstr "Bist du sicher, dass du diese Richtlinie löschen möchtest?"
 msgid "Are you sure you want to recover this item?"
 msgstr "Bist du sicher, dass du diese Richtlinie löschen möchtest?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
 #, fuzzy
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr "Bist du sicher, dass du diese Richtlinie löschen möchtest?"
@@ -245,7 +245,7 @@ msgstr "Bist du sicher, dass du diese Richtlinie löschen möchtest?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Bist du sicher, dass du diese Richtlinie löschen möchtest?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
 #, fuzzy
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr "Bist du sicher, dass du diese Richtlinie löschen möchtest?"
@@ -284,8 +284,8 @@ msgstr "Authentifizierungseinstellungen"
 msgid "Author"
 msgstr "Autor"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:178
-#: src/views/dashboard/components/PerformanceOptimization.vue:189
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:31
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:43
 msgid "Auto"
 msgstr ""
 
@@ -381,6 +381,11 @@ msgstr "Basic-Modus"
 msgid "Basic Mode"
 msgstr "Basic-Modus"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119
+#, fuzzy
+msgid "Basic Settings"
+msgstr "2FA-Einstellungen"
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:83
 #, fuzzy
 msgid "Batch Actions"
@@ -413,16 +418,45 @@ msgstr "Build mit"
 msgid "CA Dir"
 msgstr "CA-Verzeichnis"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:124
+msgid "Cache"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178
+msgid "Cache items not accessed within this time will be removed"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350
+msgid "Cache loader processing time threshold"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:139
 #: src/views/dashboard/components/PerformanceTablesCard.vue:94
 msgid "Cache manager processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288
+msgid "Cache manager processing time threshold"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246
+msgid "Cache Manager Settings"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124
+#, fuzzy
+msgid "Cache Path"
+msgstr "Zertifikat ist gültig"
+
 #: src/composables/usePerformanceMetrics.ts:57
 #: src/views/dashboard/components/ProcessDistributionCard.vue:14
 msgid "Cache Processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137
+msgid "Cache subdirectory levels structure, e.g. 1:2"
+msgstr ""
+
 #: src/views/preference/CertSettings.vue:19
 msgid "CADir"
 msgstr "CA-Verzeichnis"
@@ -647,23 +681,23 @@ msgstr ""
 msgid "Click to copy"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:307
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:120
 msgid "Client Body Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:289
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:113
 msgid "Client Header Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:259
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99
 msgid "Client Max Body Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:308
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:121
 msgid "Client request body buffer size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:290
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:114
 msgid "Client request header buffer size"
 msgstr ""
 
@@ -700,7 +734,7 @@ msgstr ""
 msgid "Compare with Current"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:248
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr ""
 
@@ -752,7 +786,7 @@ msgstr ""
 msgid "Connection lost, please refresh the page."
 msgstr "Ver"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:207
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61
 msgid "Connection timeout period"
 msgstr ""
 
@@ -914,6 +948,10 @@ msgstr "Tage"
 msgid "Decryption failed"
 msgstr "Beschreibung"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150
+msgid "Define shared memory zone name and size, e.g. proxy_cache:10m"
+msgstr ""
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:21
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/certificate/components/RemoveCert.vue:87
@@ -1036,6 +1074,15 @@ msgstr ""
 msgid "Directives"
 msgstr "Anweisung"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135
+#, fuzzy
+msgid "Directory Levels"
+msgstr "Anweisung"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127
+msgid "Directory path to store cache files"
+msgstr ""
+
 #: src/views/site/site_edit/components/SiteStatusSegmented.vue:113
 #, fuzzy
 msgid "disable"
@@ -1291,7 +1338,7 @@ msgstr "Aktivieren erfolgreich"
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "Aktiviere automatische Verlängerung fehlgeschlagen für %{name}"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:222
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:68
 msgid "Enable compression for content transfer"
 msgstr ""
 
@@ -1304,6 +1351,10 @@ msgstr "Aktivieren fehlgeschlagen"
 msgid "Enable HTTPS"
 msgstr "Aktiviere TLS"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114
+msgid "Enable Proxy Cache"
+msgstr ""
+
 #: src/components/Notification/notifications.ts:25 src/language/constants.ts:54
 #, fuzzy
 msgid "Enable Remote Site Error"
@@ -1667,7 +1718,7 @@ msgstr "Fehler beim Abrufen von Zertifikatsinformationen"
 msgid "Failed to get certificate information"
 msgstr "Fehler beim Abrufen von Zertifikatsinformationen"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:56
+#: src/views/dashboard/components/ParamsOptimization.vue:61
 #, fuzzy
 msgid "Failed to get Nginx performance settings"
 msgstr "Fehler beim Abrufen von Zertifikatsinformationen"
@@ -1736,7 +1787,7 @@ msgstr ""
 msgid "Failed to revoke certificate"
 msgstr "Zertifikat ist gültig"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:126
+#: src/views/dashboard/components/ParamsOptimization.vue:90
 #, fuzzy
 msgid "Failed to save Nginx performance settings"
 msgstr "Fehler beim Abrufen von Zertifikatsinformationen"
@@ -1872,15 +1923,15 @@ msgstr "Hole das Zertifikat, bitte warten..."
 msgid "Github Proxy"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:221
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67
 msgid "GZIP Compression"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:247
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:87
 msgid "GZIP Compression Level"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:233
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:80
 msgid "GZIP Min Length"
 msgstr ""
 
@@ -1982,6 +2033,10 @@ msgstr "Import"
 msgid "Import Certificate"
 msgstr "Zertifikatsstatus"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176
+msgid "Inactive Time"
+msgstr ""
+
 #: src/views/dashboard/components/ProcessDistributionCard.vue:54
 msgid ""
 "Includes master process, worker processes, cache processes, and other Nginx "
@@ -2142,17 +2197,13 @@ msgstr "Aussteller: %{issuer}"
 msgid "Jwt Secret"
 msgstr "Jwt-Secret"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:242
-msgid "KB"
-msgstr ""
-
 #: src/views/preference/components/RecoveryCodes.vue:74
 msgid ""
 "Keep your recovery codes as safe as your password. We recommend saving them "
 "with a password manager."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:206
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:60
 msgid "Keepalive Timeout"
 msgstr ""
 
@@ -2248,6 +2299,24 @@ msgstr "Aus Einstellungen laden"
 msgid "Load successfully"
 msgstr "Speichern erfolgreich"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313
+#, fuzzy
+msgid "Loader Files"
+msgstr "Erstellt"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308
+#, fuzzy
+msgid "Loader Settings"
+msgstr "Aus Einstellungen laden"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323
+msgid "Loader Sleep"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348
+msgid "Loader Threshold"
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:178
 msgid "Loading data..."
 msgstr ""
@@ -2356,7 +2425,22 @@ msgstr "Verwalte Benutzer"
 msgid "Managed Certificate"
 msgstr "Zertifikat ist gültig"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:179
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251
+#, fuzzy
+msgid "Manager Files"
+msgstr "Verwalte Seiten"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261
+#, fuzzy
+msgid "Manager Sleep"
+msgstr "Verwalte Seiten"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286
+#, fuzzy
+msgid "Manager Threshold"
+msgstr "Verwalte Seiten"
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:32
 msgid "Manual"
 msgstr ""
 
@@ -2391,11 +2475,15 @@ msgstr "Aktuelle Version"
 msgid "Max Requests Per Second"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:260
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199
+msgid "Maximum Cache Size"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:100
 msgid "Maximum client request body size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:195
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:49
 #, fuzzy
 msgid "Maximum number of concurrent connections"
 msgstr "Aktuelle Version"
@@ -2405,6 +2493,10 @@ msgstr "Aktuelle Version"
 msgid "Maximum number of connections per worker process"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201
+msgid "Maximum total size of the cache"
+msgstr ""
+
 #: src/views/dashboard/components/PerformanceTablesCard.vue:195
 msgid "Maximum worker process number:"
 msgstr ""
@@ -2422,10 +2514,18 @@ msgstr "Arbeitsspeicher und Speicher"
 msgid "Memory Usage (RSS)"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:234
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81
 msgid "Minimum file size for compression"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224
+msgid "Minimum Free Space"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226
+msgid "Minimum free space in the cache directory"
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:29
 msgid "Minutes"
 msgstr "Minuten"
@@ -2696,8 +2796,8 @@ msgid ""
 msgstr "Name der Konfiguration"
 
 #: src/components/ChatGPT/ChatGPT.vue:374
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
 #: src/components/Notification/Notification.vue:133
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
@@ -2804,10 +2904,18 @@ msgstr "Zertifikat ist gültig"
 msgid "Notifier not found"
 msgstr "File Not Found"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:173
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26
 msgid "Number of concurrent worker processes, auto sets to CPU core count"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315
+msgid "Number of files processed by cache loader at once"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253
+msgid "Number of files processed by cache manager at once"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:129
 #: src/composables/usePerformanceMetrics.ts:169
 #: src/views/dashboard/components/PerformanceTablesCard.vue:120
@@ -2836,12 +2944,13 @@ msgstr ""
 "OCSP Must Staple kann bei einigen Benutzern beim ersten Zugriff mit Firefox "
 "Fehler verursachen."
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:227
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165
 #, fuzzy
 msgid "Off"
 msgstr "Offline"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:56
@@ -2872,7 +2981,8 @@ msgstr "OK"
 msgid "OK"
 msgstr "OK"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:226
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164
 msgid "On"
 msgstr ""
 
@@ -2881,7 +2991,7 @@ msgid "Once the verification is complete, the records will be removed."
 msgstr ""
 "Sobaöd die Überprüfung abgeschlossen ist, werden die Einträge entfernt."
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:89
 #: src/views/dashboard/Environments.vue:100
@@ -2897,14 +3007,6 @@ msgstr ""
 msgid "OpenAI"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:164
-msgid "Optimize Nginx Performance"
-msgstr ""
-
-#: src/views/dashboard/components/PerformanceOptimization.vue:158
-msgid "Optimize Performance"
-msgstr ""
-
 #: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:231
 msgid "Or"
 msgstr "Oder"
@@ -2962,6 +3064,11 @@ msgstr "Verwalte Seiten"
 msgid "Params"
 msgstr "Parameter"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:109
+#: src/views/dashboard/components/ParamsOptimization.vue:115
+msgid "Params Optimization"
+msgstr ""
+
 #: src/views/preference/components/Passkey.vue:59
 msgid "Passkey"
 msgstr "Passkey"
@@ -3016,11 +3123,16 @@ msgstr "Ausführen"
 msgid "Perform core upgrade error"
 msgstr "Führe Core-Upgrade-Fehler aus"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:121
+#, fuzzy
+msgid "Performance"
+msgstr "Ausführen"
+
 #: src/views/dashboard/NginxDashBoard.vue:185
 msgid "Performance Metrics"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:122
+#: src/views/dashboard/components/ParamsOptimization.vue:86
 #, fuzzy
 msgid "Performance settings saved successfully"
 msgstr "Erfolgreich deaktiviert"
@@ -3331,7 +3443,7 @@ msgstr "Änderungsprotokoll"
 msgid "Reload"
 msgstr "Neu laden"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:138
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:139
 #: src/views/environments/group/columns.ts:24
 #: src/views/environments/group/EnvGroup.vue:37
 #: src/views/environments/list/Environment.vue:120
@@ -3360,7 +3472,7 @@ msgstr "Zertifikat ist gültig"
 msgid "Reload Remote Nginx Success"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:86
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:87
 msgid "Reload request failed, please check your network connection"
 msgstr ""
 
@@ -3534,7 +3646,7 @@ msgstr ""
 msgid "Restart"
 msgstr "Neustart"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:150
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:151
 #: src/views/environments/list/Environment.vue:141
 #: src/views/environments/list/Environment.vue:149
 #, fuzzy
@@ -3561,7 +3673,7 @@ msgstr "Zertifikat ist gültig"
 msgid "Restart Remote Nginx Success"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:106
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:107
 msgid "Restart request failed, please check your network connection"
 msgstr ""
 
@@ -3728,10 +3840,6 @@ msgstr ""
 msgid "SDK"
 msgstr "SDK"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:216
-msgid "seconds"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgstr "Schlüssel wurde kopiert"
@@ -3772,11 +3880,11 @@ msgstr "Serverinformationen"
 msgid "Server Info"
 msgstr "Serverinformationen"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:277
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:106
 msgid "Server Names Hash Bucket Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:278
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:107
 msgid "Server names hash table size"
 msgstr ""
 
@@ -3830,6 +3938,10 @@ msgid ""
 "com/guide/config-nginx.html for more information"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
+msgid "Shared Memory Zone"
+msgstr ""
+
 #: src/components/SensitiveString/SensitiveString.vue:40
 msgid "Show"
 msgstr "Zeige"
@@ -3889,6 +4001,14 @@ msgstr ""
 msgid "Skip Installation"
 msgstr "Installieren"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325
+msgid "Sleep time between cache loader iterations"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263
+msgid "Sleep time between cache manager iterations"
+msgstr ""
+
 #: src/views/certificate/components/CertificateEditor.vue:213
 #, fuzzy
 msgid "SSL Certificate Content"
@@ -4085,7 +4205,7 @@ msgstr "Zertifikat ist gültig"
 msgid "Sync Config Success"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:124
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:125
 #: src/views/environments/group/EnvGroup.vue:18
 msgid "Sync Nodes"
 msgstr "Synchrone Knoten"
@@ -4550,6 +4670,10 @@ msgstr "Benutze OTP"
 msgid "Use recovery code"
 msgstr "Benuzte Wiederherstellungscode"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158
+msgid "Use Temporary Path"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:333
 #, fuzzy
 msgid "User"
@@ -4705,14 +4829,18 @@ msgid ""
 "codes."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:194
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160
+msgid "Whether to use a temporary path when writing temporary files"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:48
 #, fuzzy
 msgid "Worker Connections"
 msgstr "Aktuelle Version"
 
 #: src/composables/usePerformanceMetrics.ts:55
 #: src/views/dashboard/components/ConnectionMetricsCard.vue:48
-#: src/views/dashboard/components/PerformanceOptimization.vue:172
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:25
 #: src/views/dashboard/components/ProcessDistributionCard.vue:12
 msgid "Worker Processes"
 msgstr ""
@@ -4734,8 +4862,8 @@ msgstr "Scrheibe Zertifikat-Privatschlüssel auf die Festplatte"
 msgid "Writing certificate to disk"
 msgstr "Schreibe Zertifikat auf die Festplatte"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
 #: src/views/preference/AuthSettings.vue:163
 #: src/views/preference/CertSettings.vue:72
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96

+ 183 - 58
app/src/language/en/app.po

@@ -119,7 +119,7 @@ msgstr "Advance Mode"
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:117
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:118
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:419
 msgid "All"
 msgstr ""
@@ -224,7 +224,7 @@ msgstr "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to recover this item?"
 msgstr "Are you sure you want to remove this directive?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
 #, fuzzy
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr "Are you sure you want to remove this directive?"
@@ -243,7 +243,7 @@ msgstr "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Are you sure you want to remove this directive?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
 #, fuzzy
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr "Are you sure you want to remove this directive?"
@@ -281,8 +281,8 @@ msgstr ""
 msgid "Author"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:178
-#: src/views/dashboard/components/PerformanceOptimization.vue:189
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:31
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:43
 msgid "Auto"
 msgstr ""
 
@@ -378,6 +378,10 @@ msgstr "Basic Mode"
 msgid "Basic Mode"
 msgstr "Basic Mode"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119
+msgid "Basic Settings"
+msgstr ""
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:83
 #, fuzzy
 msgid "Batch Actions"
@@ -409,16 +413,45 @@ msgstr "Build with"
 msgid "CA Dir"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOptimization.vue:124
+msgid "Cache"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178
+msgid "Cache items not accessed within this time will be removed"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350
+msgid "Cache loader processing time threshold"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:139
 #: src/views/dashboard/components/PerformanceTablesCard.vue:94
 msgid "Cache manager processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288
+msgid "Cache manager processing time threshold"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246
+msgid "Cache Manager Settings"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124
+#, fuzzy
+msgid "Cache Path"
+msgstr "Certificate is valid"
+
 #: src/composables/usePerformanceMetrics.ts:57
 #: src/views/dashboard/components/ProcessDistributionCard.vue:14
 msgid "Cache Processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137
+msgid "Cache subdirectory levels structure, e.g. 1:2"
+msgstr ""
+
 #: src/views/preference/CertSettings.vue:19
 msgid "CADir"
 msgstr ""
@@ -641,23 +674,23 @@ msgstr ""
 msgid "Click to copy"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:307
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:120
 msgid "Client Body Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:289
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:113
 msgid "Client Header Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:259
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99
 msgid "Client Max Body Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:308
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:121
 msgid "Client request body buffer size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:290
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:114
 msgid "Client request header buffer size"
 msgstr ""
 
@@ -694,7 +727,7 @@ msgstr ""
 msgid "Compare with Current"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:248
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr ""
 
@@ -746,7 +779,7 @@ msgstr ""
 msgid "Connection lost, please refresh the page."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:207
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61
 msgid "Connection timeout period"
 msgstr ""
 
@@ -905,6 +938,10 @@ msgstr ""
 msgid "Decryption failed"
 msgstr "Enable failed"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150
+msgid "Define shared memory zone name and size, e.g. proxy_cache:10m"
+msgstr ""
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:21
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/certificate/components/RemoveCert.vue:87
@@ -1027,6 +1064,15 @@ msgstr ""
 msgid "Directives"
 msgstr "Directives"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135
+#, fuzzy
+msgid "Directory Levels"
+msgstr "Directives"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127
+msgid "Directory path to store cache files"
+msgstr ""
+
 #: src/views/site/site_edit/components/SiteStatusSegmented.vue:113
 #, fuzzy
 msgid "disable"
@@ -1277,7 +1323,7 @@ msgstr "Enabled successfully"
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "Enable auto-renewal failed for %{name}"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:222
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:68
 msgid "Enable compression for content transfer"
 msgstr ""
 
@@ -1290,6 +1336,10 @@ msgstr "Enable failed"
 msgid "Enable HTTPS"
 msgstr "Enable TLS"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114
+msgid "Enable Proxy Cache"
+msgstr ""
+
 #: src/components/Notification/notifications.ts:25 src/language/constants.ts:54
 #, fuzzy
 msgid "Enable Remote Site Error"
@@ -1654,7 +1704,7 @@ msgstr "Certificate is valid"
 msgid "Failed to get certificate information"
 msgstr "Certificate is valid"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:56
+#: src/views/dashboard/components/ParamsOptimization.vue:61
 #, fuzzy
 msgid "Failed to get Nginx performance settings"
 msgstr "Certificate is valid"
@@ -1727,7 +1777,7 @@ msgstr ""
 msgid "Failed to revoke certificate"
 msgstr "Certificate is valid"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:126
+#: src/views/dashboard/components/ParamsOptimization.vue:90
 #, fuzzy
 msgid "Failed to save Nginx performance settings"
 msgstr "Certificate is valid"
@@ -1859,15 +1909,15 @@ msgstr "Getting the certificate, please wait..."
 msgid "Github Proxy"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:221
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67
 msgid "GZIP Compression"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:247
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:87
 msgid "GZIP Compression Level"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:233
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:80
 msgid "GZIP Min Length"
 msgstr ""
 
@@ -1960,6 +2010,10 @@ msgstr ""
 msgid "Import Certificate"
 msgstr "Certificate Status"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176
+msgid "Inactive Time"
+msgstr ""
+
 #: src/views/dashboard/components/ProcessDistributionCard.vue:54
 msgid ""
 "Includes master process, worker processes, cache processes, and other Nginx "
@@ -2124,17 +2178,13 @@ msgstr ""
 msgid "Jwt Secret"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:242
-msgid "KB"
-msgstr ""
-
 #: src/views/preference/components/RecoveryCodes.vue:74
 msgid ""
 "Keep your recovery codes as safe as your password. We recommend saving them "
 "with a password manager."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:206
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:60
 msgid "Keepalive Timeout"
 msgstr ""
 
@@ -2230,6 +2280,23 @@ msgstr ""
 msgid "Load successfully"
 msgstr "Saved successfully"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313
+#, fuzzy
+msgid "Loader Files"
+msgstr "Created at"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308
+msgid "Loader Settings"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323
+msgid "Loader Sleep"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348
+msgid "Loader Threshold"
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:178
 msgid "Loading data..."
 msgstr ""
@@ -2330,7 +2397,22 @@ msgstr "Manage Users"
 msgid "Managed Certificate"
 msgstr "Certificate is valid"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:179
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251
+#, fuzzy
+msgid "Manager Files"
+msgstr "Manage Sites"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261
+#, fuzzy
+msgid "Manager Sleep"
+msgstr "Manage Sites"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286
+#, fuzzy
+msgid "Manager Threshold"
+msgstr "Manage Sites"
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:32
 msgid "Manual"
 msgstr ""
 
@@ -2365,11 +2447,15 @@ msgstr "Content"
 msgid "Max Requests Per Second"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:260
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199
+msgid "Maximum Cache Size"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:100
 msgid "Maximum client request body size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:195
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:49
 #, fuzzy
 msgid "Maximum number of concurrent connections"
 msgstr "Content"
@@ -2379,6 +2465,10 @@ msgstr "Content"
 msgid "Maximum number of connections per worker process"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201
+msgid "Maximum total size of the cache"
+msgstr ""
+
 #: src/views/dashboard/components/PerformanceTablesCard.vue:195
 msgid "Maximum worker process number:"
 msgstr ""
@@ -2396,10 +2486,18 @@ msgstr "Memory and Storage"
 msgid "Memory Usage (RSS)"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:234
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81
 msgid "Minimum file size for compression"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224
+msgid "Minimum Free Space"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226
+msgid "Minimum free space in the cache directory"
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:29
 msgid "Minutes"
 msgstr ""
@@ -2667,8 +2765,8 @@ msgid ""
 msgstr "Configuration Name"
 
 #: src/components/ChatGPT/ChatGPT.vue:374
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
 #: src/components/Notification/Notification.vue:133
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
@@ -2773,10 +2871,18 @@ msgstr "Certificate is valid"
 msgid "Notifier not found"
 msgstr "File Not Found"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:173
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26
 msgid "Number of concurrent worker processes, auto sets to CPU core count"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315
+msgid "Number of files processed by cache loader at once"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253
+msgid "Number of files processed by cache manager at once"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:129
 #: src/composables/usePerformanceMetrics.ts:169
 #: src/views/dashboard/components/PerformanceTablesCard.vue:120
@@ -2804,11 +2910,12 @@ msgid ""
 "Firefox."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:227
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165
 msgid "Off"
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:56
@@ -2839,7 +2946,8 @@ msgstr ""
 msgid "OK"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:226
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164
 msgid "On"
 msgstr ""
 
@@ -2847,7 +2955,7 @@ msgstr ""
 msgid "Once the verification is complete, the records will be removed."
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:89
 #: src/views/dashboard/Environments.vue:100
@@ -2863,14 +2971,6 @@ msgstr ""
 msgid "OpenAI"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:164
-msgid "Optimize Nginx Performance"
-msgstr ""
-
-#: src/views/dashboard/components/PerformanceOptimization.vue:158
-msgid "Optimize Performance"
-msgstr ""
-
 #: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:231
 msgid "Or"
 msgstr ""
@@ -2927,6 +3027,11 @@ msgstr "Manage Sites"
 msgid "Params"
 msgstr "Params"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:109
+#: src/views/dashboard/components/ParamsOptimization.vue:115
+msgid "Params Optimization"
+msgstr ""
+
 #: src/views/preference/components/Passkey.vue:59
 msgid "Passkey"
 msgstr ""
@@ -2979,11 +3084,15 @@ msgstr ""
 msgid "Perform core upgrade error"
 msgstr "Certificate has expired"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:121
+msgid "Performance"
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:185
 msgid "Performance Metrics"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:122
+#: src/views/dashboard/components/ParamsOptimization.vue:86
 #, fuzzy
 msgid "Performance settings saved successfully"
 msgstr "Disabled successfully"
@@ -3278,7 +3387,7 @@ msgstr ""
 msgid "Reload"
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:138
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:139
 #: src/views/environments/group/columns.ts:24
 #: src/views/environments/group/EnvGroup.vue:37
 #: src/views/environments/list/Environment.vue:120
@@ -3306,7 +3415,7 @@ msgstr "Certificate is valid"
 msgid "Reload Remote Nginx Success"
 msgstr "Certificate is valid"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:86
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:87
 msgid "Reload request failed, please check your network connection"
 msgstr ""
 
@@ -3480,7 +3589,7 @@ msgstr ""
 msgid "Restart"
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:150
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:151
 #: src/views/environments/list/Environment.vue:141
 #: src/views/environments/list/Environment.vue:149
 msgid "Restart Nginx"
@@ -3506,7 +3615,7 @@ msgstr "Certificate is valid"
 msgid "Restart Remote Nginx Success"
 msgstr "Certificate is valid"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:106
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:107
 msgid "Restart request failed, please check your network connection"
 msgstr ""
 
@@ -3672,10 +3781,6 @@ msgstr ""
 msgid "SDK"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:216
-msgid "seconds"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgstr ""
@@ -3717,11 +3822,11 @@ msgstr "Server Info"
 msgid "Server Info"
 msgstr "Server Info"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:277
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:106
 msgid "Server Names Hash Bucket Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:278
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:107
 msgid "Server names hash table size"
 msgstr ""
 
@@ -3773,6 +3878,10 @@ msgid ""
 "com/guide/config-nginx.html for more information"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
+msgid "Shared Memory Zone"
+msgstr ""
+
 #: src/components/SensitiveString/SensitiveString.vue:40
 msgid "Show"
 msgstr ""
@@ -3834,6 +3943,14 @@ msgstr "Directive"
 msgid "Skip Installation"
 msgstr "Install"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325
+msgid "Sleep time between cache loader iterations"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263
+msgid "Sleep time between cache manager iterations"
+msgstr ""
+
 #: src/views/certificate/components/CertificateEditor.vue:213
 #, fuzzy
 msgid "SSL Certificate Content"
@@ -4032,7 +4149,7 @@ msgstr "Certificate is valid"
 msgid "Sync Config Success"
 msgstr "Certificate is valid"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:124
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:125
 #: src/views/environments/group/EnvGroup.vue:18
 msgid "Sync Nodes"
 msgstr ""
@@ -4473,6 +4590,10 @@ msgstr ""
 msgid "Use recovery code"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158
+msgid "Use Temporary Path"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:333
 #, fuzzy
 msgid "User"
@@ -4616,14 +4737,18 @@ msgid ""
 "codes."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:194
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160
+msgid "Whether to use a temporary path when writing temporary files"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:48
 #, fuzzy
 msgid "Worker Connections"
 msgstr "Content"
 
 #: src/composables/usePerformanceMetrics.ts:55
 #: src/views/dashboard/components/ConnectionMetricsCard.vue:48
-#: src/views/dashboard/components/PerformanceOptimization.vue:172
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:25
 #: src/views/dashboard/components/ProcessDistributionCard.vue:12
 msgid "Worker Processes"
 msgstr ""
@@ -4646,8 +4771,8 @@ msgstr ""
 msgid "Writing certificate to disk"
 msgstr "Certificate is valid"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
 #: src/views/preference/AuthSettings.vue:163
 #: src/views/preference/CertSettings.vue:72
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96

+ 186 - 58
app/src/language/es/app.po

@@ -122,7 +122,7 @@ msgstr ""
 "Luego, actualice esta página y haga clic nuevamente en Agregar llave de "
 "acceso."
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:117
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:118
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:419
 msgid "All"
 msgstr "Todo"
@@ -219,7 +219,7 @@ msgstr "¿Está seguro de que quiere borrar?"
 msgid "Are you sure you want to recover this item?"
 msgstr "¿Está seguro de que quiere recuperar este elemento?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
 #, fuzzy
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr "¿Está seguro de que quiere borrar?"
@@ -236,7 +236,7 @@ msgstr "¿Está seguro de que desea eliminar este elemento?"
 msgid "Are you sure you want to remove this location?"
 msgstr "¿Está seguro de que quiere borrar esta ubicación?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
 #, fuzzy
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr "¿Está seguro de que desea borrar todas las notificaciones?"
@@ -275,8 +275,8 @@ msgstr "Configuración de autenticación"
 msgid "Author"
 msgstr "Autor"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:178
-#: src/views/dashboard/components/PerformanceOptimization.vue:189
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:31
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:43
 msgid "Auto"
 msgstr "Automático"
 
@@ -370,6 +370,11 @@ msgstr "Básico"
 msgid "Basic Mode"
 msgstr "Modo Básico"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119
+#, fuzzy
+msgid "Basic Settings"
+msgstr "Configuración de 2FA"
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:83
 #, fuzzy
 msgid "Batch Actions"
@@ -402,16 +407,45 @@ msgstr "Desarrollado con"
 msgid "CA Dir"
 msgstr "Dir CA"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:124
+msgid "Cache"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178
+msgid "Cache items not accessed within this time will be removed"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350
+msgid "Cache loader processing time threshold"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:139
 #: src/views/dashboard/components/PerformanceTablesCard.vue:94
 msgid "Cache manager processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288
+msgid "Cache manager processing time threshold"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246
+msgid "Cache Manager Settings"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124
+#, fuzzy
+msgid "Cache Path"
+msgstr "Ruta cambiada"
+
 #: src/composables/usePerformanceMetrics.ts:57
 #: src/views/dashboard/components/ProcessDistributionCard.vue:14
 msgid "Cache Processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137
+msgid "Cache subdirectory levels structure, e.g. 1:2"
+msgstr ""
+
 #: src/views/preference/CertSettings.vue:19
 msgid "CADir"
 msgstr "Directorio CA"
@@ -628,23 +662,23 @@ msgstr ""
 msgid "Click to copy"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:307
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:120
 msgid "Client Body Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:289
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:113
 msgid "Client Header Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:259
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99
 msgid "Client Max Body Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:308
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:121
 msgid "Client request body buffer size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:290
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:114
 msgid "Client request header buffer size"
 msgstr ""
 
@@ -680,7 +714,7 @@ msgstr ""
 msgid "Compare with Current"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:248
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr ""
 
@@ -731,7 +765,7 @@ msgstr ""
 msgid "Connection lost, please refresh the page."
 msgstr "Conexión perdida, por favor actualice la página."
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:207
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61
 msgid "Connection timeout period"
 msgstr ""
 
@@ -890,6 +924,10 @@ msgstr "Días"
 msgid "Decryption failed"
 msgstr "Descripción"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150
+msgid "Define shared memory zone name and size, e.g. proxy_cache:10m"
+msgstr ""
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:21
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/certificate/components/RemoveCert.vue:87
@@ -1009,6 +1047,15 @@ msgstr ""
 msgid "Directives"
 msgstr "Directivas"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135
+#, fuzzy
+msgid "Directory Levels"
+msgstr "Directivas"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127
+msgid "Directory path to store cache files"
+msgstr ""
+
 #: src/views/site/site_edit/components/SiteStatusSegmented.vue:113
 #, fuzzy
 msgid "disable"
@@ -1249,7 +1296,7 @@ msgstr "Habilitar 2FA exitoso"
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "No se pudo activar la renovación automática por %{name}"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:222
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:68
 msgid "Enable compression for content transfer"
 msgstr ""
 
@@ -1262,6 +1309,10 @@ msgstr "Falló la habilitación"
 msgid "Enable HTTPS"
 msgstr "Habilitar TLS"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114
+msgid "Enable Proxy Cache"
+msgstr ""
+
 #: src/components/Notification/notifications.ts:25 src/language/constants.ts:54
 #, fuzzy
 msgid "Enable Remote Site Error"
@@ -1622,7 +1673,7 @@ msgstr "No se pudo obtener la información del certificado"
 msgid "Failed to get certificate information"
 msgstr "No se pudo obtener la información del certificado"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:56
+#: src/views/dashboard/components/ParamsOptimization.vue:61
 #, fuzzy
 msgid "Failed to get Nginx performance settings"
 msgstr "No se pudo obtener la información del certificado"
@@ -1691,7 +1742,7 @@ msgstr ""
 msgid "Failed to revoke certificate"
 msgstr "Falla al obtener el certificado"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:126
+#: src/views/dashboard/components/ParamsOptimization.vue:90
 #, fuzzy
 msgid "Failed to save Nginx performance settings"
 msgstr "No se pudo obtener la información del certificado"
@@ -1823,15 +1874,15 @@ msgstr "Obteniendo el certificado, por favor espere..."
 msgid "Github Proxy"
 msgstr "Proxy Github"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:221
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67
 msgid "GZIP Compression"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:247
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:87
 msgid "GZIP Compression Level"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:233
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:80
 msgid "GZIP Min Length"
 msgstr ""
 
@@ -1934,6 +1985,10 @@ msgstr "Importar"
 msgid "Import Certificate"
 msgstr "Importar Certificado"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176
+msgid "Inactive Time"
+msgstr ""
+
 #: src/views/dashboard/components/ProcessDistributionCard.vue:54
 msgid ""
 "Includes master process, worker processes, cache processes, and other Nginx "
@@ -2088,17 +2143,13 @@ msgstr "Emisor: %{issuer}"
 msgid "Jwt Secret"
 msgstr "Secreto Jwt"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:242
-msgid "KB"
-msgstr ""
-
 #: src/views/preference/components/RecoveryCodes.vue:74
 msgid ""
 "Keep your recovery codes as safe as your password. We recommend saving them "
 "with a password manager."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:206
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:60
 msgid "Keepalive Timeout"
 msgstr ""
 
@@ -2189,6 +2240,24 @@ msgstr "Cargar desde configuraciones"
 msgid "Load successfully"
 msgstr "Cargado con éxito"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313
+#, fuzzy
+msgid "Loader Files"
+msgstr "Crear Archivo"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308
+#, fuzzy
+msgid "Loader Settings"
+msgstr "Cargar desde configuraciones"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323
+msgid "Loader Sleep"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348
+msgid "Loader Threshold"
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:178
 msgid "Loading data..."
 msgstr ""
@@ -2292,7 +2361,22 @@ msgstr "Administrar usuarios"
 msgid "Managed Certificate"
 msgstr "Certificado Administrado"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:179
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251
+#, fuzzy
+msgid "Manager Files"
+msgstr "Administrar sitios"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261
+#, fuzzy
+msgid "Manager Sleep"
+msgstr "Administrar sitios"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286
+#, fuzzy
+msgid "Manager Threshold"
+msgstr "Administrar Transmisiones"
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:32
 msgid "Manual"
 msgstr ""
 
@@ -2327,11 +2411,15 @@ msgstr "Versión actual"
 msgid "Max Requests Per Second"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:260
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199
+msgid "Maximum Cache Size"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:100
 msgid "Maximum client request body size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:195
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:49
 #, fuzzy
 msgid "Maximum number of concurrent connections"
 msgstr "Versión actual"
@@ -2341,6 +2429,10 @@ msgstr "Versión actual"
 msgid "Maximum number of connections per worker process"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201
+msgid "Maximum total size of the cache"
+msgstr ""
+
 #: src/views/dashboard/components/PerformanceTablesCard.vue:195
 msgid "Maximum worker process number:"
 msgstr ""
@@ -2358,10 +2450,18 @@ msgstr "Memoria y almacenamiento"
 msgid "Memory Usage (RSS)"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:234
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81
 msgid "Minimum file size for compression"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224
+msgid "Minimum Free Space"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226
+msgid "Minimum free space in the cache directory"
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:29
 msgid "Minutes"
 msgstr "Minutos"
@@ -2624,8 +2724,8 @@ msgid ""
 msgstr "Error de análisis de configuración de Nginx"
 
 #: src/components/ChatGPT/ChatGPT.vue:374
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
 #: src/components/Notification/Notification.vue:133
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
@@ -2730,10 +2830,18 @@ msgstr "Notificaciones"
 msgid "Notifier not found"
 msgstr "Archivo no Encontrado"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:173
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26
 msgid "Number of concurrent worker processes, auto sets to CPU core count"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315
+msgid "Number of files processed by cache loader at once"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253
+msgid "Number of files processed by cache manager at once"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:129
 #: src/composables/usePerformanceMetrics.ts:169
 #: src/views/dashboard/components/PerformanceTablesCard.vue:120
@@ -2761,12 +2869,13 @@ msgstr ""
 "OCSP Must Staple puede causar errores para algunos usuarios en el primer "
 "acceso usando Firefox."
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:227
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165
 #, fuzzy
 msgid "Off"
 msgstr "Desconectado"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:56
@@ -2797,7 +2906,8 @@ msgstr "Ok"
 msgid "OK"
 msgstr "OK"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:226
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164
 msgid "On"
 msgstr ""
 
@@ -2805,7 +2915,7 @@ msgstr ""
 msgid "Once the verification is complete, the records will be removed."
 msgstr "Una vez que se complete la verificación, los registros se eliminarán."
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:89
 #: src/views/dashboard/Environments.vue:100
@@ -2821,14 +2931,6 @@ msgstr ""
 msgid "OpenAI"
 msgstr "OpenAI"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:164
-msgid "Optimize Nginx Performance"
-msgstr ""
-
-#: src/views/dashboard/components/PerformanceOptimization.vue:158
-msgid "Optimize Performance"
-msgstr ""
-
 #: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:231
 msgid "Or"
 msgstr "O"
@@ -2885,6 +2987,11 @@ msgstr "Administrar sitios"
 msgid "Params"
 msgstr "Parámetros"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:109
+#: src/views/dashboard/components/ParamsOptimization.vue:115
+msgid "Params Optimization"
+msgstr ""
+
 #: src/views/preference/components/Passkey.vue:59
 msgid "Passkey"
 msgstr "Llave de acceso"
@@ -2940,11 +3047,16 @@ msgstr "Realizar"
 msgid "Perform core upgrade error"
 msgstr "Error al ejecutar la actualización del kernel"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:121
+#, fuzzy
+msgid "Performance"
+msgstr "Realizar"
+
 #: src/views/dashboard/NginxDashBoard.vue:185
 msgid "Performance Metrics"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:122
+#: src/views/dashboard/components/ParamsOptimization.vue:86
 #, fuzzy
 msgid "Performance settings saved successfully"
 msgstr "Desactivado con éxito"
@@ -3252,7 +3364,7 @@ msgstr "Nota de versión"
 msgid "Reload"
 msgstr "Recargar"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:138
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:139
 #: src/views/environments/group/columns.ts:24
 #: src/views/environments/group/EnvGroup.vue:37
 #: src/views/environments/list/Environment.vue:120
@@ -3281,7 +3393,7 @@ msgstr "Error al renombrar la configuración remota"
 msgid "Reload Remote Nginx Success"
 msgstr "Renombrar Configuración Remota Exitosa"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:86
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:87
 msgid "Reload request failed, please check your network connection"
 msgstr ""
 
@@ -3444,7 +3556,7 @@ msgstr ""
 msgid "Restart"
 msgstr "Reiniciar"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:150
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:151
 #: src/views/environments/list/Environment.vue:141
 #: src/views/environments/list/Environment.vue:149
 #, fuzzy
@@ -3471,7 +3583,7 @@ msgstr "Error al renombrar la configuración remota"
 msgid "Restart Remote Nginx Success"
 msgstr "Renombrar Configuración Remota Exitosa"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:106
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:107
 msgid "Restart request failed, please check your network connection"
 msgstr ""
 
@@ -3637,10 +3749,6 @@ msgstr ""
 msgid "SDK"
 msgstr "SDK"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:216
-msgid "seconds"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgstr "El secreto ha sido copiado"
@@ -3681,11 +3789,11 @@ msgstr "Información del servidor"
 msgid "Server Info"
 msgstr "Información del servidor"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:277
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:106
 msgid "Server Names Hash Bucket Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:278
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:107
 msgid "Server names hash table size"
 msgstr ""
 
@@ -3739,6 +3847,10 @@ msgid ""
 "com/guide/config-nginx.html for more information"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
+msgid "Shared Memory Zone"
+msgstr ""
+
 #: src/components/SensitiveString/SensitiveString.vue:40
 msgid "Show"
 msgstr "Mostrar"
@@ -3797,6 +3909,14 @@ msgstr ""
 msgid "Skip Installation"
 msgstr "Instalar"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325
+msgid "Sleep time between cache loader iterations"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263
+msgid "Sleep time between cache manager iterations"
+msgstr ""
+
 #: src/views/certificate/components/CertificateEditor.vue:213
 msgid "SSL Certificate Content"
 msgstr "Contenido de certificado SSL"
@@ -3982,7 +4102,7 @@ msgstr "Error de Configuración de Sincronización"
 msgid "Sync Config Success"
 msgstr "Configuración de sincronización exitosa"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:124
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:125
 #: src/views/environments/group/EnvGroup.vue:18
 #, fuzzy
 msgid "Sync Nodes"
@@ -4453,6 +4573,10 @@ msgstr "Usar OTP"
 msgid "Use recovery code"
 msgstr "Usar código de recuperación"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158
+msgid "Use Temporary Path"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:333
 msgid "User"
 msgstr "Usuario"
@@ -4606,14 +4730,18 @@ msgid ""
 "codes."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:194
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160
+msgid "Whether to use a temporary path when writing temporary files"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:48
 #, fuzzy
 msgid "Worker Connections"
 msgstr "Versión actual"
 
 #: src/composables/usePerformanceMetrics.ts:55
 #: src/views/dashboard/components/ConnectionMetricsCard.vue:48
-#: src/views/dashboard/components/PerformanceOptimization.vue:172
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:25
 #: src/views/dashboard/components/ProcessDistributionCard.vue:12
 msgid "Worker Processes"
 msgstr ""
@@ -4635,8 +4763,8 @@ msgstr "Escribir la clave privada del certificado a disco"
 msgid "Writing certificate to disk"
 msgstr "Escribir certificado a disco"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
 #: src/views/preference/AuthSettings.vue:163
 #: src/views/preference/CertSettings.vue:72
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96

+ 185 - 58
app/src/language/fr_FR/app.po

@@ -124,7 +124,7 @@ msgid "Afterwards, refresh this page and click add passkey again."
 msgstr ""
 "Après, rechargez la page et cliquez de nouveau sur ajouter une clé d'accès."
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:117
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:118
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:419
 msgid "All"
 msgstr "Tous"
@@ -230,7 +230,7 @@ msgstr "Etes-vous sûr que vous voulez supprimer ?"
 msgid "Are you sure you want to recover this item?"
 msgstr "Voulez-vous vraiment supprimer cette directive ?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
 #, fuzzy
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr "Etes-vous sûr que vous voulez supprimer ?"
@@ -248,7 +248,7 @@ msgstr "Voulez-vous vraiment supprimer cette directive ?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Voulez-vous vraiment supprimer cette localisation ?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
 #, fuzzy
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr "Voulez-vous vraiment effacer l'historique du chat ?"
@@ -288,8 +288,8 @@ msgstr "Options d'authentification"
 msgid "Author"
 msgstr "Autheur"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:178
-#: src/views/dashboard/components/PerformanceOptimization.vue:189
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:31
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:43
 msgid "Auto"
 msgstr "Auto"
 
@@ -383,6 +383,11 @@ msgstr "Basique"
 msgid "Basic Mode"
 msgstr "Mode simple"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119
+#, fuzzy
+msgid "Basic Settings"
+msgstr "Options 2FA"
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:83
 #, fuzzy
 msgid "Batch Actions"
@@ -416,16 +421,45 @@ msgstr "Build avec"
 msgid "CA Dir"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOptimization.vue:124
+msgid "Cache"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178
+msgid "Cache items not accessed within this time will be removed"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350
+msgid "Cache loader processing time threshold"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:139
 #: src/views/dashboard/components/PerformanceTablesCard.vue:94
 msgid "Cache manager processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288
+msgid "Cache manager processing time threshold"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246
+msgid "Cache Manager Settings"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124
+#, fuzzy
+msgid "Cache Path"
+msgstr "Changer de certificat"
+
 #: src/composables/usePerformanceMetrics.ts:57
 #: src/views/dashboard/components/ProcessDistributionCard.vue:14
 msgid "Cache Processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137
+msgid "Cache subdirectory levels structure, e.g. 1:2"
+msgstr ""
+
 #: src/views/preference/CertSettings.vue:19
 msgid "CADir"
 msgstr ""
@@ -654,23 +688,23 @@ msgstr ""
 msgid "Click to copy"
 msgstr "Clique pour copier"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:307
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:120
 msgid "Client Body Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:289
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:113
 msgid "Client Header Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:259
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99
 msgid "Client Max Body Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:308
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:121
 msgid "Client request body buffer size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:290
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:114
 msgid "Client request header buffer size"
 msgstr ""
 
@@ -707,7 +741,7 @@ msgstr ""
 msgid "Compare with Current"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:248
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr ""
 
@@ -758,7 +792,7 @@ msgstr ""
 msgid "Connection lost, please refresh the page."
 msgstr "Connexion perdue, merci de recharger la page."
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:207
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61
 msgid "Connection timeout period"
 msgstr ""
 
@@ -920,6 +954,10 @@ msgstr "Jours"
 msgid "Decryption failed"
 msgstr "Description"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150
+msgid "Define shared memory zone name and size, e.g. proxy_cache:10m"
+msgstr ""
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:21
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/certificate/components/RemoveCert.vue:87
@@ -1044,6 +1082,15 @@ msgstr "DirectiveIdx hors limite"
 msgid "Directives"
 msgstr "Directives"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135
+#, fuzzy
+msgid "Directory Levels"
+msgstr "Directives"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127
+msgid "Directory path to store cache files"
+msgstr ""
+
 #: src/views/site/site_edit/components/SiteStatusSegmented.vue:113
 #, fuzzy
 msgid "disable"
@@ -1298,7 +1345,7 @@ msgstr "Activé avec succès"
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "Échec de l'activation du renouvellement automatique pour %{name}"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:222
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:68
 msgid "Enable compression for content transfer"
 msgstr ""
 
@@ -1311,6 +1358,10 @@ msgstr "Échec de l'activation"
 msgid "Enable HTTPS"
 msgstr "Activer TLS"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114
+msgid "Enable Proxy Cache"
+msgstr ""
+
 #: src/components/Notification/notifications.ts:25 src/language/constants.ts:54
 #, fuzzy
 msgid "Enable Remote Site Error"
@@ -1676,7 +1727,7 @@ msgstr "Échec de l'obtention des informations sur le certificat"
 msgid "Failed to get certificate information"
 msgstr "Échec de l'obtention des informations sur le certificat"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:56
+#: src/views/dashboard/components/ParamsOptimization.vue:61
 #, fuzzy
 msgid "Failed to get Nginx performance settings"
 msgstr "Échec de l'obtention des informations sur le certificat"
@@ -1751,7 +1802,7 @@ msgstr "Erreur lecture nginx.conf"
 msgid "Failed to revoke certificate"
 msgstr "Obtenir un certificat"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:126
+#: src/views/dashboard/components/ParamsOptimization.vue:90
 #, fuzzy
 msgid "Failed to save Nginx performance settings"
 msgstr "Échec de l'obtention des informations sur le certificat"
@@ -1885,15 +1936,15 @@ msgstr "Obtention du certificat, veuillez patienter..."
 msgid "Github Proxy"
 msgstr "Proxy Github"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:221
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67
 msgid "GZIP Compression"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:247
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:87
 msgid "GZIP Compression Level"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:233
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:80
 msgid "GZIP Min Length"
 msgstr ""
 
@@ -2001,6 +2052,10 @@ msgstr "Exporter"
 msgid "Import Certificate"
 msgstr "État du certificat"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176
+msgid "Inactive Time"
+msgstr ""
+
 #: src/views/dashboard/components/ProcessDistributionCard.vue:54
 msgid ""
 "Includes master process, worker processes, cache processes, and other Nginx "
@@ -2158,10 +2213,6 @@ msgstr "Auteur : %{issuer}"
 msgid "Jwt Secret"
 msgstr "Secret Jwt"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:242
-msgid "KB"
-msgstr ""
-
 #: src/views/preference/components/RecoveryCodes.vue:74
 msgid ""
 "Keep your recovery codes as safe as your password. We recommend saving them "
@@ -2170,7 +2221,7 @@ msgstr ""
 "Garder vos codes de récupération sécurisés autant que votre mot de passe. "
 "Nous recommandons de les enregistrer avec un gestionnaire de mots de passe."
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:206
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:60
 msgid "Keepalive Timeout"
 msgstr ""
 
@@ -2267,6 +2318,24 @@ msgstr "Charger à partir des options"
 msgid "Load successfully"
 msgstr "Enregistré avec succès"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313
+#, fuzzy
+msgid "Loader Files"
+msgstr "Créé le"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308
+#, fuzzy
+msgid "Loader Settings"
+msgstr "Charger à partir des options"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323
+msgid "Loader Sleep"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348
+msgid "Loader Threshold"
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:178
 msgid "Loading data..."
 msgstr ""
@@ -2370,7 +2439,22 @@ msgstr "Gérer les utilisateurs"
 msgid "Managed Certificate"
 msgstr "Changer de certificat"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:179
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251
+#, fuzzy
+msgid "Manager Files"
+msgstr "Gérer les sites"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261
+#, fuzzy
+msgid "Manager Sleep"
+msgstr "Gérer les sites"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286
+#, fuzzy
+msgid "Manager Threshold"
+msgstr "Gérer les sites"
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:32
 msgid "Manual"
 msgstr ""
 
@@ -2405,11 +2489,15 @@ msgstr "Version actuelle"
 msgid "Max Requests Per Second"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:260
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199
+msgid "Maximum Cache Size"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:100
 msgid "Maximum client request body size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:195
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:49
 #, fuzzy
 msgid "Maximum number of concurrent connections"
 msgstr "Version actuelle"
@@ -2419,6 +2507,10 @@ msgstr "Version actuelle"
 msgid "Maximum number of connections per worker process"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201
+msgid "Maximum total size of the cache"
+msgstr ""
+
 #: src/views/dashboard/components/PerformanceTablesCard.vue:195
 msgid "Maximum worker process number:"
 msgstr ""
@@ -2436,10 +2528,18 @@ msgstr "Mémoire et stockage"
 msgid "Memory Usage (RSS)"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:234
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81
 msgid "Minimum file size for compression"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224
+msgid "Minimum Free Space"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226
+msgid "Minimum free space in the cache directory"
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:29
 msgid "Minutes"
 msgstr ""
@@ -2708,8 +2808,8 @@ msgid ""
 msgstr "Erreur d'analyse de configuration Nginx"
 
 #: src/components/ChatGPT/ChatGPT.vue:374
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
 #: src/components/Notification/Notification.vue:133
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
@@ -2814,10 +2914,18 @@ msgstr "Certification"
 msgid "Notifier not found"
 msgstr "Fichier introuvable"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:173
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26
 msgid "Number of concurrent worker processes, auto sets to CPU core count"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315
+msgid "Number of files processed by cache loader at once"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253
+msgid "Number of files processed by cache manager at once"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:129
 #: src/composables/usePerformanceMetrics.ts:169
 #: src/views/dashboard/components/PerformanceTablesCard.vue:120
@@ -2843,11 +2951,12 @@ msgid ""
 "Firefox."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:227
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165
 msgid "Off"
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:56
@@ -2878,7 +2987,8 @@ msgstr ""
 msgid "OK"
 msgstr "OK"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:226
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164
 msgid "On"
 msgstr ""
 
@@ -2886,7 +2996,7 @@ msgstr ""
 msgid "Once the verification is complete, the records will be removed."
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:89
 #: src/views/dashboard/Environments.vue:100
@@ -2902,14 +3012,6 @@ msgstr ""
 msgid "OpenAI"
 msgstr "OpenAI"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:164
-msgid "Optimize Nginx Performance"
-msgstr ""
-
-#: src/views/dashboard/components/PerformanceOptimization.vue:158
-msgid "Optimize Performance"
-msgstr ""
-
 #: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:231
 msgid "Or"
 msgstr ""
@@ -2965,6 +3067,11 @@ msgstr "Gérer les sites"
 msgid "Params"
 msgstr "Paramètres"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:109
+#: src/views/dashboard/components/ParamsOptimization.vue:115
+msgid "Params Optimization"
+msgstr ""
+
 #: src/views/preference/components/Passkey.vue:59
 msgid "Passkey"
 msgstr ""
@@ -3016,11 +3123,15 @@ msgstr ""
 msgid "Perform core upgrade error"
 msgstr "Erreur lors de la mise a niveau du core"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:121
+msgid "Performance"
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:185
 msgid "Performance Metrics"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:122
+#: src/views/dashboard/components/ParamsOptimization.vue:86
 #, fuzzy
 msgid "Performance settings saved successfully"
 msgstr "Désactivé avec succès"
@@ -3325,7 +3436,7 @@ msgstr "Note de version"
 msgid "Reload"
 msgstr "Recharger"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:138
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:139
 #: src/views/environments/group/columns.ts:24
 #: src/views/environments/group/EnvGroup.vue:37
 #: src/views/environments/list/Environment.vue:120
@@ -3354,7 +3465,7 @@ msgstr "Changer de certificat"
 msgid "Reload Remote Nginx Success"
 msgstr "Changer de certificat"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:86
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:87
 msgid "Reload request failed, please check your network connection"
 msgstr ""
 
@@ -3529,7 +3640,7 @@ msgstr ""
 msgid "Restart"
 msgstr "Redémarrer"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:150
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:151
 #: src/views/environments/list/Environment.vue:141
 #: src/views/environments/list/Environment.vue:149
 #, fuzzy
@@ -3556,7 +3667,7 @@ msgstr "Changer de certificat"
 msgid "Restart Remote Nginx Success"
 msgstr "Changer de certificat"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:106
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:107
 msgid "Restart request failed, please check your network connection"
 msgstr ""
 
@@ -3720,10 +3831,6 @@ msgstr ""
 msgid "SDK"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:216
-msgid "seconds"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgstr ""
@@ -3764,11 +3871,11 @@ msgstr "Informations sur le serveur"
 msgid "Server Info"
 msgstr "Informations sur le serveur"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:277
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:106
 msgid "Server Names Hash Bucket Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:278
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:107
 msgid "Server names hash table size"
 msgstr ""
 
@@ -3822,6 +3929,10 @@ msgid ""
 "com/guide/config-nginx.html for more information"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
+msgid "Shared Memory Zone"
+msgstr ""
+
 #: src/components/SensitiveString/SensitiveString.vue:40
 msgid "Show"
 msgstr ""
@@ -3882,6 +3993,14 @@ msgstr "Directive"
 msgid "Skip Installation"
 msgstr "Installer"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325
+msgid "Sleep time between cache loader iterations"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263
+msgid "Sleep time between cache manager iterations"
+msgstr ""
+
 #: src/views/certificate/components/CertificateEditor.vue:213
 #, fuzzy
 msgid "SSL Certificate Content"
@@ -4079,7 +4198,7 @@ msgstr "Changer de certificat"
 msgid "Sync Config Success"
 msgstr "Changer de certificat"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:124
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:125
 #: src/views/environments/group/EnvGroup.vue:18
 msgid "Sync Nodes"
 msgstr ""
@@ -4527,6 +4646,10 @@ msgstr ""
 msgid "Use recovery code"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158
+msgid "Use Temporary Path"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:333
 #, fuzzy
 msgid "User"
@@ -4670,14 +4793,18 @@ msgid ""
 "codes."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:194
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160
+msgid "Whether to use a temporary path when writing temporary files"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:48
 #, fuzzy
 msgid "Worker Connections"
 msgstr "Version actuelle"
 
 #: src/composables/usePerformanceMetrics.ts:55
 #: src/views/dashboard/components/ConnectionMetricsCard.vue:48
-#: src/views/dashboard/components/PerformanceOptimization.vue:172
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:25
 #: src/views/dashboard/components/ProcessDistributionCard.vue:12
 msgid "Worker Processes"
 msgstr ""
@@ -4699,8 +4826,8 @@ msgstr "Écriture de la clé privée du certificat sur le disque"
 msgid "Writing certificate to disk"
 msgstr "Écriture du certificat sur le disque"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
 #: src/views/preference/AuthSettings.vue:163
 #: src/views/preference/CertSettings.vue:72
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96

+ 185 - 58
app/src/language/ko_KR/app.po

@@ -118,7 +118,7 @@ msgstr "고급 모드"
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:117
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:118
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:419
 msgid "All"
 msgstr ""
@@ -212,7 +212,7 @@ msgstr "정말 삭제하시겠습니까?"
 msgid "Are you sure you want to recover this item?"
 msgstr "정말로 이 항목을 복구하시겠습니까?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr "다음 동기화 노드에서 Nginx를 다시 로드하시겠습니까?"
 
@@ -228,7 +228,7 @@ msgstr "이 항목을 제거하시겠습니까?"
 msgid "Are you sure you want to remove this location?"
 msgstr "이 위치를 제거하시겠습니까?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr "다음 동기화 노드에서 Nginx를 다시 시작하시겠습니까?"
 
@@ -265,8 +265,8 @@ msgstr "인증 설정"
 msgid "Author"
 msgstr "저자"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:178
-#: src/views/dashboard/components/PerformanceOptimization.vue:189
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:31
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:43
 msgid "Auto"
 msgstr ""
 
@@ -360,6 +360,11 @@ msgstr "기본"
 msgid "Basic Mode"
 msgstr "기본 모드"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119
+#, fuzzy
+msgid "Basic Settings"
+msgstr "2FA 설정"
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:83
 #, fuzzy
 msgid "Batch Actions"
@@ -390,16 +395,45 @@ msgstr "빌드 환경"
 msgid "CA Dir"
 msgstr "CA 디렉토리"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:124
+msgid "Cache"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178
+msgid "Cache items not accessed within this time will be removed"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350
+msgid "Cache loader processing time threshold"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:139
 #: src/views/dashboard/components/PerformanceTablesCard.vue:94
 msgid "Cache manager processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288
+msgid "Cache manager processing time threshold"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246
+msgid "Cache Manager Settings"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124
+#, fuzzy
+msgid "Cache Path"
+msgstr "인증서 변경"
+
 #: src/composables/usePerformanceMetrics.ts:57
 #: src/views/dashboard/components/ProcessDistributionCard.vue:14
 msgid "Cache Processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137
+msgid "Cache subdirectory levels structure, e.g. 1:2"
+msgstr ""
+
 #: src/views/preference/CertSettings.vue:19
 msgid "CADir"
 msgstr "CA 디렉토리"
@@ -618,23 +652,23 @@ msgstr ""
 msgid "Click to copy"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:307
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:120
 msgid "Client Body Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:289
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:113
 msgid "Client Header Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:259
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99
 msgid "Client Max Body Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:308
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:121
 msgid "Client request body buffer size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:290
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:114
 msgid "Client request header buffer size"
 msgstr ""
 
@@ -670,7 +704,7 @@ msgstr ""
 msgid "Compare with Current"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:248
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr ""
 
@@ -721,7 +755,7 @@ msgstr ""
 msgid "Connection lost, please refresh the page."
 msgstr "연결이 끊어졌습니다. 페이지를 새로 고침하세요."
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:207
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61
 msgid "Connection timeout period"
 msgstr ""
 
@@ -879,6 +913,10 @@ msgstr ""
 msgid "Decryption failed"
 msgstr "설명"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150
+msgid "Define shared memory zone name and size, e.g. proxy_cache:10m"
+msgstr ""
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:21
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/certificate/components/RemoveCert.vue:87
@@ -1000,6 +1038,15 @@ msgstr ""
 msgid "Directives"
 msgstr "지시문들"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135
+#, fuzzy
+msgid "Directory Levels"
+msgstr "지시문들"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127
+msgid "Directory path to store cache files"
+msgstr ""
+
 #: src/views/site/site_edit/components/SiteStatusSegmented.vue:113
 #, fuzzy
 msgid "disable"
@@ -1240,7 +1287,7 @@ msgstr "성공적으로 활성화"
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "%{name}에 대한 자동 갱신 활성화 실패"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:222
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:68
 msgid "Enable compression for content transfer"
 msgstr ""
 
@@ -1253,6 +1300,10 @@ msgstr "활성화 실패"
 msgid "Enable HTTPS"
 msgstr "TLS 활성화"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114
+msgid "Enable Proxy Cache"
+msgstr ""
+
 #: src/components/Notification/notifications.ts:25 src/language/constants.ts:54
 #, fuzzy
 msgid "Enable Remote Site Error"
@@ -1616,7 +1667,7 @@ msgstr "인증서 정보 가져오기 실패"
 msgid "Failed to get certificate information"
 msgstr "인증서 정보 가져오기 실패"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:56
+#: src/views/dashboard/components/ParamsOptimization.vue:61
 #, fuzzy
 msgid "Failed to get Nginx performance settings"
 msgstr "인증서 정보 가져오기 실패"
@@ -1685,7 +1736,7 @@ msgstr ""
 msgid "Failed to revoke certificate"
 msgstr "인증서 획득 실패"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:126
+#: src/views/dashboard/components/ParamsOptimization.vue:90
 #, fuzzy
 msgid "Failed to save Nginx performance settings"
 msgstr "인증서 정보 가져오기 실패"
@@ -1816,15 +1867,15 @@ msgstr "인증서를 가져오는 중입니다. 잠시 기다려 주세요..."
 msgid "Github Proxy"
 msgstr "Github 프록시"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:221
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67
 msgid "GZIP Compression"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:247
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:87
 msgid "GZIP Compression Level"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:233
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:80
 msgid "GZIP Min Length"
 msgstr ""
 
@@ -1919,6 +1970,10 @@ msgstr "가져오기"
 msgid "Import Certificate"
 msgstr "인증서 상태"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176
+msgid "Inactive Time"
+msgstr ""
+
 #: src/views/dashboard/components/ProcessDistributionCard.vue:54
 msgid ""
 "Includes master process, worker processes, cache processes, and other Nginx "
@@ -2077,17 +2132,13 @@ msgstr ""
 msgid "Jwt Secret"
 msgstr "Jwt 토큰"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:242
-msgid "KB"
-msgstr ""
-
 #: src/views/preference/components/RecoveryCodes.vue:74
 msgid ""
 "Keep your recovery codes as safe as your password. We recommend saving them "
 "with a password manager."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:206
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:60
 msgid "Keepalive Timeout"
 msgstr ""
 
@@ -2183,6 +2234,24 @@ msgstr ""
 msgid "Load successfully"
 msgstr "성공적으로 저장됨"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313
+#, fuzzy
+msgid "Loader Files"
+msgstr "생성"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308
+#, fuzzy
+msgid "Loader Settings"
+msgstr "2FA 설정"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323
+msgid "Loader Sleep"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348
+msgid "Loader Threshold"
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:178
 msgid "Loading data..."
 msgstr ""
@@ -2288,7 +2357,22 @@ msgstr "사용자 관리"
 msgid "Managed Certificate"
 msgstr "인증서 유효"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:179
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251
+#, fuzzy
+msgid "Manager Files"
+msgstr "사이트 관리"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261
+#, fuzzy
+msgid "Manager Sleep"
+msgstr "사이트 관리"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286
+#, fuzzy
+msgid "Manager Threshold"
+msgstr "스트림 관리"
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:32
 msgid "Manual"
 msgstr ""
 
@@ -2323,11 +2407,15 @@ msgstr "현재 버전"
 msgid "Max Requests Per Second"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:260
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199
+msgid "Maximum Cache Size"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:100
 msgid "Maximum client request body size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:195
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:49
 #, fuzzy
 msgid "Maximum number of concurrent connections"
 msgstr "현재 버전"
@@ -2337,6 +2425,10 @@ msgstr "현재 버전"
 msgid "Maximum number of connections per worker process"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201
+msgid "Maximum total size of the cache"
+msgstr ""
+
 #: src/views/dashboard/components/PerformanceTablesCard.vue:195
 msgid "Maximum worker process number:"
 msgstr ""
@@ -2354,10 +2446,18 @@ msgstr "메모리 및 저장소"
 msgid "Memory Usage (RSS)"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:234
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81
 msgid "Minimum file size for compression"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224
+msgid "Minimum Free Space"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226
+msgid "Minimum free space in the cache directory"
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:29
 msgid "Minutes"
 msgstr "분"
@@ -2628,8 +2728,8 @@ msgid ""
 msgstr "Nginx 구성 오류름"
 
 #: src/components/ChatGPT/ChatGPT.vue:374
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
 #: src/components/Notification/Notification.vue:133
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
@@ -2733,10 +2833,18 @@ msgstr "알림"
 msgid "Notifier not found"
 msgstr "파일을 찾을 수 없음"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:173
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26
 msgid "Number of concurrent worker processes, auto sets to CPU core count"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315
+msgid "Number of files processed by cache loader at once"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253
+msgid "Number of files processed by cache manager at once"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:129
 #: src/composables/usePerformanceMetrics.ts:169
 #: src/views/dashboard/components/PerformanceTablesCard.vue:120
@@ -2763,12 +2871,13 @@ msgid ""
 "Firefox."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:227
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165
 #, fuzzy
 msgid "Off"
 msgstr "오프라인"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:56
@@ -2799,7 +2908,8 @@ msgstr ""
 msgid "OK"
 msgstr "확인"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:226
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164
 msgid "On"
 msgstr ""
 
@@ -2807,7 +2917,7 @@ msgstr ""
 msgid "Once the verification is complete, the records will be removed."
 msgstr "검증이 완료되면, 레코드는 제거됩니다."
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:89
 #: src/views/dashboard/Environments.vue:100
@@ -2823,14 +2933,6 @@ msgstr ""
 msgid "OpenAI"
 msgstr "오픈AI"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:164
-msgid "Optimize Nginx Performance"
-msgstr ""
-
-#: src/views/dashboard/components/PerformanceOptimization.vue:158
-msgid "Optimize Performance"
-msgstr ""
-
 #: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:231
 msgid "Or"
 msgstr ""
@@ -2887,6 +2989,11 @@ msgstr "사이트 관리"
 msgid "Params"
 msgstr "파라미터"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:109
+#: src/views/dashboard/components/ParamsOptimization.vue:115
+msgid "Params Optimization"
+msgstr ""
+
 #: src/views/preference/components/Passkey.vue:59
 msgid "Passkey"
 msgstr ""
@@ -2938,11 +3045,15 @@ msgstr ""
 msgid "Perform core upgrade error"
 msgstr "핵심 업그레이드 오류 수행"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:121
+msgid "Performance"
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:185
 msgid "Performance Metrics"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:122
+#: src/views/dashboard/components/ParamsOptimization.vue:86
 #, fuzzy
 msgid "Performance settings saved successfully"
 msgstr "성공적으로 비활성화됨"
@@ -3245,7 +3356,7 @@ msgstr "릴리스 노트"
 msgid "Reload"
 msgstr "리로드"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:138
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:139
 #: src/views/environments/group/columns.ts:24
 #: src/views/environments/group/EnvGroup.vue:37
 #: src/views/environments/list/Environment.vue:120
@@ -3274,7 +3385,7 @@ msgstr "인증서 갱신 오류"
 msgid "Reload Remote Nginx Success"
 msgstr "인증서 갱신 성공"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:86
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:87
 msgid "Reload request failed, please check your network connection"
 msgstr ""
 
@@ -3449,7 +3560,7 @@ msgstr ""
 msgid "Restart"
 msgstr "재시작"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:150
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:151
 #: src/views/environments/list/Environment.vue:141
 #: src/views/environments/list/Environment.vue:149
 #, fuzzy
@@ -3476,7 +3587,7 @@ msgstr "인증서 갱신 오류"
 msgid "Restart Remote Nginx Success"
 msgstr "인증서 갱신 성공"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:106
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:107
 msgid "Restart request failed, please check your network connection"
 msgstr ""
 
@@ -3642,10 +3753,6 @@ msgstr ""
 msgid "SDK"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:216
-msgid "seconds"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgstr ""
@@ -3685,11 +3792,11 @@ msgstr "서버 정보"
 msgid "Server Info"
 msgstr "서버 정보"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:277
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:106
 msgid "Server Names Hash Bucket Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:278
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:107
 msgid "Server names hash table size"
 msgstr ""
 
@@ -3741,6 +3848,10 @@ msgid ""
 "com/guide/config-nginx.html for more information"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
+msgid "Shared Memory Zone"
+msgstr ""
+
 #: src/components/SensitiveString/SensitiveString.vue:40
 msgid "Show"
 msgstr ""
@@ -3800,6 +3911,14 @@ msgstr ""
 msgid "Skip Installation"
 msgstr "설치"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325
+msgid "Sleep time between cache loader iterations"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263
+msgid "Sleep time between cache manager iterations"
+msgstr ""
+
 #: src/views/certificate/components/CertificateEditor.vue:213
 #, fuzzy
 msgid "SSL Certificate Content"
@@ -3996,7 +4115,7 @@ msgstr "인증서 갱신 오류"
 msgid "Sync Config Success"
 msgstr "인증서 갱신 성공"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:124
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:125
 #: src/views/environments/group/EnvGroup.vue:18
 msgid "Sync Nodes"
 msgstr ""
@@ -4441,6 +4560,10 @@ msgstr ""
 msgid "Use recovery code"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158
+msgid "Use Temporary Path"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:333
 #, fuzzy
 msgid "User"
@@ -4587,14 +4710,18 @@ msgid ""
 "codes."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:194
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160
+msgid "Whether to use a temporary path when writing temporary files"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:48
 #, fuzzy
 msgid "Worker Connections"
 msgstr "현재 버전"
 
 #: src/composables/usePerformanceMetrics.ts:55
 #: src/views/dashboard/components/ConnectionMetricsCard.vue:48
-#: src/views/dashboard/components/PerformanceOptimization.vue:172
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:25
 #: src/views/dashboard/components/ProcessDistributionCard.vue:12
 msgid "Worker Processes"
 msgstr ""
@@ -4616,8 +4743,8 @@ msgstr "인증서 개인 키를 디스크에 쓰기"
 msgid "Writing certificate to disk"
 msgstr "인증서를 디스크에 쓰기"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
 #: src/views/preference/AuthSettings.vue:163
 #: src/views/preference/CertSettings.vue:72
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96

+ 177 - 58
app/src/language/messages.pot

@@ -110,7 +110,7 @@ msgstr ""
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:117
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:118
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:419
 msgid "All"
 msgstr ""
@@ -202,7 +202,7 @@ msgstr ""
 msgid "Are you sure you want to recover this item?"
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr ""
 
@@ -218,7 +218,7 @@ msgstr ""
 msgid "Are you sure you want to remove this location?"
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr ""
 
@@ -255,8 +255,8 @@ msgstr ""
 msgid "Author"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:178
-#: src/views/dashboard/components/PerformanceOptimization.vue:189
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:31
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:43
 msgid "Auto"
 msgstr ""
 
@@ -349,6 +349,10 @@ msgstr ""
 msgid "Basic Mode"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119
+msgid "Basic Settings"
+msgstr ""
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:83
 msgid "Batch Actions"
 msgstr ""
@@ -378,16 +382,44 @@ msgstr ""
 msgid "CA Dir"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOptimization.vue:124
+msgid "Cache"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178
+msgid "Cache items not accessed within this time will be removed"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350
+msgid "Cache loader processing time threshold"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:139
 #: src/views/dashboard/components/PerformanceTablesCard.vue:94
 msgid "Cache manager processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288
+msgid "Cache manager processing time threshold"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246
+msgid "Cache Manager Settings"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124
+msgid "Cache Path"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:57
 #: src/views/dashboard/components/ProcessDistributionCard.vue:14
 msgid "Cache Processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137
+msgid "Cache subdirectory levels structure, e.g. 1:2"
+msgstr ""
+
 #: src/views/preference/CertSettings.vue:19
 msgid "CADir"
 msgstr ""
@@ -585,23 +617,23 @@ msgstr ""
 msgid "Click to copy"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:307
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:120
 msgid "Client Body Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:289
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:113
 msgid "Client Header Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:259
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99
 msgid "Client Max Body Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:308
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:121
 msgid "Client request body buffer size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:290
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:114
 msgid "Client request header buffer size"
 msgstr ""
 
@@ -636,7 +668,7 @@ msgstr ""
 msgid "Compare with Current"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:248
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr ""
 
@@ -684,7 +716,7 @@ msgstr ""
 msgid "Connection lost, please refresh the page."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:207
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61
 msgid "Connection timeout period"
 msgstr ""
 
@@ -834,6 +866,10 @@ msgstr ""
 msgid "Decryption failed"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150
+msgid "Define shared memory zone name and size, e.g. proxy_cache:10m"
+msgstr ""
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:21
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/certificate/components/RemoveCert.vue:87
@@ -949,6 +985,14 @@ msgstr ""
 msgid "Directives"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135
+msgid "Directory Levels"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127
+msgid "Directory path to store cache files"
+msgstr ""
+
 #: src/views/site/site_edit/components/SiteStatusSegmented.vue:113
 msgid "disable"
 msgstr ""
@@ -1172,7 +1216,7 @@ msgstr ""
 msgid "Enable auto-renewal failed for %{name}"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:222
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:68
 msgid "Enable compression for content transfer"
 msgstr ""
 
@@ -1184,6 +1228,10 @@ msgstr ""
 msgid "Enable HTTPS"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114
+msgid "Enable Proxy Cache"
+msgstr ""
+
 #: src/components/Notification/notifications.ts:25
 #: src/language/constants.ts:54
 msgid "Enable Remote Site Error"
@@ -1508,7 +1556,7 @@ msgstr ""
 msgid "Failed to get certificate information"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:56
+#: src/views/dashboard/components/ParamsOptimization.vue:61
 msgid "Failed to get Nginx performance settings"
 msgstr ""
 
@@ -1568,7 +1616,7 @@ msgstr ""
 msgid "Failed to revoke certificate"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:126
+#: src/views/dashboard/components/ParamsOptimization.vue:90
 msgid "Failed to save Nginx performance settings"
 msgstr ""
 
@@ -1689,15 +1737,15 @@ msgstr ""
 msgid "Github Proxy"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:221
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67
 msgid "GZIP Compression"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:247
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:87
 msgid "GZIP Compression Level"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:233
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:80
 msgid "GZIP Min Length"
 msgstr ""
 
@@ -1780,6 +1828,10 @@ msgstr ""
 msgid "Import Certificate"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176
+msgid "Inactive Time"
+msgstr ""
+
 #: src/views/dashboard/components/ProcessDistributionCard.vue:54
 msgid "Includes master process, worker processes, cache processes, and other Nginx processes"
 msgstr ""
@@ -1928,15 +1980,11 @@ msgstr ""
 msgid "Jwt Secret"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:242
-msgid "KB"
-msgstr ""
-
 #: src/views/preference/components/RecoveryCodes.vue:74
 msgid "Keep your recovery codes as safe as your password. We recommend saving them with a password manager."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:206
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:60
 msgid "Keepalive Timeout"
 msgstr ""
 
@@ -2023,6 +2071,22 @@ msgstr ""
 msgid "Load successfully"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313
+msgid "Loader Files"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308
+msgid "Loader Settings"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323
+msgid "Loader Sleep"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348
+msgid "Loader Threshold"
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:178
 msgid "Loading data..."
 msgstr ""
@@ -2114,7 +2178,19 @@ msgstr ""
 msgid "Managed Certificate"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:179
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251
+msgid "Manager Files"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261
+msgid "Manager Sleep"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286
+msgid "Manager Threshold"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:32
 msgid "Manual"
 msgstr ""
 
@@ -2148,11 +2224,15 @@ msgstr ""
 msgid "Max Requests Per Second"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:260
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199
+msgid "Maximum Cache Size"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:100
 msgid "Maximum client request body size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:195
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:49
 msgid "Maximum number of concurrent connections"
 msgstr ""
 
@@ -2161,6 +2241,10 @@ msgstr ""
 msgid "Maximum number of connections per worker process"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201
+msgid "Maximum total size of the cache"
+msgstr ""
+
 #: src/views/dashboard/components/PerformanceTablesCard.vue:195
 msgid "Maximum worker process number:"
 msgstr ""
@@ -2178,10 +2262,18 @@ msgstr ""
 msgid "Memory Usage (RSS)"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:234
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81
 msgid "Minimum file size for compression"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224
+msgid "Minimum Free Space"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226
+msgid "Minimum free space in the cache directory"
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:29
 msgid "Minutes"
 msgstr ""
@@ -2432,8 +2524,8 @@ msgid "Nginx UI configuration has been restored and will restart automatically i
 msgstr ""
 
 #: src/components/ChatGPT/ChatGPT.vue:374
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
 #: src/components/Notification/Notification.vue:133
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
@@ -2526,10 +2618,18 @@ msgstr ""
 msgid "Notifier not found"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:173
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26
 msgid "Number of concurrent worker processes, auto sets to CPU core count"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315
+msgid "Number of files processed by cache loader at once"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253
+msgid "Number of files processed by cache manager at once"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:129
 #: src/composables/usePerformanceMetrics.ts:169
 #: src/views/dashboard/components/PerformanceTablesCard.vue:120
@@ -2553,11 +2653,12 @@ msgstr ""
 msgid "OCSP Must Staple may cause errors for some users on first access using Firefox."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:227
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165
 msgid "Off"
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:56
@@ -2588,7 +2689,8 @@ msgstr ""
 msgid "OK"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:226
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164
 msgid "On"
 msgstr ""
 
@@ -2596,7 +2698,7 @@ msgstr ""
 msgid "Once the verification is complete, the records will be removed."
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:89
 #: src/views/dashboard/Environments.vue:100
@@ -2612,14 +2714,6 @@ msgstr ""
 msgid "OpenAI"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:164
-msgid "Optimize Nginx Performance"
-msgstr ""
-
-#: src/views/dashboard/components/PerformanceOptimization.vue:158
-msgid "Optimize Performance"
-msgstr ""
-
 #: src/components/TwoFA/Authorization.vue:100
 #: src/views/other/Login.vue:231
 msgid "Or"
@@ -2675,6 +2769,11 @@ msgstr ""
 msgid "Params"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOptimization.vue:109
+#: src/views/dashboard/components/ParamsOptimization.vue:115
+msgid "Params Optimization"
+msgstr ""
+
 #: src/views/preference/components/Passkey.vue:59
 msgid "Passkey"
 msgstr ""
@@ -2724,11 +2823,15 @@ msgstr ""
 msgid "Perform core upgrade error"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOptimization.vue:121
+msgid "Performance"
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:185
 msgid "Performance Metrics"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:122
+#: src/views/dashboard/components/ParamsOptimization.vue:86
 msgid "Performance settings saved successfully"
 msgstr ""
 
@@ -2994,7 +3097,7 @@ msgstr ""
 msgid "Reload"
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:138
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:139
 #: src/views/environments/group/columns.ts:24
 #: src/views/environments/group/EnvGroup.vue:37
 #: src/views/environments/list/Environment.vue:120
@@ -3018,7 +3121,7 @@ msgstr ""
 msgid "Reload Remote Nginx Success"
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:86
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:87
 msgid "Reload request failed, please check your network connection"
 msgstr ""
 
@@ -3169,7 +3272,7 @@ msgstr ""
 msgid "Restart"
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:150
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:151
 #: src/views/environments/list/Environment.vue:141
 #: src/views/environments/list/Environment.vue:149
 msgid "Restart Nginx"
@@ -3191,7 +3294,7 @@ msgstr ""
 msgid "Restart Remote Nginx Success"
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:106
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:107
 msgid "Restart request failed, please check your network connection"
 msgstr ""
 
@@ -3341,10 +3444,6 @@ msgstr ""
 msgid "SDK"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:216
-msgid "seconds"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgstr ""
@@ -3385,11 +3484,11 @@ msgstr ""
 msgid "Server Info"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:277
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:106
 msgid "Server Names Hash Bucket Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:278
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:107
 msgid "Server names hash table size"
 msgstr ""
 
@@ -3433,6 +3532,10 @@ msgstr ""
 msgid "Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui.com/guide/config-nginx.html for more information"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
+msgid "Shared Memory Zone"
+msgstr ""
+
 #: src/components/SensitiveString/SensitiveString.vue:40
 msgid "Show"
 msgstr ""
@@ -3485,6 +3588,14 @@ msgstr ""
 msgid "Skip Installation"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325
+msgid "Sleep time between cache loader iterations"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263
+msgid "Sleep time between cache manager iterations"
+msgstr ""
+
 #: src/views/certificate/components/CertificateEditor.vue:213
 msgid "SSL Certificate Content"
 msgstr ""
@@ -3659,7 +3770,7 @@ msgstr ""
 msgid "Sync Config Success"
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:124
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:125
 #: src/views/environments/group/EnvGroup.vue:18
 msgid "Sync Nodes"
 msgstr ""
@@ -4035,6 +4146,10 @@ msgstr ""
 msgid "Use recovery code"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158
+msgid "Use Temporary Path"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:333
 msgid "User"
 msgstr ""
@@ -4156,13 +4271,17 @@ msgstr ""
 msgid "When you generate new recovery codes, you must download or print the new codes."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:194
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160
+msgid "Whether to use a temporary path when writing temporary files"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:48
 msgid "Worker Connections"
 msgstr ""
 
 #: src/composables/usePerformanceMetrics.ts:55
 #: src/views/dashboard/components/ConnectionMetricsCard.vue:48
-#: src/views/dashboard/components/PerformanceOptimization.vue:172
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:25
 #: src/views/dashboard/components/ProcessDistributionCard.vue:12
 msgid "Worker Processes"
 msgstr ""
@@ -4184,8 +4303,8 @@ msgstr ""
 msgid "Writing certificate to disk"
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
 #: src/views/preference/AuthSettings.vue:163
 #: src/views/preference/CertSettings.vue:72
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96

+ 186 - 58
app/src/language/ru_RU/app.po

@@ -120,7 +120,7 @@ msgstr "Расширенный режим"
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr "Затем, обновите эту страницу и снова нажмите «Добавить ключ доступа»."
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:117
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:118
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:419
 msgid "All"
 msgstr "Все"
@@ -214,7 +214,7 @@ msgstr "Вы уверены, что хотите удалить?"
 msgid "Are you sure you want to recover this item?"
 msgstr "Вы уверены, что хотите восстановить этот элемент?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
 #, fuzzy
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr "Вы уверены, что хотите удалить?"
@@ -231,7 +231,7 @@ msgstr "Вы уверены, что хотите удалить этот эле
 msgid "Are you sure you want to remove this location?"
 msgstr "Вы уверены, что хотите удалить location?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
 #, fuzzy
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr "Вы уверены, что хотите очистить все уведомления?"
@@ -269,8 +269,8 @@ msgstr "Настройки аутентификации"
 msgid "Author"
 msgstr "Автор"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:178
-#: src/views/dashboard/components/PerformanceOptimization.vue:189
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:31
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:43
 msgid "Auto"
 msgstr ""
 
@@ -364,6 +364,11 @@ msgstr "Основные"
 msgid "Basic Mode"
 msgstr "Простой режим"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119
+#, fuzzy
+msgid "Basic Settings"
+msgstr "Настройки 2FA"
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:83
 #, fuzzy
 msgid "Batch Actions"
@@ -394,16 +399,45 @@ msgstr "Собрать с"
 msgid "CA Dir"
 msgstr "Директория корневого сертификата"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:124
+msgid "Cache"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178
+msgid "Cache items not accessed within this time will be removed"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350
+msgid "Cache loader processing time threshold"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:139
 #: src/views/dashboard/components/PerformanceTablesCard.vue:94
 msgid "Cache manager processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288
+msgid "Cache manager processing time threshold"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246
+msgid "Cache Manager Settings"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124
+#, fuzzy
+msgid "Cache Path"
+msgstr "Путь изменён"
+
 #: src/composables/usePerformanceMetrics.ts:57
 #: src/views/dashboard/components/ProcessDistributionCard.vue:14
 msgid "Cache Processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137
+msgid "Cache subdirectory levels structure, e.g. 1:2"
+msgstr ""
+
 #: src/views/preference/CertSettings.vue:19
 msgid "CADir"
 msgstr ""
@@ -616,23 +650,23 @@ msgstr ""
 msgid "Click to copy"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:307
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:120
 msgid "Client Body Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:289
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:113
 msgid "Client Header Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:259
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99
 msgid "Client Max Body Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:308
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:121
 msgid "Client request body buffer size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:290
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:114
 msgid "Client request header buffer size"
 msgstr ""
 
@@ -668,7 +702,7 @@ msgstr ""
 msgid "Compare with Current"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:248
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr ""
 
@@ -719,7 +753,7 @@ msgstr ""
 msgid "Connection lost, please refresh the page."
 msgstr "Соединение потеряно, пожалуйста, обновите страницу."
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:207
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61
 msgid "Connection timeout period"
 msgstr ""
 
@@ -875,6 +909,10 @@ msgstr "Дни"
 msgid "Decryption failed"
 msgstr "Ошибка расшифровки"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150
+msgid "Define shared memory zone name and size, e.g. proxy_cache:10m"
+msgstr ""
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:21
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/certificate/components/RemoveCert.vue:87
@@ -994,6 +1032,15 @@ msgstr ""
 msgid "Directives"
 msgstr "Директивы"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135
+#, fuzzy
+msgid "Directory Levels"
+msgstr "Директивы"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127
+msgid "Directory path to store cache files"
+msgstr ""
+
 #: src/views/site/site_edit/components/SiteStatusSegmented.vue:113
 #, fuzzy
 msgid "disable"
@@ -1236,7 +1283,7 @@ msgstr "Двухфакторная аутентификация успешно 
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "Не удалось включить автоматическое продление для %{name}"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:222
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:68
 msgid "Enable compression for content transfer"
 msgstr ""
 
@@ -1249,6 +1296,10 @@ msgstr "Не удалось включить"
 msgid "Enable HTTPS"
 msgstr "Включить TOTP"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114
+msgid "Enable Proxy Cache"
+msgstr ""
+
 #: src/components/Notification/notifications.ts:25 src/language/constants.ts:54
 #, fuzzy
 msgid "Enable Remote Site Error"
@@ -1606,7 +1657,7 @@ msgstr "Не удалось получить информацию о серти
 msgid "Failed to get certificate information"
 msgstr "Не удалось получить информацию о сертификате"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:56
+#: src/views/dashboard/components/ParamsOptimization.vue:61
 #, fuzzy
 msgid "Failed to get Nginx performance settings"
 msgstr "Не удалось получить информацию о сертификате"
@@ -1675,7 +1726,7 @@ msgstr ""
 msgid "Failed to revoke certificate"
 msgstr "Не удалось получить сертификат"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:126
+#: src/views/dashboard/components/ParamsOptimization.vue:90
 #, fuzzy
 msgid "Failed to save Nginx performance settings"
 msgstr "Не удалось получить информацию о сертификате"
@@ -1806,15 +1857,15 @@ msgstr "Получение сертификата, пожалуйста, под
 msgid "Github Proxy"
 msgstr "Прокси Github"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:221
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67
 msgid "GZIP Compression"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:247
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:87
 msgid "GZIP Compression Level"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:233
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:80
 msgid "GZIP Min Length"
 msgstr ""
 
@@ -1917,6 +1968,10 @@ msgstr "Импорт"
 msgid "Import Certificate"
 msgstr "Импортировать сертификат"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176
+msgid "Inactive Time"
+msgstr ""
+
 #: src/views/dashboard/components/ProcessDistributionCard.vue:54
 msgid ""
 "Includes master process, worker processes, cache processes, and other Nginx "
@@ -2069,17 +2124,13 @@ msgstr "Издатель: %{issuer}"
 msgid "Jwt Secret"
 msgstr "Jwt секрет"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:242
-msgid "KB"
-msgstr ""
-
 #: src/views/preference/components/RecoveryCodes.vue:74
 msgid ""
 "Keep your recovery codes as safe as your password. We recommend saving them "
 "with a password manager."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:206
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:60
 msgid "Keepalive Timeout"
 msgstr ""
 
@@ -2170,6 +2221,24 @@ msgstr "Загрузить из настроек"
 msgid "Load successfully"
 msgstr "Загружено успешно"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313
+#, fuzzy
+msgid "Loader Files"
+msgstr "Создать файл"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308
+#, fuzzy
+msgid "Loader Settings"
+msgstr "Загрузить из настроек"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323
+msgid "Loader Sleep"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348
+msgid "Loader Threshold"
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:178
 msgid "Loading data..."
 msgstr ""
@@ -2272,7 +2341,22 @@ msgstr "Пользователи"
 msgid "Managed Certificate"
 msgstr "Управление сертификатом"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:179
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251
+#, fuzzy
+msgid "Manager Files"
+msgstr "Сайты"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261
+#, fuzzy
+msgid "Manager Sleep"
+msgstr "Сайты"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286
+#, fuzzy
+msgid "Manager Threshold"
+msgstr "Управление потоками"
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:32
 msgid "Manual"
 msgstr ""
 
@@ -2307,11 +2391,15 @@ msgstr "Текущяя версия"
 msgid "Max Requests Per Second"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:260
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199
+msgid "Maximum Cache Size"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:100
 msgid "Maximum client request body size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:195
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:49
 #, fuzzy
 msgid "Maximum number of concurrent connections"
 msgstr "Текущяя версия"
@@ -2321,6 +2409,10 @@ msgstr "Текущяя версия"
 msgid "Maximum number of connections per worker process"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201
+msgid "Maximum total size of the cache"
+msgstr ""
+
 #: src/views/dashboard/components/PerformanceTablesCard.vue:195
 msgid "Maximum worker process number:"
 msgstr ""
@@ -2338,10 +2430,18 @@ msgstr "Память и хранилище"
 msgid "Memory Usage (RSS)"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:234
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81
 msgid "Minimum file size for compression"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224
+msgid "Minimum Free Space"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226
+msgid "Minimum free space in the cache directory"
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:29
 msgid "Minutes"
 msgstr "Минуты"
@@ -2603,8 +2703,8 @@ msgid ""
 msgstr "Ошибка разбора конфигурации Nginx"
 
 #: src/components/ChatGPT/ChatGPT.vue:374
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
 #: src/components/Notification/Notification.vue:133
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
@@ -2707,10 +2807,18 @@ msgstr "Уведомления"
 msgid "Notifier not found"
 msgstr "Файл не найден"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:173
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26
 msgid "Number of concurrent worker processes, auto sets to CPU core count"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315
+msgid "Number of files processed by cache loader at once"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253
+msgid "Number of files processed by cache manager at once"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:129
 #: src/composables/usePerformanceMetrics.ts:169
 #: src/views/dashboard/components/PerformanceTablesCard.vue:120
@@ -2738,12 +2846,13 @@ msgstr ""
 "OCSP Must Staple может вызвать ошибки у некоторых пользователей при первом "
 "доступе через Firefox."
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:227
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165
 #, fuzzy
 msgid "Off"
 msgstr "Оффлайн"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:56
@@ -2774,7 +2883,8 @@ msgstr "Ок"
 msgid "OK"
 msgstr "ОК"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:226
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164
 msgid "On"
 msgstr ""
 
@@ -2782,7 +2892,7 @@ msgstr ""
 msgid "Once the verification is complete, the records will be removed."
 msgstr "После завершения проверки записи будут удалены."
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:89
 #: src/views/dashboard/Environments.vue:100
@@ -2798,14 +2908,6 @@ msgstr ""
 msgid "OpenAI"
 msgstr "OpenAI"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:164
-msgid "Optimize Nginx Performance"
-msgstr ""
-
-#: src/views/dashboard/components/PerformanceOptimization.vue:158
-msgid "Optimize Performance"
-msgstr ""
-
 #: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:231
 msgid "Or"
 msgstr ""
@@ -2861,6 +2963,11 @@ msgstr "Сайты"
 msgid "Params"
 msgstr "Параметры"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:109
+#: src/views/dashboard/components/ParamsOptimization.vue:115
+msgid "Params Optimization"
+msgstr ""
+
 #: src/views/preference/components/Passkey.vue:59
 msgid "Passkey"
 msgstr ""
@@ -2912,11 +3019,16 @@ msgstr "Выполнить"
 msgid "Perform core upgrade error"
 msgstr "Ошибка обновления ядра"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:121
+#, fuzzy
+msgid "Performance"
+msgstr "Выполнить"
+
 #: src/views/dashboard/NginxDashBoard.vue:185
 msgid "Performance Metrics"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:122
+#: src/views/dashboard/components/ParamsOptimization.vue:86
 #, fuzzy
 msgid "Performance settings saved successfully"
 msgstr "Отключено успешно"
@@ -3221,7 +3333,7 @@ msgstr "Что нового"
 msgid "Reload"
 msgstr "Перегрузить"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:138
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:139
 #: src/views/environments/group/columns.ts:24
 #: src/views/environments/group/EnvGroup.vue:37
 #: src/views/environments/list/Environment.vue:120
@@ -3250,7 +3362,7 @@ msgstr "Ошибка переименования удаленной конфи
 msgid "Reload Remote Nginx Success"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:86
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:87
 msgid "Reload request failed, please check your network connection"
 msgstr ""
 
@@ -3411,7 +3523,7 @@ msgstr ""
 msgid "Restart"
 msgstr "Перезапуск"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:150
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:151
 #: src/views/environments/list/Environment.vue:141
 #: src/views/environments/list/Environment.vue:149
 #, fuzzy
@@ -3438,7 +3550,7 @@ msgstr "Ошибка переименования удаленной конфи
 msgid "Restart Remote Nginx Success"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:106
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:107
 msgid "Restart request failed, please check your network connection"
 msgstr ""
 
@@ -3602,10 +3714,6 @@ msgstr ""
 msgid "SDK"
 msgstr "SDK"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:216
-msgid "seconds"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgstr ""
@@ -3646,11 +3754,11 @@ msgstr "Информация о сервере"
 msgid "Server Info"
 msgstr "Информация о сервере"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:277
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:106
 msgid "Server Names Hash Bucket Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:278
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:107
 msgid "Server names hash table size"
 msgstr ""
 
@@ -3703,6 +3811,10 @@ msgid ""
 "com/guide/config-nginx.html for more information"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
+msgid "Shared Memory Zone"
+msgstr ""
+
 #: src/components/SensitiveString/SensitiveString.vue:40
 msgid "Show"
 msgstr "Показать"
@@ -3761,6 +3873,14 @@ msgstr ""
 msgid "Skip Installation"
 msgstr "Установить"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325
+msgid "Sleep time between cache loader iterations"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263
+msgid "Sleep time between cache manager iterations"
+msgstr ""
+
 #: src/views/certificate/components/CertificateEditor.vue:213
 msgid "SSL Certificate Content"
 msgstr "Содержимое SSL-сертификата"
@@ -3946,7 +4066,7 @@ msgstr "Ошибка синхронизации конфигурации"
 msgid "Sync Config Success"
 msgstr "Синхронизация конфигурации успешна"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:124
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:125
 #: src/views/environments/group/EnvGroup.vue:18
 #, fuzzy
 msgid "Sync Nodes"
@@ -4409,6 +4529,10 @@ msgstr "Использовать OTP"
 msgid "Use recovery code"
 msgstr "Использовать код восстановления"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158
+msgid "Use Temporary Path"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:333
 msgid "User"
 msgstr "Пользователь"
@@ -4552,14 +4676,18 @@ msgid ""
 "codes."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:194
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160
+msgid "Whether to use a temporary path when writing temporary files"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:48
 #, fuzzy
 msgid "Worker Connections"
 msgstr "Текущяя версия"
 
 #: src/composables/usePerformanceMetrics.ts:55
 #: src/views/dashboard/components/ConnectionMetricsCard.vue:48
-#: src/views/dashboard/components/PerformanceOptimization.vue:172
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:25
 #: src/views/dashboard/components/ProcessDistributionCard.vue:12
 msgid "Worker Processes"
 msgstr ""
@@ -4581,8 +4709,8 @@ msgstr "Запись закрытого ключа сертификата на 
 msgid "Writing certificate to disk"
 msgstr "Запись сертификата на диск"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
 #: src/views/preference/AuthSettings.vue:163
 #: src/views/preference/CertSettings.vue:72
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96

+ 186 - 58
app/src/language/tr_TR/app.po

@@ -118,7 +118,7 @@ msgid "Afterwards, refresh this page and click add passkey again."
 msgstr ""
 "Daha sonra, bu sayfayı yenileyin ve tekrar geçiş anahtarı ekle'ye tıklayın."
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:117
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:118
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:419
 msgid "All"
 msgstr "Hepsi"
@@ -210,7 +210,7 @@ msgstr "Silmek istediğine emin misin?"
 msgid "Are you sure you want to recover this item?"
 msgstr "Bu öğeyi kurtarmak istediğinizden emin misiniz?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
 #, fuzzy
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr "Silmek istediğine emin misin?"
@@ -227,7 +227,7 @@ msgstr "Bu öğeyi kaldırmak istediğinizden emin misiniz?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Bu konumu kaldırmak istediğinizden emin misiniz?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
 #, fuzzy
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr "Tüm bildirimleri temizlemek istediğinizden emin misiniz?"
@@ -266,8 +266,8 @@ msgstr "Kimlik Doğrulama Ayarları"
 msgid "Author"
 msgstr "Yazar"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:178
-#: src/views/dashboard/components/PerformanceOptimization.vue:189
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:31
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:43
 msgid "Auto"
 msgstr ""
 
@@ -361,6 +361,11 @@ msgstr "Temel"
 msgid "Basic Mode"
 msgstr "Temel Mod"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119
+#, fuzzy
+msgid "Basic Settings"
+msgstr "2FA Ayarları"
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:83
 #, fuzzy
 msgid "Batch Actions"
@@ -391,16 +396,45 @@ msgstr "İle Oluşturuldu"
 msgid "CA Dir"
 msgstr "CA Dizini"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:124
+msgid "Cache"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178
+msgid "Cache items not accessed within this time will be removed"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350
+msgid "Cache loader processing time threshold"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:139
 #: src/views/dashboard/components/PerformanceTablesCard.vue:94
 msgid "Cache manager processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288
+msgid "Cache manager processing time threshold"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246
+msgid "Cache Manager Settings"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124
+#, fuzzy
+msgid "Cache Path"
+msgstr "Değişen Dosya Yolu"
+
 #: src/composables/usePerformanceMetrics.ts:57
 #: src/views/dashboard/components/ProcessDistributionCard.vue:14
 msgid "Cache Processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137
+msgid "Cache subdirectory levels structure, e.g. 1:2"
+msgstr ""
+
 #: src/views/preference/CertSettings.vue:19
 msgid "CADir"
 msgstr "CADizini"
@@ -617,23 +651,23 @@ msgstr ""
 msgid "Click to copy"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:307
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:120
 msgid "Client Body Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:289
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:113
 msgid "Client Header Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:259
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99
 msgid "Client Max Body Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:308
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:121
 msgid "Client request body buffer size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:290
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:114
 msgid "Client request header buffer size"
 msgstr ""
 
@@ -669,7 +703,7 @@ msgstr ""
 msgid "Compare with Current"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:248
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr ""
 
@@ -720,7 +754,7 @@ msgstr ""
 msgid "Connection lost, please refresh the page."
 msgstr "Bağlantı kesildi, lütfen sayfayı yenileyin."
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:207
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61
 msgid "Connection timeout period"
 msgstr ""
 
@@ -878,6 +912,10 @@ msgstr "Günler"
 msgid "Decryption failed"
 msgstr "Açıklama"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150
+msgid "Define shared memory zone name and size, e.g. proxy_cache:10m"
+msgstr ""
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:21
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/certificate/components/RemoveCert.vue:87
@@ -1001,6 +1039,15 @@ msgstr ""
 msgid "Directives"
 msgstr "Yönergeler"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135
+#, fuzzy
+msgid "Directory Levels"
+msgstr "Yönergeler"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127
+msgid "Directory path to store cache files"
+msgstr ""
+
 #: src/views/site/site_edit/components/SiteStatusSegmented.vue:113
 #, fuzzy
 msgid "disable"
@@ -1255,7 +1302,7 @@ msgstr "2FA'yı başarıyla etkinleştirildi"
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "%{name} için otomatik yenilemeyi etkinleştirme başarısız oldu"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:222
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:68
 msgid "Enable compression for content transfer"
 msgstr ""
 
@@ -1268,6 +1315,10 @@ msgstr "Etkinleştirme başarısız"
 msgid "Enable HTTPS"
 msgstr "TOTP'yi Etkinleştir"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114
+msgid "Enable Proxy Cache"
+msgstr ""
+
 #: src/components/Notification/notifications.ts:25 src/language/constants.ts:54
 #, fuzzy
 msgid "Enable Remote Site Error"
@@ -1639,7 +1690,7 @@ msgstr "Sertifika bilgileri alınamadı"
 msgid "Failed to get certificate information"
 msgstr "Sertifika bilgileri alınamadı"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:56
+#: src/views/dashboard/components/ParamsOptimization.vue:61
 #, fuzzy
 msgid "Failed to get Nginx performance settings"
 msgstr "Sertifika bilgileri alınamadı"
@@ -1708,7 +1759,7 @@ msgstr ""
 msgid "Failed to revoke certificate"
 msgstr "Sertifika alınamadı"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:126
+#: src/views/dashboard/components/ParamsOptimization.vue:90
 #, fuzzy
 msgid "Failed to save Nginx performance settings"
 msgstr "Sertifika bilgileri alınamadı"
@@ -1839,15 +1890,15 @@ msgstr "Sertifika alınıyor, lütfen bekleyin..."
 msgid "Github Proxy"
 msgstr "Github Proxy"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:221
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67
 msgid "GZIP Compression"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:247
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:87
 msgid "GZIP Compression Level"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:233
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:80
 msgid "GZIP Min Length"
 msgstr ""
 
@@ -1951,6 +2002,10 @@ msgstr "İçe Aktar"
 msgid "Import Certificate"
 msgstr "Sertifika İçe Aktar"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176
+msgid "Inactive Time"
+msgstr ""
+
 #: src/views/dashboard/components/ProcessDistributionCard.vue:54
 msgid ""
 "Includes master process, worker processes, cache processes, and other Nginx "
@@ -2105,17 +2160,13 @@ msgstr "Düzenleyen: %{issuer}"
 msgid "Jwt Secret"
 msgstr "Jwt Secret"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:242
-msgid "KB"
-msgstr ""
-
 #: src/views/preference/components/RecoveryCodes.vue:74
 msgid ""
 "Keep your recovery codes as safe as your password. We recommend saving them "
 "with a password manager."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:206
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:60
 msgid "Keepalive Timeout"
 msgstr ""
 
@@ -2205,6 +2256,24 @@ msgstr "Ayarlar'dan yükle"
 msgid "Load successfully"
 msgstr "Başarıyla yüklendi"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313
+#, fuzzy
+msgid "Loader Files"
+msgstr "Dosya Oluştur"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308
+#, fuzzy
+msgid "Loader Settings"
+msgstr "Ayarlar'dan yükle"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323
+msgid "Loader Sleep"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348
+msgid "Loader Threshold"
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:178
 msgid "Loading data..."
 msgstr ""
@@ -2313,7 +2382,22 @@ msgstr "Kullanıcıları Yönet"
 msgid "Managed Certificate"
 msgstr "Yönetilen Sertifika"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:179
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251
+#, fuzzy
+msgid "Manager Files"
+msgstr "Siteleri Yönet"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261
+#, fuzzy
+msgid "Manager Sleep"
+msgstr "Siteleri Yönet"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286
+#, fuzzy
+msgid "Manager Threshold"
+msgstr "Akışları Yönet"
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:32
 msgid "Manual"
 msgstr ""
 
@@ -2349,11 +2433,15 @@ msgstr "Mevcut sürüm"
 msgid "Max Requests Per Second"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:260
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199
+msgid "Maximum Cache Size"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:100
 msgid "Maximum client request body size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:195
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:49
 #, fuzzy
 msgid "Maximum number of concurrent connections"
 msgstr "Mevcut sürüm"
@@ -2363,6 +2451,10 @@ msgstr "Mevcut sürüm"
 msgid "Maximum number of connections per worker process"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201
+msgid "Maximum total size of the cache"
+msgstr ""
+
 #: src/views/dashboard/components/PerformanceTablesCard.vue:195
 msgid "Maximum worker process number:"
 msgstr ""
@@ -2382,10 +2474,18 @@ msgstr "Bellek ve Depolama"
 msgid "Memory Usage (RSS)"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:234
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81
 msgid "Minimum file size for compression"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224
+msgid "Minimum Free Space"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226
+msgid "Minimum free space in the cache directory"
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:29
 #, fuzzy
 msgid "Minutes"
@@ -2672,8 +2772,8 @@ msgid ""
 msgstr "Nginx Yapılandırma Ayrıştırma Hatası"
 
 #: src/components/ChatGPT/ChatGPT.vue:374
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
 #: src/components/Notification/Notification.vue:133
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
@@ -2783,10 +2883,18 @@ msgstr "Bildirimler"
 msgid "Notifier not found"
 msgstr "Dosya bulunamadı"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:173
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26
 msgid "Number of concurrent worker processes, auto sets to CPU core count"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315
+msgid "Number of files processed by cache loader at once"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253
+msgid "Number of files processed by cache manager at once"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:129
 #: src/composables/usePerformanceMetrics.ts:169
 #: src/views/dashboard/components/PerformanceTablesCard.vue:120
@@ -2818,12 +2926,13 @@ msgstr ""
 "OCSP Must Staple, Firefox kullanarak ilk erişimde bazı kullanıcılar için "
 "hatalara neden olabilir."
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:227
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165
 #, fuzzy
 msgid "Off"
 msgstr "Çevrimdışı"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:56
@@ -2857,7 +2966,8 @@ msgstr "Tamam"
 msgid "OK"
 msgstr "Tamam"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:226
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164
 msgid "On"
 msgstr ""
 
@@ -2866,7 +2976,7 @@ msgstr ""
 msgid "Once the verification is complete, the records will be removed."
 msgstr "Doğrulama tamamlandıktan sonra kayıtlar kaldırılacaktır."
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:89
 #: src/views/dashboard/Environments.vue:100
@@ -2884,14 +2994,6 @@ msgstr ""
 msgid "OpenAI"
 msgstr "OpenAI"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:164
-msgid "Optimize Nginx Performance"
-msgstr ""
-
-#: src/views/dashboard/components/PerformanceOptimization.vue:158
-msgid "Optimize Performance"
-msgstr ""
-
 #: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:231
 #, fuzzy
 msgid "Or"
@@ -2955,6 +3057,11 @@ msgstr "Siteleri Yönet"
 msgid "Params"
 msgstr "Parametreler"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:109
+#: src/views/dashboard/components/ParamsOptimization.vue:115
+msgid "Params Optimization"
+msgstr ""
+
 #: src/views/preference/components/Passkey.vue:59
 #, fuzzy
 msgid "Passkey"
@@ -3016,11 +3123,16 @@ msgstr "Uygula"
 msgid "Perform core upgrade error"
 msgstr "Çekirdek yükseltme hatası gerçekleştirin"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:121
+#, fuzzy
+msgid "Performance"
+msgstr "Uygula"
+
 #: src/views/dashboard/NginxDashBoard.vue:185
 msgid "Performance Metrics"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:122
+#: src/views/dashboard/components/ParamsOptimization.vue:86
 #, fuzzy
 msgid "Performance settings saved successfully"
 msgstr "Başarıyla devre dışı bırakıldı"
@@ -3363,7 +3475,7 @@ msgstr "Yayın Notu"
 msgid "Reload"
 msgstr "Tekrar yükle"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:138
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:139
 #: src/views/environments/group/columns.ts:24
 #: src/views/environments/group/EnvGroup.vue:37
 #: src/views/environments/list/Environment.vue:120
@@ -3392,7 +3504,7 @@ msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 msgid "Reload Remote Nginx Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:86
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:87
 msgid "Reload request failed, please check your network connection"
 msgstr ""
 
@@ -3579,7 +3691,7 @@ msgstr ""
 msgid "Restart"
 msgstr "Yeniden başlat"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:150
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:151
 #: src/views/environments/list/Environment.vue:141
 #: src/views/environments/list/Environment.vue:149
 #, fuzzy
@@ -3608,7 +3720,7 @@ msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 msgid "Restart Remote Nginx Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:106
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:107
 msgid "Restart request failed, please check your network connection"
 msgstr ""
 
@@ -3783,10 +3895,6 @@ msgstr "Hesabı uygulamaya eklemek için QR kodunu cep telefonunuzla tarayın."
 msgid "SDK"
 msgstr "SDK"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:216
-msgid "seconds"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 #, fuzzy
 msgid "Secret has been copied"
@@ -3831,11 +3939,11 @@ msgstr "Sunucu Bilgisi"
 msgid "Server Info"
 msgstr "Sunucu Bilgisi"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:277
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:106
 msgid "Server Names Hash Bucket Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:278
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:107
 msgid "Server names hash table size"
 msgstr ""
 
@@ -3894,6 +4002,10 @@ msgid ""
 "com/guide/config-nginx.html for more information"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
+msgid "Shared Memory Zone"
+msgstr ""
+
 #: src/components/SensitiveString/SensitiveString.vue:40
 #, fuzzy
 msgid "Show"
@@ -3957,6 +4069,14 @@ msgstr ""
 msgid "Skip Installation"
 msgstr "Yükle"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325
+msgid "Sleep time between cache loader iterations"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263
+msgid "Sleep time between cache manager iterations"
+msgstr ""
+
 #: src/views/certificate/components/CertificateEditor.vue:213
 #, fuzzy
 msgid "SSL Certificate Content"
@@ -4162,7 +4282,7 @@ msgstr "Senkronizasyon Yapılandırma Hatası"
 msgid "Sync Config Success"
 msgstr "Senkronizasyon Yapılandırması Başarılı"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:124
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:125
 #: src/views/environments/group/EnvGroup.vue:18
 #, fuzzy
 msgid "Sync Nodes"
@@ -4671,6 +4791,10 @@ msgstr "OTP kullanın"
 msgid "Use recovery code"
 msgstr "Kurtarma kodunu kullanın"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158
+msgid "Use Temporary Path"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:333
 #, fuzzy
 msgid "User"
@@ -4829,14 +4953,18 @@ msgid ""
 "codes."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:194
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160
+msgid "Whether to use a temporary path when writing temporary files"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:48
 #, fuzzy
 msgid "Worker Connections"
 msgstr "Mevcut sürüm"
 
 #: src/composables/usePerformanceMetrics.ts:55
 #: src/views/dashboard/components/ConnectionMetricsCard.vue:48
-#: src/views/dashboard/components/PerformanceOptimization.vue:172
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:25
 #: src/views/dashboard/components/ProcessDistributionCard.vue:12
 msgid "Worker Processes"
 msgstr ""
@@ -4861,8 +4989,8 @@ msgstr "Sertifika özel anahtarını diske yazma"
 msgid "Writing certificate to disk"
 msgstr "Sertifikayı diske yazma"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
 #: src/views/preference/AuthSettings.vue:163
 #: src/views/preference/CertSettings.vue:72
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96

+ 183 - 58
app/src/language/vi_VN/app.po

@@ -118,7 +118,7 @@ msgstr "Nâng cao"
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr ""
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:117
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:118
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:419
 msgid "All"
 msgstr ""
@@ -223,7 +223,7 @@ msgstr "Bạn chắc chắn muốn xóa nó "
 msgid "Are you sure you want to recover this item?"
 msgstr "Bạn chắc chắn muốn xoá directive này ?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
 #, fuzzy
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr "Bạn chắc chắn muốn xóa nó "
@@ -242,7 +242,7 @@ msgstr "Bạn chắc chắn muốn xoá directive này ?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Bạn chắc chắn muốn xoá location này ?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
 #, fuzzy
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr "Bạn có chắc chắn muốn xóa tất cả thông báo không ?"
@@ -281,8 +281,8 @@ msgstr ""
 msgid "Author"
 msgstr "Tác giả"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:178
-#: src/views/dashboard/components/PerformanceOptimization.vue:189
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:31
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:43
 msgid "Auto"
 msgstr ""
 
@@ -378,6 +378,10 @@ msgstr "Cơ bản"
 msgid "Basic Mode"
 msgstr "Cơ bản"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119
+msgid "Basic Settings"
+msgstr ""
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:83
 #, fuzzy
 msgid "Batch Actions"
@@ -410,16 +414,45 @@ msgstr "Xây dựng với"
 msgid "CA Dir"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOptimization.vue:124
+msgid "Cache"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178
+msgid "Cache items not accessed within this time will be removed"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350
+msgid "Cache loader processing time threshold"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:139
 #: src/views/dashboard/components/PerformanceTablesCard.vue:94
 msgid "Cache manager processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288
+msgid "Cache manager processing time threshold"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246
+msgid "Cache Manager Settings"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124
+#, fuzzy
+msgid "Cache Path"
+msgstr "Thay đổi chứng chỉ"
+
 #: src/composables/usePerformanceMetrics.ts:57
 #: src/views/dashboard/components/ProcessDistributionCard.vue:14
 msgid "Cache Processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137
+msgid "Cache subdirectory levels structure, e.g. 1:2"
+msgstr ""
+
 #: src/views/preference/CertSettings.vue:19
 msgid "CADir"
 msgstr ""
@@ -644,23 +677,23 @@ msgstr ""
 msgid "Click to copy"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:307
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:120
 msgid "Client Body Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:289
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:113
 msgid "Client Header Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:259
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99
 msgid "Client Max Body Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:308
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:121
 msgid "Client request body buffer size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:290
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:114
 msgid "Client request header buffer size"
 msgstr ""
 
@@ -697,7 +730,7 @@ msgstr ""
 msgid "Compare with Current"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:248
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr ""
 
@@ -749,7 +782,7 @@ msgstr ""
 msgid "Connection lost, please refresh the page."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:207
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61
 msgid "Connection timeout period"
 msgstr ""
 
@@ -908,6 +941,10 @@ msgstr ""
 msgid "Decryption failed"
 msgstr "Mô tả"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150
+msgid "Define shared memory zone name and size, e.g. proxy_cache:10m"
+msgstr ""
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:21
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/certificate/components/RemoveCert.vue:87
@@ -1031,6 +1068,15 @@ msgstr ""
 msgid "Directives"
 msgstr "Directives"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135
+#, fuzzy
+msgid "Directory Levels"
+msgstr "Directives"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127
+msgid "Directory path to store cache files"
+msgstr ""
+
 #: src/views/site/site_edit/components/SiteStatusSegmented.vue:113
 #, fuzzy
 msgid "disable"
@@ -1281,7 +1327,7 @@ msgstr "Đã bật"
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "Không thể bật tự động gia hạn SSL cho %{name}"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:222
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:68
 msgid "Enable compression for content transfer"
 msgstr ""
 
@@ -1294,6 +1340,10 @@ msgstr "Bật không thành công"
 msgid "Enable HTTPS"
 msgstr "Bật TLS"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114
+msgid "Enable Proxy Cache"
+msgstr ""
+
 #: src/components/Notification/notifications.ts:25 src/language/constants.ts:54
 #, fuzzy
 msgid "Enable Remote Site Error"
@@ -1658,7 +1708,7 @@ msgstr "Không thể truy xuất thông tin chứng chỉ"
 msgid "Failed to get certificate information"
 msgstr "Không thể truy xuất thông tin chứng chỉ"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:56
+#: src/views/dashboard/components/ParamsOptimization.vue:61
 #, fuzzy
 msgid "Failed to get Nginx performance settings"
 msgstr "Không thể truy xuất thông tin chứng chỉ"
@@ -1727,7 +1777,7 @@ msgstr ""
 msgid "Failed to revoke certificate"
 msgstr "Nhận chứng chỉ"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:126
+#: src/views/dashboard/components/ParamsOptimization.vue:90
 #, fuzzy
 msgid "Failed to save Nginx performance settings"
 msgstr "Không thể truy xuất thông tin chứng chỉ"
@@ -1859,15 +1909,15 @@ msgstr "Đang lấy chứng chỉ, vui lòng đợi..."
 msgid "Github Proxy"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:221
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67
 msgid "GZIP Compression"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:247
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:87
 msgid "GZIP Compression Level"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:233
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:80
 msgid "GZIP Min Length"
 msgstr ""
 
@@ -1961,6 +2011,10 @@ msgstr "Xuất"
 msgid "Import Certificate"
 msgstr "Chứng chỉ"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176
+msgid "Inactive Time"
+msgstr ""
+
 #: src/views/dashboard/components/ProcessDistributionCard.vue:54
 msgid ""
 "Includes master process, worker processes, cache processes, and other Nginx "
@@ -2119,17 +2173,13 @@ msgstr ""
 msgid "Jwt Secret"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:242
-msgid "KB"
-msgstr ""
-
 #: src/views/preference/components/RecoveryCodes.vue:74
 msgid ""
 "Keep your recovery codes as safe as your password. We recommend saving them "
 "with a password manager."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:206
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:60
 msgid "Keepalive Timeout"
 msgstr ""
 
@@ -2226,6 +2276,23 @@ msgstr ""
 msgid "Load successfully"
 msgstr "Lưu thành công"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313
+#, fuzzy
+msgid "Loader Files"
+msgstr "Ngày tạo"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308
+msgid "Loader Settings"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323
+msgid "Loader Sleep"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348
+msgid "Loader Threshold"
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:178
 msgid "Loading data..."
 msgstr ""
@@ -2325,7 +2392,22 @@ msgstr "Người dùng"
 msgid "Managed Certificate"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:179
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251
+#, fuzzy
+msgid "Manager Files"
+msgstr "Quản lý Website"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261
+#, fuzzy
+msgid "Manager Sleep"
+msgstr "Quản lý Website"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286
+#, fuzzy
+msgid "Manager Threshold"
+msgstr "Quản lý Website"
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:32
 msgid "Manual"
 msgstr ""
 
@@ -2360,11 +2442,15 @@ msgstr "Phiên bản hiện tại"
 msgid "Max Requests Per Second"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:260
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199
+msgid "Maximum Cache Size"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:100
 msgid "Maximum client request body size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:195
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:49
 #, fuzzy
 msgid "Maximum number of concurrent connections"
 msgstr "Phiên bản hiện tại"
@@ -2374,6 +2460,10 @@ msgstr "Phiên bản hiện tại"
 msgid "Maximum number of connections per worker process"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201
+msgid "Maximum total size of the cache"
+msgstr ""
+
 #: src/views/dashboard/components/PerformanceTablesCard.vue:195
 msgid "Maximum worker process number:"
 msgstr ""
@@ -2391,10 +2481,18 @@ msgstr "Memory và Storage"
 msgid "Memory Usage (RSS)"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:234
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81
 msgid "Minimum file size for compression"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224
+msgid "Minimum Free Space"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226
+msgid "Minimum free space in the cache directory"
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:29
 msgid "Minutes"
 msgstr ""
@@ -2662,8 +2760,8 @@ msgid ""
 msgstr "Lỗi phân tích cú pháp cấu hình Nginx"
 
 #: src/components/ChatGPT/ChatGPT.vue:374
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
 #: src/components/Notification/Notification.vue:133
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
@@ -2767,10 +2865,18 @@ msgstr "Thông báo"
 msgid "Notifier not found"
 msgstr "Không tìm thấy tệp tin"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:173
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26
 msgid "Number of concurrent worker processes, auto sets to CPU core count"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315
+msgid "Number of files processed by cache loader at once"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253
+msgid "Number of files processed by cache manager at once"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:129
 #: src/composables/usePerformanceMetrics.ts:169
 #: src/views/dashboard/components/PerformanceTablesCard.vue:120
@@ -2797,12 +2903,13 @@ msgid ""
 "Firefox."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:227
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165
 #, fuzzy
 msgid "Off"
 msgstr "Ngoại tuyến"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:56
@@ -2833,7 +2940,8 @@ msgstr ""
 msgid "OK"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:226
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164
 msgid "On"
 msgstr ""
 
@@ -2841,7 +2949,7 @@ msgstr ""
 msgid "Once the verification is complete, the records will be removed."
 msgstr "Sau khi quá trình xác minh hoàn tất, bản ghi sẽ bị xóa."
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:89
 #: src/views/dashboard/Environments.vue:100
@@ -2857,14 +2965,6 @@ msgstr ""
 msgid "OpenAI"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:164
-msgid "Optimize Nginx Performance"
-msgstr ""
-
-#: src/views/dashboard/components/PerformanceOptimization.vue:158
-msgid "Optimize Performance"
-msgstr ""
-
 #: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:231
 msgid "Or"
 msgstr ""
@@ -2921,6 +3021,11 @@ msgstr "Quản lý Website"
 msgid "Params"
 msgstr "Tham số"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:109
+#: src/views/dashboard/components/ParamsOptimization.vue:115
+msgid "Params Optimization"
+msgstr ""
+
 #: src/views/preference/components/Passkey.vue:59
 msgid "Passkey"
 msgstr ""
@@ -2972,11 +3077,15 @@ msgstr ""
 msgid "Perform core upgrade error"
 msgstr "Nâng cấp core không thành công"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:121
+msgid "Performance"
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:185
 msgid "Performance Metrics"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:122
+#: src/views/dashboard/components/ParamsOptimization.vue:86
 #, fuzzy
 msgid "Performance settings saved successfully"
 msgstr "Đã tắt thành công"
@@ -3277,7 +3386,7 @@ msgstr "Ghi chú phát hành"
 msgid "Reload"
 msgstr "Tải lại"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:138
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:139
 #: src/views/environments/group/columns.ts:24
 #: src/views/environments/group/EnvGroup.vue:37
 #: src/views/environments/list/Environment.vue:120
@@ -3306,7 +3415,7 @@ msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgid "Reload Remote Nginx Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:86
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:87
 msgid "Reload request failed, please check your network connection"
 msgstr ""
 
@@ -3481,7 +3590,7 @@ msgstr ""
 msgid "Restart"
 msgstr "Khởi động lại"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:150
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:151
 #: src/views/environments/list/Environment.vue:141
 #: src/views/environments/list/Environment.vue:149
 #, fuzzy
@@ -3508,7 +3617,7 @@ msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgid "Restart Remote Nginx Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:106
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:107
 msgid "Restart request failed, please check your network connection"
 msgstr ""
 
@@ -3674,10 +3783,6 @@ msgstr ""
 msgid "SDK"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:216
-msgid "seconds"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgstr ""
@@ -3717,11 +3822,11 @@ msgstr "Thông tin máy chủ"
 msgid "Server Info"
 msgstr "Thông tin máy chủ"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:277
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:106
 msgid "Server Names Hash Bucket Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:278
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:107
 msgid "Server names hash table size"
 msgstr ""
 
@@ -3774,6 +3879,10 @@ msgid ""
 "com/guide/config-nginx.html for more information"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
+msgid "Shared Memory Zone"
+msgstr ""
+
 #: src/components/SensitiveString/SensitiveString.vue:40
 msgid "Show"
 msgstr ""
@@ -3833,6 +3942,14 @@ msgstr ""
 msgid "Skip Installation"
 msgstr "Cài đặt"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325
+msgid "Sleep time between cache loader iterations"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263
+msgid "Sleep time between cache manager iterations"
+msgstr ""
+
 #: src/views/certificate/components/CertificateEditor.vue:213
 msgid "SSL Certificate Content"
 msgstr ""
@@ -4025,7 +4142,7 @@ msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgid "Sync Config Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:124
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:125
 #: src/views/environments/group/EnvGroup.vue:18
 msgid "Sync Nodes"
 msgstr ""
@@ -4466,6 +4583,10 @@ msgstr ""
 msgid "Use recovery code"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158
+msgid "Use Temporary Path"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:333
 #, fuzzy
 msgid "User"
@@ -4612,14 +4733,18 @@ msgid ""
 "codes."
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:194
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160
+msgid "Whether to use a temporary path when writing temporary files"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:48
 #, fuzzy
 msgid "Worker Connections"
 msgstr "Phiên bản hiện tại"
 
 #: src/composables/usePerformanceMetrics.ts:55
 #: src/views/dashboard/components/ConnectionMetricsCard.vue:48
-#: src/views/dashboard/components/PerformanceOptimization.vue:172
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:25
 #: src/views/dashboard/components/ProcessDistributionCard.vue:12
 msgid "Worker Processes"
 msgstr ""
@@ -4641,8 +4766,8 @@ msgstr "Ghi Private Key vào disk"
 msgid "Writing certificate to disk"
 msgstr "Ghi chứng chỉ vào disk"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
 #: src/views/preference/AuthSettings.vue:163
 #: src/views/preference/CertSettings.vue:72
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96

+ 200 - 69
app/src/language/zh_CN/app.po

@@ -3,7 +3,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2025-04-11 20:32+0800\n"
+"PO-Revision-Date: 2025-04-12 22:02+0800\n"
 "Last-Translator: 0xJacky <me@jackyu.cn>\n"
 "Language-Team: Chinese (Simplified Han script) <https://weblate.nginxui.com/"
 "projects/nginx-ui/frontend/zh_Hans/>\n"
@@ -118,7 +118,7 @@ msgstr "高级模式"
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr "然后,刷新此页面并再次点击添加 Passkey。"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:117
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:118
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:419
 msgid "All"
 msgstr "全部"
@@ -210,7 +210,7 @@ msgstr "您确定要删除吗?"
 msgid "Are you sure you want to recover this item?"
 msgstr "您确定要恢复这个项目吗?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr "你确定要在以下同步节点上重载 Nginx?"
 
@@ -226,7 +226,7 @@ msgstr "您确定要删除这个项目吗?"
 msgid "Are you sure you want to remove this location?"
 msgstr "您确定要删除这个 Location?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr "你确定要在以下同步节点上重启 Nginx 吗?"
 
@@ -263,8 +263,8 @@ msgstr "认证设置"
 msgid "Author"
 msgstr "作者"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:178
-#: src/views/dashboard/components/PerformanceOptimization.vue:189
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:31
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:43
 msgid "Auto"
 msgstr "自动"
 
@@ -355,6 +355,10 @@ msgstr "基本"
 msgid "Basic Mode"
 msgstr "基本模式"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119
+msgid "Basic Settings"
+msgstr "基本设置"
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:83
 msgid "Batch Actions"
 msgstr "批量操作"
@@ -384,16 +388,44 @@ msgstr "构建基于"
 msgid "CA Dir"
 msgstr "CA Dir"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:124
+msgid "Cache"
+msgstr "缓存"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178
+msgid "Cache items not accessed within this time will be removed"
+msgstr "在此时间内未访问的缓存项将被删除"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350
+msgid "Cache loader processing time threshold"
+msgstr "缓存加载器处理时间阈值"
+
 #: src/composables/usePerformanceMetrics.ts:139
 #: src/views/dashboard/components/PerformanceTablesCard.vue:94
 msgid "Cache manager processes"
 msgstr "缓存管理器进程数"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288
+msgid "Cache manager processing time threshold"
+msgstr "缓存管理器处理时间阈值"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246
+msgid "Cache Manager Settings"
+msgstr "缓存管理器设置"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124
+msgid "Cache Path"
+msgstr "缓存路径"
+
 #: src/composables/usePerformanceMetrics.ts:57
 #: src/views/dashboard/components/ProcessDistributionCard.vue:14
 msgid "Cache Processes"
 msgstr "缓存进程数"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137
+msgid "Cache subdirectory levels structure, e.g. 1:2"
+msgstr "缓存子目录级别结构,如 1:2"
+
 #: src/views/preference/CertSettings.vue:19
 msgid "CADir"
 msgstr "CADir"
@@ -602,23 +634,23 @@ msgstr "单击或拖动备份文件到此区域上传"
 msgid "Click to copy"
 msgstr "点击复制"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:307
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:120
 msgid "Client Body Buffer Size"
 msgstr "客户端请求体缓冲区大小"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:289
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:113
 msgid "Client Header Buffer Size"
 msgstr "客户端请求头缓冲区大小"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:259
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99
 msgid "Client Max Body Size"
 msgstr "客户端最大请求体大小"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:308
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:121
 msgid "Client request body buffer size"
 msgstr "客户端请求体缓冲区大小"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:290
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:114
 msgid "Client request header buffer size"
 msgstr "客户端请求头缓冲区大小"
 
@@ -653,7 +685,7 @@ msgstr "比较选定"
 msgid "Compare with Current"
 msgstr "与当前的比较"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:248
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr "压缩级别,1 为最低,9 为最高"
 
@@ -701,7 +733,7 @@ msgstr "连接错误,尝试重新连接..."
 msgid "Connection lost, please refresh the page."
 msgstr "连接中断,请刷新页面。"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:207
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61
 msgid "Connection timeout period"
 msgstr "连接超时时间"
 
@@ -853,6 +885,10 @@ msgstr "天"
 msgid "Decryption failed"
 msgstr "解密失败"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150
+msgid "Define shared memory zone name and size, e.g. proxy_cache:10m"
+msgstr "定义共享内存区名称和大小,例如 proxy_cache:10m"
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:21
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/certificate/components/RemoveCert.vue:87
@@ -965,6 +1001,14 @@ msgstr "指令 index 超出范围"
 msgid "Directives"
 msgstr "指令"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135
+msgid "Directory Levels"
+msgstr "目录级别"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127
+msgid "Directory path to store cache files"
+msgstr "存储缓存文件的目录路径"
+
 #: src/views/site/site_edit/components/SiteStatusSegmented.vue:113
 msgid "disable"
 msgstr "禁用"
@@ -1186,7 +1230,7 @@ msgstr "二步验证启用成功"
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "启用 %{name} 自动续签失败"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:222
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:68
 msgid "Enable compression for content transfer"
 msgstr "启用内容传输压缩"
 
@@ -1198,6 +1242,10 @@ msgstr "启用失败"
 msgid "Enable HTTPS"
 msgstr "启用 HTTPS"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114
+msgid "Enable Proxy Cache"
+msgstr "启用代理缓存"
+
 #: src/components/Notification/notifications.ts:25 src/language/constants.ts:54
 msgid "Enable Remote Site Error"
 msgstr "启用远程站点错误"
@@ -1517,7 +1565,7 @@ msgstr "生成初始化向量失败:{0}"
 msgid "Failed to get certificate information"
 msgstr "获取证书信息失败"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:56
+#: src/views/dashboard/components/ParamsOptimization.vue:61
 msgid "Failed to get Nginx performance settings"
 msgstr "获取 Nginx 性能参数失败"
 
@@ -1577,7 +1625,7 @@ msgstr "恢复 Nginx UI 文件失败:{0}"
 msgid "Failed to revoke certificate"
 msgstr "证书撤销失败"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:126
+#: src/views/dashboard/components/ParamsOptimization.vue:90
 msgid "Failed to save Nginx performance settings"
 msgstr "保存 Nginx 性能参数失败"
 
@@ -1699,15 +1747,15 @@ msgstr "正在获取证书,请稍等..."
 msgid "Github Proxy"
 msgstr "Github 代理"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:221
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67
 msgid "GZIP Compression"
 msgstr "GZIP压缩"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:247
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:87
 msgid "GZIP Compression Level"
 msgstr "GZIP 压缩级别"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:233
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:80
 msgid "GZIP Min Length"
 msgstr "GZIP 最小长度"
 
@@ -1801,6 +1849,10 @@ msgstr "导入"
 msgid "Import Certificate"
 msgstr "导入证书"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176
+msgid "Inactive Time"
+msgstr "非活动时间"
+
 #: src/views/dashboard/components/ProcessDistributionCard.vue:54
 msgid ""
 "Includes master process, worker processes, cache processes, and other Nginx "
@@ -1949,10 +2001,6 @@ msgstr "颁发者:%{issuer}"
 msgid "Jwt Secret"
 msgstr "Jwt 密钥"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:242
-msgid "KB"
-msgstr "KB"
-
 #: src/views/preference/components/RecoveryCodes.vue:74
 msgid ""
 "Keep your recovery codes as safe as your password. We recommend saving them "
@@ -1960,7 +2008,7 @@ msgid ""
 msgstr ""
 "请像保护密码一样安全地保管您的恢复代码。我们建议使用密码管理器保存它们。"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:206
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:60
 msgid "Keepalive Timeout"
 msgstr "Keepalive 超时"
 
@@ -2047,6 +2095,22 @@ msgstr "从设置中加载"
 msgid "Load successfully"
 msgstr "加载成功"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313
+msgid "Loader Files"
+msgstr "加载器文件"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308
+msgid "Loader Settings"
+msgstr "加载器设置"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323
+msgid "Loader Sleep"
+msgstr "加载器睡眠"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348
+msgid "Loader Threshold"
+msgstr "加载器阈值"
+
 #: src/views/dashboard/NginxDashBoard.vue:178
 msgid "Loading data..."
 msgstr "正在加载数据..."
@@ -2144,7 +2208,19 @@ msgstr "用户管理"
 msgid "Managed Certificate"
 msgstr "托管证书"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:179
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251
+msgid "Manager Files"
+msgstr "管理器文件"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261
+msgid "Manager Sleep"
+msgstr "管理器睡眠"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286
+msgid "Manager Threshold"
+msgstr "管理器阈值"
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:32
 msgid "Manual"
 msgstr "手动"
 
@@ -2178,11 +2254,15 @@ msgstr "最大并发连接数"
 msgid "Max Requests Per Second"
 msgstr "每秒最大请求次数"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:260
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199
+msgid "Maximum Cache Size"
+msgstr "最大缓存大小"
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:100
 msgid "Maximum client request body size"
 msgstr "客户端请求体的最大尺寸"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:195
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:49
 msgid "Maximum number of concurrent connections"
 msgstr "最大并发连接数"
 
@@ -2191,6 +2271,10 @@ msgstr "最大并发连接数"
 msgid "Maximum number of connections per worker process"
 msgstr "每个工作进程的最大连接数"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201
+msgid "Maximum total size of the cache"
+msgstr "缓存的最大总容量"
+
 #: src/views/dashboard/components/PerformanceTablesCard.vue:195
 msgid "Maximum worker process number:"
 msgstr "最大工作进程数:"
@@ -2208,10 +2292,18 @@ msgstr "内存与存储"
 msgid "Memory Usage (RSS)"
 msgstr "内存使用量(RSS)"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:234
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81
 msgid "Minimum file size for compression"
 msgstr "压缩文件的最小尺寸"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224
+msgid "Minimum Free Space"
+msgstr "最小可用空间"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226
+msgid "Minimum free space in the cache directory"
+msgstr "缓存目录中的最小可用空间"
+
 #: src/views/preference/LogrotateSettings.vue:29
 msgid "Minutes"
 msgstr "分钟"
@@ -2460,8 +2552,8 @@ msgid ""
 msgstr "Nginx UI 配置已恢复,几秒钟后将自动重启。"
 
 #: src/components/ChatGPT/ChatGPT.vue:374
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
 #: src/components/Notification/Notification.vue:133
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
@@ -2556,10 +2648,18 @@ msgstr "通知"
 msgid "Notifier not found"
 msgstr "未找到通知程序"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:173
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26
 msgid "Number of concurrent worker processes, auto sets to CPU core count"
 msgstr "并发工作进程数,自动设置为 CPU 内核数"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315
+msgid "Number of files processed by cache loader at once"
+msgstr "缓存加载器一次处理的文件数量"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253
+msgid "Number of files processed by cache manager at once"
+msgstr "缓存管理器一次处理的文件数量"
+
 #: src/composables/usePerformanceMetrics.ts:129
 #: src/composables/usePerformanceMetrics.ts:169
 #: src/views/dashboard/components/PerformanceTablesCard.vue:120
@@ -2585,11 +2685,12 @@ msgid ""
 "Firefox."
 msgstr "某些用户在使用 Firefox 首次访问时,OCSP Must Staple 可能会导致错误。"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:227
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165
 msgid "Off"
 msgstr "关闭"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:56
@@ -2620,7 +2721,8 @@ msgstr "确定"
 msgid "OK"
 msgstr "确定"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:226
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164
 msgid "On"
 msgstr "开启"
 
@@ -2628,7 +2730,7 @@ msgstr "开启"
 msgid "Once the verification is complete, the records will be removed."
 msgstr "一旦验证完成,这些记录将被删除。"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:89
 #: src/views/dashboard/Environments.vue:100
@@ -2644,14 +2746,6 @@ msgstr "只允许使用zip文件"
 msgid "OpenAI"
 msgstr "OpenAI"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:164
-msgid "Optimize Nginx Performance"
-msgstr "优化 Nginx 性能"
-
-#: src/views/dashboard/components/PerformanceOptimization.vue:158
-msgid "Optimize Performance"
-msgstr "性能调优"
-
 #: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:231
 msgid "Or"
 msgstr "或"
@@ -2706,6 +2800,11 @@ msgstr "分页大小"
 msgid "Params"
 msgstr "参数"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:109
+#: src/views/dashboard/components/ParamsOptimization.vue:115
+msgid "Params Optimization"
+msgstr "参数优化"
+
 #: src/views/preference/components/Passkey.vue:59
 msgid "Passkey"
 msgstr "Passkey"
@@ -2758,11 +2857,15 @@ msgstr "执行"
 msgid "Perform core upgrade error"
 msgstr "执行核心升级错误"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:121
+msgid "Performance"
+msgstr "性能"
+
 #: src/views/dashboard/NginxDashBoard.vue:185
 msgid "Performance Metrics"
 msgstr "性能指标"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:122
+#: src/views/dashboard/components/ParamsOptimization.vue:86
 msgid "Performance settings saved successfully"
 msgstr "性能调优参数保存成功"
 
@@ -3046,7 +3149,7 @@ msgstr "发行日志"
 msgid "Reload"
 msgstr "重载"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:138
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:139
 #: src/views/environments/group/columns.ts:24
 #: src/views/environments/group/EnvGroup.vue:37
 #: src/views/environments/list/Environment.vue:120
@@ -3070,7 +3173,7 @@ msgstr "重载远程 Nginx 错误"
 msgid "Reload Remote Nginx Success"
 msgstr "重载远程 Nginx 成功"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:86
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:87
 msgid "Reload request failed, please check your network connection"
 msgstr "重载请求失败,请检查网络连接"
 
@@ -3224,7 +3327,7 @@ msgstr "响应"
 msgid "Restart"
 msgstr "重启"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:150
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:151
 #: src/views/environments/list/Environment.vue:141
 #: src/views/environments/list/Environment.vue:149
 msgid "Restart Nginx"
@@ -3246,7 +3349,7 @@ msgstr "重启远程 Nginx 错误"
 msgid "Restart Remote Nginx Success"
 msgstr "重启远程 Nginx 成功"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:106
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:107
 msgid "Restart request failed, please check your network connection"
 msgstr "重启请求失败,请检查网络连接"
 
@@ -3396,10 +3499,6 @@ msgstr "用手机扫描二维码,将账户添加到应用程序中。"
 msgid "SDK"
 msgstr "SDK"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:216
-msgid "seconds"
-msgstr "秒"
-
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgstr "密钥已复制"
@@ -3438,11 +3537,11 @@ msgstr "服务器"
 msgid "Server Info"
 msgstr "服务器信息"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:277
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:106
 msgid "Server Names Hash Bucket Size"
 msgstr "服务器名称哈希桶大小"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:278
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:107
 msgid "Server names hash table size"
 msgstr "服务器名称哈希表大小"
 
@@ -3482,19 +3581,23 @@ msgstr "使用 HTTP01 challenge provider"
 
 #: src/constants/errors/nginx_log.ts:8
 msgid ""
-"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://nginxui."
-"com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.AccessLogPath is empty, refer to https://"
+"nginxui.com/guide/config-nginx.html for more information"
 msgstr ""
-"Settings.NginxLogSettings.AccessLogPath 为空,更多信息请参阅 https://nginxui."
-"com/guide/config-nginx.html"
+"Settings.NginxLogSettings.AccessLogPath 为空,更多信息请参阅 https://"
+"nginxui.com/guide/config-nginx.html"
 
 #: src/constants/errors/nginx_log.ts:7
 msgid ""
-"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://nginxui."
-"com/guide/config-nginx.html for more information"
+"Settings.NginxLogSettings.ErrorLogPath is empty, refer to https://"
+"nginxui.com/guide/config-nginx.html for more information"
 msgstr ""
-"Settings.NginxLogSettings.ErrorLogPath为空,更多信息请参阅 https://nginxui."
-"com/guide/config-nginx.html"
+"Settings.NginxLogSettings.ErrorLogPath为空,更多信息请参阅 https://"
+"nginxui.com/guide/config-nginx.html"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
+msgid "Shared Memory Zone"
+msgstr "共享内存区"
 
 #: src/components/SensitiveString/SensitiveString.vue:40
 msgid "Show"
@@ -3548,6 +3651,14 @@ msgstr "Sites-enabled 目录不存在"
 msgid "Skip Installation"
 msgstr "跳过安装"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325
+msgid "Sleep time between cache loader iterations"
+msgstr "缓存加载器迭代之间的休眠时间"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263
+msgid "Sleep time between cache manager iterations"
+msgstr "缓存管理器迭代之间的休眠时间"
+
 #: src/views/certificate/components/CertificateEditor.vue:213
 msgid "SSL Certificate Content"
 msgstr "SSL 证书内容"
@@ -3725,7 +3836,7 @@ msgstr "同步配置错误"
 msgid "Sync Config Success"
 msgstr "同步配置成功"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:124
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:125
 #: src/views/environments/group/EnvGroup.vue:18
 msgid "Sync Nodes"
 msgstr "同步节点"
@@ -4157,6 +4268,10 @@ msgstr "使用二步验证码"
 msgid "Use recovery code"
 msgstr "使用恢复代码"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158
+msgid "Use Temporary Path"
+msgstr "使用临时路径"
+
 #: src/components/ChatGPT/ChatGPT.vue:333
 msgid "User"
 msgstr "用户"
@@ -4301,13 +4416,17 @@ msgid ""
 "codes."
 msgstr "当您生成新的恢复代码时,必须下载或打印新的代码。"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:194
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160
+msgid "Whether to use a temporary path when writing temporary files"
+msgstr "写入临时文件时是否使用临时路径"
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:48
 msgid "Worker Connections"
 msgstr "工作进程连接数"
 
 #: src/composables/usePerformanceMetrics.ts:55
 #: src/views/dashboard/components/ConnectionMetricsCard.vue:48
-#: src/views/dashboard/components/PerformanceOptimization.vue:172
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:25
 #: src/views/dashboard/components/ProcessDistributionCard.vue:12
 msgid "Worker Processes"
 msgstr "工作进程"
@@ -4329,8 +4448,8 @@ msgstr "正在将证书私钥写入磁盘"
 msgid "Writing certificate to disk"
 msgstr "正在将证书写入磁盘"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
 #: src/views/preference/AuthSettings.vue:163
 #: src/views/preference/CertSettings.vue:72
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96
@@ -4391,6 +4510,18 @@ msgstr "您的旧代码将不再有效。"
 msgid "Your passkeys"
 msgstr "你的 Passkeys"
 
+#~ msgid "KB"
+#~ msgstr "KB"
+
+#~ msgid "Optimize Nginx Performance"
+#~ msgstr "优化 Nginx 性能"
+
+#~ msgid "Optimize Performance"
+#~ msgstr "性能调优"
+
+#~ msgid "seconds"
+#~ msgstr "秒"
+
 #~ msgid "Access Token"
 #~ msgstr "Access Token"
 
@@ -4468,8 +4599,8 @@ msgstr "你的 Passkeys"
 #~ msgstr "请将远程 Nginx UI 升级到最新版本"
 
 #~ msgid ""
-#~ "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: "
-#~ "%{resp}"
+#~ "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: %"
+#~ "{resp}"
 #~ msgstr ""
 #~ "将 %{env_name} 上的 %{orig_path} 重命名为 %{new_path} 失败,响应:%{resp}"
 

+ 186 - 58
app/src/language/zh_TW/app.po

@@ -122,7 +122,7 @@ msgstr "進階模式"
 msgid "Afterwards, refresh this page and click add passkey again."
 msgstr "然後,重新整理此頁面並再次點選新增通行密鑰。"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:117
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:118
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:419
 msgid "All"
 msgstr "全部"
@@ -214,7 +214,7 @@ msgstr "您確定要刪除嗎?"
 msgid "Are you sure you want to recover this item?"
 msgstr "您確定要恢復此項目嗎?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:131
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
 msgid "Are you sure you want to reload Nginx on the following sync nodes?"
 msgstr "您確定要在以下同步節點上重新載入Nginx嗎?"
 
@@ -230,7 +230,7 @@ msgstr "您確定要刪除此項目嗎?"
 msgid "Are you sure you want to remove this location?"
 msgstr "您確定要刪除此 Location 嗎?"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:143
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
 msgid "Are you sure you want to restart Nginx on the following sync nodes?"
 msgstr "您確定要在以下同步節點上重新啟動Nginx嗎?"
 
@@ -267,8 +267,8 @@ msgstr "認證設定"
 msgid "Author"
 msgstr "作者"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:178
-#: src/views/dashboard/components/PerformanceOptimization.vue:189
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:31
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:43
 msgid "Auto"
 msgstr "自動"
 
@@ -359,6 +359,11 @@ msgstr "基本"
 msgid "Basic Mode"
 msgstr "基本模式"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:119
+#, fuzzy
+msgid "Basic Settings"
+msgstr "多重要素驗證設定"
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:83
 msgid "Batch Actions"
 msgstr "批次操作"
@@ -388,16 +393,45 @@ msgstr "構建基於"
 msgid "CA Dir"
 msgstr "CA Dir"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:124
+msgid "Cache"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:178
+msgid "Cache items not accessed within this time will be removed"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:350
+msgid "Cache loader processing time threshold"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:139
 #: src/views/dashboard/components/PerformanceTablesCard.vue:94
 msgid "Cache manager processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:288
+msgid "Cache manager processing time threshold"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:246
+msgid "Cache Manager Settings"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:124
+#, fuzzy
+msgid "Cache Path"
+msgstr "變更後路徑"
+
 #: src/composables/usePerformanceMetrics.ts:57
 #: src/views/dashboard/components/ProcessDistributionCard.vue:14
 msgid "Cache Processes"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:137
+msgid "Cache subdirectory levels structure, e.g. 1:2"
+msgstr ""
+
 #: src/views/preference/CertSettings.vue:19
 msgid "CADir"
 msgstr "CADir"
@@ -608,23 +642,23 @@ msgstr "點擊或拖曳備份檔案至此區域上傳"
 msgid "Click to copy"
 msgstr "點擊複製"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:307
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:120
 msgid "Client Body Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:289
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:113
 msgid "Client Header Buffer Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:259
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:99
 msgid "Client Max Body Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:308
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:121
 msgid "Client request body buffer size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:290
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:114
 msgid "Client request header buffer size"
 msgstr ""
 
@@ -659,7 +693,7 @@ msgstr "比較選定"
 msgid "Compare with Current"
 msgstr "與當前比較"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:248
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:88
 msgid "Compression level, 1 is lowest, 9 is highest"
 msgstr ""
 
@@ -708,7 +742,7 @@ msgstr ""
 msgid "Connection lost, please refresh the page."
 msgstr "連接丟失,請重新整理。"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:207
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:61
 msgid "Connection timeout period"
 msgstr ""
 
@@ -861,6 +895,10 @@ msgstr "天"
 msgid "Decryption failed"
 msgstr "解密失敗"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:150
+msgid "Define shared memory zone name and size, e.g. proxy_cache:10m"
+msgstr ""
+
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:21
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/certificate/components/RemoveCert.vue:87
@@ -974,6 +1012,15 @@ msgstr "指令索引超出範圍"
 msgid "Directives"
 msgstr "指令"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:135
+#, fuzzy
+msgid "Directory Levels"
+msgstr "指令"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:127
+msgid "Directory path to store cache files"
+msgstr ""
+
 #: src/views/site/site_edit/components/SiteStatusSegmented.vue:113
 msgid "disable"
 msgstr "禁用"
@@ -1195,7 +1242,7 @@ msgstr "啟用多因素身份驗證成功"
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "啟用 %{name} 自動續簽失敗"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:222
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:68
 msgid "Enable compression for content transfer"
 msgstr ""
 
@@ -1207,6 +1254,10 @@ msgstr "啟用失敗"
 msgid "Enable HTTPS"
 msgstr "啟用 HTTPS"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:114
+msgid "Enable Proxy Cache"
+msgstr ""
+
 #: src/components/Notification/notifications.ts:25 src/language/constants.ts:54
 msgid "Enable Remote Site Error"
 msgstr "啟用遠端站點錯誤"
@@ -1527,7 +1578,7 @@ msgstr "無法生成初始化向量:{0}"
 msgid "Failed to get certificate information"
 msgstr "取得憑證資訊失敗"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:56
+#: src/views/dashboard/components/ParamsOptimization.vue:61
 #, fuzzy
 msgid "Failed to get Nginx performance settings"
 msgstr "取得憑證資訊失敗"
@@ -1590,7 +1641,7 @@ msgstr "無法恢復Nginx UI文件:{0}"
 msgid "Failed to revoke certificate"
 msgstr "獲取憑證失敗"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:126
+#: src/views/dashboard/components/ParamsOptimization.vue:90
 #, fuzzy
 msgid "Failed to save Nginx performance settings"
 msgstr "取得憑證資訊失敗"
@@ -1714,15 +1765,15 @@ msgstr "正在取得憑證,請稍候..."
 msgid "Github Proxy"
 msgstr "Github 代理"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:221
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:67
 msgid "GZIP Compression"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:247
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:87
 msgid "GZIP Compression Level"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:233
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:80
 msgid "GZIP Min Length"
 msgstr ""
 
@@ -1816,6 +1867,10 @@ msgstr "導入"
 msgid "Import Certificate"
 msgstr "導入憑證"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:176
+msgid "Inactive Time"
+msgstr ""
+
 #: src/views/dashboard/components/ProcessDistributionCard.vue:54
 msgid ""
 "Includes master process, worker processes, cache processes, and other Nginx "
@@ -1964,10 +2019,6 @@ msgstr "發行者:%{issuer}"
 msgid "Jwt Secret"
 msgstr "Jwt Secret"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:242
-msgid "KB"
-msgstr ""
-
 #: src/views/preference/components/RecoveryCodes.vue:74
 msgid ""
 "Keep your recovery codes as safe as your password. We recommend saving them "
@@ -1975,7 +2026,7 @@ msgid ""
 msgstr ""
 "請將您的復原代碼與密碼同樣妥善保管。我們建議使用密碼管理工具來儲存它們。"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:206
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:60
 msgid "Keepalive Timeout"
 msgstr ""
 
@@ -2063,6 +2114,24 @@ msgstr "從設置加載"
 msgid "Load successfully"
 msgstr "加載成功"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:313
+#, fuzzy
+msgid "Loader Files"
+msgstr "創建檔案"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:308
+#, fuzzy
+msgid "Loader Settings"
+msgstr "從設置加載"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:323
+msgid "Loader Sleep"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:348
+msgid "Loader Threshold"
+msgstr ""
+
 #: src/views/dashboard/NginxDashBoard.vue:178
 msgid "Loading data..."
 msgstr ""
@@ -2159,7 +2228,22 @@ msgstr "管理使用者"
 msgid "Managed Certificate"
 msgstr "受管理的憑證"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:179
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:251
+#, fuzzy
+msgid "Manager Files"
+msgstr "管理網站"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:261
+#, fuzzy
+msgid "Manager Sleep"
+msgstr "管理網站"
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:286
+#, fuzzy
+msgid "Manager Threshold"
+msgstr "管理 Stream"
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:32
 msgid "Manual"
 msgstr ""
 
@@ -2194,11 +2278,15 @@ msgstr "當前內容"
 msgid "Max Requests Per Second"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:260
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:199
+msgid "Maximum Cache Size"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:100
 msgid "Maximum client request body size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:195
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:49
 #, fuzzy
 msgid "Maximum number of concurrent connections"
 msgstr "當前內容"
@@ -2208,6 +2296,10 @@ msgstr "當前內容"
 msgid "Maximum number of connections per worker process"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:201
+msgid "Maximum total size of the cache"
+msgstr ""
+
 #: src/views/dashboard/components/PerformanceTablesCard.vue:195
 msgid "Maximum worker process number:"
 msgstr ""
@@ -2225,10 +2317,18 @@ msgstr "記憶體與儲存"
 msgid "Memory Usage (RSS)"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:234
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:81
 msgid "Minimum file size for compression"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:224
+msgid "Minimum Free Space"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:226
+msgid "Minimum free space in the cache directory"
+msgstr ""
+
 #: src/views/preference/LogrotateSettings.vue:29
 msgid "Minutes"
 msgstr "分鐘"
@@ -2480,8 +2580,8 @@ msgid ""
 msgstr "Nginx UI 設定已恢復,將在幾秒後自動重新啟動。"
 
 #: src/components/ChatGPT/ChatGPT.vue:374
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:134
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:146
 #: src/components/Notification/Notification.vue:133
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
@@ -2576,10 +2676,18 @@ msgstr "通知"
 msgid "Notifier not found"
 msgstr "通知器未找到"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:173
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:26
 msgid "Number of concurrent worker processes, auto sets to CPU core count"
 msgstr ""
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:315
+msgid "Number of files processed by cache loader at once"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:253
+msgid "Number of files processed by cache manager at once"
+msgstr ""
+
 #: src/composables/usePerformanceMetrics.ts:129
 #: src/composables/usePerformanceMetrics.ts:169
 #: src/views/dashboard/components/PerformanceTablesCard.vue:120
@@ -2605,12 +2713,13 @@ msgid ""
 "Firefox."
 msgstr "OCSP 必須裝訂可能會導致某些用戶在首次使用 Firefox 訪問時出現錯誤。"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:227
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:73
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:165
 #, fuzzy
 msgid "Off"
 msgstr "離線"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:109
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environments/list/envColumns.tsx:56
@@ -2641,7 +2750,8 @@ msgstr "確定"
 msgid "OK"
 msgstr "確定"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:226
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:72
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:164
 msgid "On"
 msgstr ""
 
@@ -2649,7 +2759,7 @@ msgstr ""
 msgid "Once the verification is complete, the records will be removed."
 msgstr "驗證完成後,記錄將被刪除。"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:161
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:162
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:89
 #: src/views/dashboard/Environments.vue:100
@@ -2665,14 +2775,6 @@ msgstr "只允許壓縮檔"
 msgid "OpenAI"
 msgstr "OpenAI"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:164
-msgid "Optimize Nginx Performance"
-msgstr ""
-
-#: src/views/dashboard/components/PerformanceOptimization.vue:158
-msgid "Optimize Performance"
-msgstr ""
-
 #: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:231
 msgid "Or"
 msgstr "或"
@@ -2727,6 +2829,11 @@ msgstr "頁面大小"
 msgid "Params"
 msgstr "參數"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:109
+#: src/views/dashboard/components/ParamsOptimization.vue:115
+msgid "Params Optimization"
+msgstr ""
+
 #: src/views/preference/components/Passkey.vue:59
 msgid "Passkey"
 msgstr "通行密鑰"
@@ -2779,11 +2886,16 @@ msgstr "執行"
 msgid "Perform core upgrade error"
 msgstr "執行核心升級錯誤"
 
+#: src/views/dashboard/components/ParamsOptimization.vue:121
+#, fuzzy
+msgid "Performance"
+msgstr "執行"
+
 #: src/views/dashboard/NginxDashBoard.vue:185
 msgid "Performance Metrics"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:122
+#: src/views/dashboard/components/ParamsOptimization.vue:86
 #, fuzzy
 msgid "Performance settings saved successfully"
 msgstr "維護模式已成功停用"
@@ -3068,7 +3180,7 @@ msgstr "發行公告"
 msgid "Reload"
 msgstr "重新載入"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:138
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:139
 #: src/views/environments/group/columns.ts:24
 #: src/views/environments/group/EnvGroup.vue:37
 #: src/views/environments/list/Environment.vue:120
@@ -3092,7 +3204,7 @@ msgstr "重新載入遠端Nginx錯誤"
 msgid "Reload Remote Nginx Success"
 msgstr "遠端Nginx重載成功"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:86
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:87
 msgid "Reload request failed, please check your network connection"
 msgstr "重新載入請求失敗,請檢查您的網路連線"
 
@@ -3245,7 +3357,7 @@ msgstr ""
 msgid "Restart"
 msgstr "重新啟動"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:150
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:151
 #: src/views/environments/list/Environment.vue:141
 #: src/views/environments/list/Environment.vue:149
 msgid "Restart Nginx"
@@ -3267,7 +3379,7 @@ msgstr "遠端Nginx重啟錯誤"
 msgid "Restart Remote Nginx Success"
 msgstr "遠端Nginx重啟成功"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:106
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:107
 msgid "Restart request failed, please check your network connection"
 msgstr "重新啟動請求失敗,請檢查您的網路連線"
 
@@ -3419,10 +3531,6 @@ msgstr "用手機掃描二維碼將賬戶添加到應用程序中。"
 msgid "SDK"
 msgstr "SDK"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:216
-msgid "seconds"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgstr "密鑰已複製"
@@ -3461,11 +3569,11 @@ msgstr "伺服器"
 msgid "Server Info"
 msgstr "伺服器資訊"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:277
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:106
 msgid "Server Names Hash Bucket Size"
 msgstr ""
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:278
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:107
 msgid "Server names hash table size"
 msgstr ""
 
@@ -3519,6 +3627,10 @@ msgstr ""
 "Settings.NginxLogSettings.ErrorLogPath 為空,請參考 https://nginxui.com/"
 "guide/config-nginx.html 了解更多資訊"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:147
+msgid "Shared Memory Zone"
+msgstr ""
+
 #: src/components/SensitiveString/SensitiveString.vue:40
 msgid "Show"
 msgstr "顯示"
@@ -3571,6 +3683,14 @@ msgstr "sites-enabled 資料夾不存在"
 msgid "Skip Installation"
 msgstr "跳過安裝"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:325
+msgid "Sleep time between cache loader iterations"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:263
+msgid "Sleep time between cache manager iterations"
+msgstr ""
+
 #: src/views/certificate/components/CertificateEditor.vue:213
 msgid "SSL Certificate Content"
 msgstr "SSL 憑證內容"
@@ -3749,7 +3869,7 @@ msgstr "同步配置錯誤"
 msgid "Sync Config Success"
 msgstr "同步配置成功"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:124
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:125
 #: src/views/environments/group/EnvGroup.vue:18
 msgid "Sync Nodes"
 msgstr "同步節點"
@@ -4182,6 +4302,10 @@ msgstr "使用一次性密碼"
 msgid "Use recovery code"
 msgstr "使用恢復碼"
 
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:158
+msgid "Use Temporary Path"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:333
 msgid "User"
 msgstr "使用者名稱"
@@ -4327,14 +4451,18 @@ msgid ""
 "codes."
 msgstr "當您生成新的復原代碼時,必須下載或列印新的代碼。"
 
-#: src/views/dashboard/components/PerformanceOptimization.vue:194
+#: src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue:160
+msgid "Whether to use a temporary path when writing temporary files"
+msgstr ""
+
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:48
 #, fuzzy
 msgid "Worker Connections"
 msgstr "當前內容"
 
 #: src/composables/usePerformanceMetrics.ts:55
 #: src/views/dashboard/components/ConnectionMetricsCard.vue:48
-#: src/views/dashboard/components/PerformanceOptimization.vue:172
+#: src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue:25
 #: src/views/dashboard/components/ProcessDistributionCard.vue:12
 msgid "Worker Processes"
 msgstr ""
@@ -4356,8 +4484,8 @@ msgstr "將憑證私鑰寫入磁碟"
 msgid "Writing certificate to disk"
 msgstr "將憑證寫入磁碟"
 
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:132
-#: src/components/EnvGroupTabs/EnvGroupTabs.vue:144
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:133
+#: src/components/EnvGroupTabs/EnvGroupTabs.vue:145
 #: src/views/preference/AuthSettings.vue:163
 #: src/views/preference/CertSettings.vue:72
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:96

+ 1 - 1
app/src/views/config/ConfigEditor.vue

@@ -51,7 +51,7 @@ const modifiedAt = ref('')
 const nginxConfigBase = ref('')
 
 const newPath = computed(() => {
-  // 组合路径后解码显示
+  // Decode and display after combining paths
   const path = [nginxConfigBase.value, basePath.value, data.value.name]
     .filter(v => v)
     .join('/')

+ 2 - 2
app/src/views/dashboard/NginxDashBoard.vue

@@ -7,7 +7,7 @@ import { useUserStore } from '@/pinia'
 import { useGlobalStore } from '@/pinia/moudule/global'
 import { ClockCircleOutlined, ReloadOutlined } from '@ant-design/icons-vue'
 import ConnectionMetricsCard from './components/ConnectionMetricsCard.vue'
-import PerformanceOptimization from './components/PerformanceOptimization.vue'
+import ParamsOptimization from './components/ParamsOptimization.vue'
 import PerformanceStatisticsCard from './components/PerformanceStatisticsCard.vue'
 import PerformanceTablesCard from './components/PerformanceTablesCard.vue'
 import ProcessDistributionCard from './components/ProcessDistributionCard.vue'
@@ -184,7 +184,7 @@ onMounted(() => {
         <!-- Top performance metrics card -->
         <ACard class="mb-4" :title="$gettext('Performance Metrics')" :bordered="false">
           <template #extra>
-            <PerformanceOptimization />
+            <ParamsOptimization />
           </template>
           <PerformanceStatisticsCard :nginx-info="nginxInfo" />
         </ACard>

+ 126 - 0
app/src/views/dashboard/components/ParamsOpt/PerformanceConfig.vue

@@ -0,0 +1,126 @@
+<script setup lang="ts">
+import type { NginxConfigInfo } from '@/api/ngx'
+import type { CheckedType } from '@/types'
+import SizeInput from './SizeInput.vue'
+import TimeInput from './TimeInput.vue'
+
+const performanceConfig = defineModel<NginxConfigInfo>({
+  default: reactive({
+    proxy_cache: {},
+  }),
+})
+
+const workerProcessAutoMode = ref<boolean>(true)
+
+function handleWorkerProcessAutoModeChange(checked: CheckedType) {
+  if (checked) {
+    performanceConfig.value.worker_processes = 'auto'
+  }
+}
+</script>
+
+<template>
+  <AForm layout="vertical">
+    <AFormItem
+      :label="$gettext('Worker Processes')"
+      :help="$gettext('Number of concurrent worker processes, auto sets to CPU core count')"
+    >
+      <ASpace>
+        <ASwitch
+          v-model:checked="workerProcessAutoMode"
+          :checked-children="$gettext('Auto')"
+          :un-checked-children="$gettext('Manual')"
+          @change="handleWorkerProcessAutoModeChange"
+        />
+        <AInputNumber
+          v-if="!workerProcessAutoMode"
+          v-model:value="performanceConfig.worker_processes"
+          :min="1"
+          :max="32"
+          style="width: 120px"
+          string-mode
+        />
+        <span v-else>{{ performanceConfig.worker_processes }} ({{ $gettext('Auto') }})</span>
+      </ASpace>
+    </AFormItem>
+
+    <AFormItem
+      :label="$gettext('Worker Connections')"
+      :help="$gettext('Maximum number of concurrent connections')"
+    >
+      <AInputNumber
+        v-model:value="performanceConfig.worker_connections"
+        :min="512"
+        :max="65536"
+        style="width: 120px"
+      />
+    </AFormItem>
+
+    <AFormItem
+      :label="$gettext('Keepalive Timeout')"
+      :help="$gettext('Connection timeout period')"
+    >
+      <TimeInput v-model="performanceConfig.keepalive_timeout" />
+    </AFormItem>
+
+    <AFormItem
+      :label="$gettext('GZIP Compression')"
+      :help="$gettext('Enable compression for content transfer')"
+    >
+      <ASwitch
+        v-model:checked="performanceConfig.gzip"
+        :checked-children="$gettext('On')"
+        :un-checked-children="$gettext('Off')"
+        checked-value="on"
+        un-checked-value="off"
+      />
+    </AFormItem>
+
+    <AFormItem
+      :label="$gettext('GZIP Min Length')"
+      :help="$gettext('Minimum file size for compression')"
+    >
+      <AInputNumber v-model:value="performanceConfig.gzip_min_length" />
+    </AFormItem>
+
+    <AFormItem
+      :label="$gettext('GZIP Compression Level')"
+      :help="$gettext('Compression level, 1 is lowest, 9 is highest')"
+    >
+      <AInputNumber
+        v-model:value="performanceConfig.gzip_comp_level"
+        :min="1"
+        :max="9"
+        style="width: 120px"
+      />
+    </AFormItem>
+
+    <AFormItem
+      :label="$gettext('Client Max Body Size')"
+      :help="$gettext('Maximum client request body size')"
+    >
+      <SizeInput v-model="performanceConfig.client_max_body_size" />
+    </AFormItem>
+
+    <AFormItem
+      :label="$gettext('Server Names Hash Bucket Size')"
+      :help="$gettext('Server names hash table size')"
+    >
+      <SizeInput v-model="performanceConfig.server_names_hash_bucket_size" />
+    </AFormItem>
+
+    <AFormItem
+      :label="$gettext('Client Header Buffer Size')"
+      :help="$gettext('Client request header buffer size')"
+    >
+      <SizeInput v-model="performanceConfig.client_header_buffer_size" />
+    </AFormItem>
+    <!-- Client Body Buffer Size -->
+    <AFormItem
+      :label="$gettext('Client Body Buffer Size')"
+      :help="$gettext('Client request body buffer size')"
+    >
+      <SizeInput v-model="performanceConfig.client_body_buffer_size" />
+    </AFormItem>
+  </AForm>
+</template>

+ 449 - 0
app/src/views/dashboard/components/ParamsOpt/ProxyCacheConfig.vue

@@ -0,0 +1,449 @@
+<script setup lang="ts">
+import type { ProxyCacheConfig } from '@/api/ngx'
+import { reactive } from 'vue'
+
+const value = defineModel<ProxyCacheConfig>({
+  default: reactive({
+    enabled: false,
+    path: '/var/cache/nginx/proxy_cache',
+    levels: '1:2',
+    use_temp_path: 'off',
+    keys_zone: 'proxy_cache:10m',
+    inactive: '60m',
+    max_size: '1g',
+    min_free: '',
+    manager_files: '',
+    manager_sleep: '',
+    manager_threshold: '',
+    loader_files: '',
+    loader_sleep: '',
+    loader_threshold: '',
+    purger: 'off',
+    purger_files: '',
+    purger_sleep: '',
+    purger_threshold: '',
+  }),
+})
+
+const timeUnitOptions = [
+  { value: 'ms', label: 'ms' },
+  { value: 's', label: 's' },
+  { value: 'm', label: 'm' },
+  { value: 'h', label: 'h' },
+  { value: 'd', label: 'd' },
+  { value: 'w', label: 'w' },
+  { value: 'M', label: 'M' },
+  { value: 'y', label: 'y' },
+]
+
+const sizeUnitOptions = [
+  { value: 'k', label: 'K' },
+  { value: 'm', label: 'M' },
+  { value: 'g', label: 'G' },
+]
+
+const timeValues = reactive({
+  inactive: { value: '60', unit: 'm' },
+  manager_sleep: { value: '', unit: 'ms' },
+  manager_threshold: { value: '', unit: 'ms' },
+  loader_sleep: { value: '', unit: 'ms' },
+  loader_threshold: { value: '', unit: 'ms' },
+  purger_sleep: { value: '', unit: 'ms' },
+  purger_threshold: { value: '', unit: 'ms' },
+})
+
+const sizeValues = reactive({
+  max_size: { value: '1', unit: 'g' },
+  min_free: { value: '', unit: 'm' },
+})
+
+function initTimeValues() {
+  const timeFields = ['inactive', 'manager_sleep', 'manager_threshold', 'loader_sleep', 'loader_threshold', 'purger_sleep', 'purger_threshold']
+
+  timeFields.forEach(field => {
+    const fieldValue = value.value[field]
+    if (fieldValue) {
+      const match = fieldValue.match(/^(\d+)([a-z]+)$/i)
+      if (match) {
+        timeValues[field].value = match[1]
+        timeValues[field].unit = match[2]
+      }
+    }
+  })
+}
+
+function initSizeValues() {
+  const sizeFields = ['max_size', 'min_free']
+
+  sizeFields.forEach(field => {
+    const fieldValue = value.value[field]
+    if (fieldValue) {
+      const match = fieldValue.match(/^(\d+)([kmg])$/i)
+      if (match) {
+        sizeValues[field].value = match[1]
+        sizeValues[field].unit = match[2].toLowerCase()
+      }
+    }
+  })
+}
+
+function updateTimeValue(field) {
+  if (timeValues[field].value) {
+    value.value[field] = `${timeValues[field].value}${timeValues[field].unit}`
+  }
+  else {
+    value.value[field] = ''
+  }
+}
+
+function updateSizeValue(field) {
+  if (sizeValues[field].value) {
+    value.value[field] = `${sizeValues[field].value}${sizeValues[field].unit}`
+  }
+  else {
+    value.value[field] = ''
+  }
+}
+
+initTimeValues()
+initSizeValues()
+</script>
+
+<template>
+  <AForm layout="vertical">
+    <AFormItem :label="$gettext('Enable Proxy Cache')" name="enabled">
+      <ASwitch v-model:checked="value.enabled" />
+    </AFormItem>
+
+    <div v-if="value.enabled" class="pt-4">
+      <ADivider>{{ $gettext('Basic Settings') }}</ADivider>
+
+      <ARow :gutter="16">
+        <ACol :span="12">
+          <AFormItem
+            :label="$gettext('Cache Path')"
+            name="path"
+            required
+            :help="$gettext('Directory path to store cache files')"
+          >
+            <AInput v-model:value="value.path" placeholder="/var/cache/nginx/proxy_cache" />
+          </AFormItem>
+        </ACol>
+
+        <ACol :span="12">
+          <AFormItem
+            :label="$gettext('Directory Levels')"
+            name="levels"
+            :help="$gettext('Cache subdirectory levels structure, e.g. 1:2')"
+          >
+            <AInput v-model:value="value.levels" placeholder="1:2" />
+          </AFormItem>
+        </ACol>
+      </ARow>
+
+      <ARow :gutter="16">
+        <ACol :span="12">
+          <AFormItem
+            :label="$gettext('Shared Memory Zone')"
+            name="keys_zone"
+            required
+            :help="$gettext('Define shared memory zone name and size, e.g. proxy_cache:10m')"
+          >
+            <AInput v-model:value="value.keys_zone" placeholder="proxy_cache:10m" />
+          </AFormItem>
+        </ACol>
+
+        <ACol :span="12">
+          <AFormItem
+            :label="$gettext('Use Temporary Path')"
+            name="use_temp_path"
+            :help="$gettext('Whether to use a temporary path when writing temporary files')"
+          >
+            <ASwitch
+              v-model:checked="value.use_temp_path"
+              :checked-children="$gettext('On')"
+              :un-checked-children="$gettext('Off')"
+              checked-value="on"
+              un-checked-value="off"
+            />
+          </AFormItem>
+        </ACol>
+      </ARow>
+
+      <ARow :gutter="16">
+        <ACol :span="12">
+          <AFormItem
+            :label="$gettext('Inactive Time')"
+            name="inactive"
+            :help="$gettext('Cache items not accessed within this time will be removed')"
+          >
+            <AInputGroup compact>
+              <AInput
+                v-model:value="timeValues.inactive.value"
+                style="width: 65%"
+                placeholder="60"
+                @change="updateTimeValue('inactive')"
+              />
+              <ASelect
+                v-model:value="timeValues.inactive.unit"
+                style="width: 35%"
+                :options="timeUnitOptions"
+                @change="updateTimeValue('inactive')"
+              />
+            </AInputGroup>
+          </AFormItem>
+        </ACol>
+
+        <ACol :span="12">
+          <AFormItem
+            :label="$gettext('Maximum Cache Size')"
+            name="max_size"
+            :help="$gettext('Maximum total size of the cache')"
+          >
+            <AInputGroup compact>
+              <AInput
+                v-model:value="sizeValues.max_size.value"
+                style="width: 65%"
+                placeholder="1"
+                @change="updateSizeValue('max_size')"
+              />
+              <ASelect
+                v-model:value="sizeValues.max_size.unit"
+                style="width: 35%"
+                :options="sizeUnitOptions"
+                @change="updateSizeValue('max_size')"
+              />
+            </AInputGroup>
+          </AFormItem>
+        </ACol>
+      </ARow>
+
+      <ARow :gutter="16">
+        <ACol :span="12">
+          <AFormItem
+            :label="$gettext('Minimum Free Space')"
+            name="min_free"
+            :help="$gettext('Minimum free space in the cache directory')"
+          >
+            <AInputGroup compact>
+              <AInput
+                v-model:value="sizeValues.min_free.value"
+                style="width: 65%"
+                placeholder="100"
+                @change="updateSizeValue('min_free')"
+              />
+              <ASelect
+                v-model:value="sizeValues.min_free.unit"
+                style="width: 35%"
+                :options="sizeUnitOptions"
+                @change="updateSizeValue('min_free')"
+              />
+            </AInputGroup>
+          </AFormItem>
+        </ACol>
+      </ARow>
+
+      <ADivider>{{ $gettext('Cache Manager Settings') }}</ADivider>
+
+      <ARow :gutter="16">
+        <ACol :span="12">
+          <AFormItem
+            :label="$gettext('Manager Files')"
+            name="manager_files"
+            :help="$gettext('Number of files processed by cache manager at once')"
+          >
+            <AInput v-model:value="value.manager_files" placeholder="e.g. 100" />
+          </AFormItem>
+        </ACol>
+
+        <ACol :span="12">
+          <AFormItem
+            :label="$gettext('Manager Sleep')"
+            name="manager_sleep"
+            :help="$gettext('Sleep time between cache manager iterations')"
+          >
+            <AInputGroup compact>
+              <AInput
+                v-model:value="timeValues.manager_sleep.value"
+                style="width: 65%"
+                placeholder="50"
+                @change="updateTimeValue('manager_sleep')"
+              />
+              <ASelect
+                v-model:value="timeValues.manager_sleep.unit"
+                style="width: 35%"
+                :options="timeUnitOptions"
+                @change="updateTimeValue('manager_sleep')"
+              />
+            </AInputGroup>
+          </AFormItem>
+        </ACol>
+      </ARow>
+
+      <ARow :gutter="16">
+        <ACol :span="12">
+          <AFormItem
+            :label="$gettext('Manager Threshold')"
+            name="manager_threshold"
+            :help="$gettext('Cache manager processing time threshold')"
+          >
+            <AInputGroup compact>
+              <AInput
+                v-model:value="timeValues.manager_threshold.value"
+                style="width: 65%"
+                placeholder="200"
+                @change="updateTimeValue('manager_threshold')"
+              />
+              <ASelect
+                v-model:value="timeValues.manager_threshold.unit"
+                style="width: 35%"
+                :options="timeUnitOptions"
+                @change="updateTimeValue('manager_threshold')"
+              />
+            </AInputGroup>
+          </AFormItem>
+        </ACol>
+      </ARow>
+
+      <ADivider>{{ $gettext('Loader Settings') }}</ADivider>
+
+      <ARow :gutter="16">
+        <ACol :span="12">
+          <AFormItem
+            :label="$gettext('Loader Files')"
+            name="loader_files"
+            :help="$gettext('Number of files processed by cache loader at once')"
+          >
+            <AInput v-model:value="value.loader_files" placeholder="e.g. 100" />
+          </AFormItem>
+        </ACol>
+
+        <ACol :span="12">
+          <AFormItem
+            :label="$gettext('Loader Sleep')"
+            name="loader_sleep"
+            :help="$gettext('Sleep time between cache loader iterations')"
+          >
+            <AInputGroup compact>
+              <AInput
+                v-model:value="timeValues.loader_sleep.value"
+                style="width: 65%"
+                placeholder="50"
+                @change="updateTimeValue('loader_sleep')"
+              />
+              <ASelect
+                v-model:value="timeValues.loader_sleep.unit"
+                style="width: 35%"
+                :options="timeUnitOptions"
+                @change="updateTimeValue('loader_sleep')"
+              />
+            </AInputGroup>
+          </AFormItem>
+        </ACol>
+      </ARow>
+
+      <ARow :gutter="16">
+        <ACol :span="12">
+          <AFormItem
+            :label="$gettext('Loader Threshold')"
+            name="loader_threshold"
+            :help="$gettext('Cache loader processing time threshold')"
+          >
+            <AInputGroup compact>
+              <AInput
+                v-model:value="timeValues.loader_threshold.value"
+                style="width: 65%"
+                placeholder="200"
+                @change="updateTimeValue('loader_threshold')"
+              />
+              <ASelect
+                v-model:value="timeValues.loader_threshold.unit"
+                style="width: 35%"
+                :options="timeUnitOptions"
+                @change="updateTimeValue('loader_threshold')"
+              />
+            </AInputGroup>
+          </AFormItem>
+        </ACol>
+      </ARow>
+
+      <!-- <ADivider>{{ $gettext('Purger Settings') }}</ADivider>
+
+      <ARow :gutter="16">
+        <ACol :span="12">
+          <AFormItem
+            :label="$gettext('Enable Purger')"
+            name="purger"
+            :help="$gettext('Whether to enable the cache purger')"
+          >
+            <ASwitch
+              v-model:checked="value.purger"
+              :checked-children="$gettext('On')"
+              :un-checked-children="$gettext('Off')"
+              checked-value="on"
+              un-checked-value="off"
+            />
+          </AFormItem>
+        </ACol>
+
+        <ACol :span="12">
+          <AFormItem
+            :label="$gettext('Purger Files')"
+            name="purger_files"
+            :help="$gettext('Number of files processed by purger at once')"
+          >
+            <AInput v-model:value="value.purger_files" placeholder="e.g. 10" />
+          </AFormItem>
+        </ACol>
+      </ARow>
+
+      <ARow :gutter="16">
+        <ACol :span="12">
+          <AFormItem
+            :label="$gettext('Purger Sleep')"
+            name="purger_sleep"
+            :help="$gettext('Sleep time between purger iterations')"
+          >
+            <AInputGroup compact>
+              <AInput
+                v-model:value="timeValues.purger_sleep.value"
+                style="width: 65%"
+                placeholder="50"
+                @change="updateTimeValue('purger_sleep')"
+              />
+              <ASelect
+                v-model:value="timeValues.purger_sleep.unit"
+                style="width: 35%"
+                :options="timeUnitOptions"
+                @change="updateTimeValue('purger_sleep')"
+              />
+            </AInputGroup>
+          </AFormItem>
+        </ACol>
+
+        <ACol :span="12">
+          <AFormItem
+            :label="$gettext('Purger Threshold')"
+            name="purger_threshold"
+            :help="$gettext('Purger processing time threshold')"
+          >
+            <AInputGroup compact>
+              <AInput
+                v-model:value="timeValues.purger_threshold.value"
+                style="width: 65%"
+                placeholder="200"
+                @change="updateTimeValue('purger_threshold')"
+              />
+              <ASelect
+                v-model:value="timeValues.purger_threshold.unit"
+                style="width: 35%"
+                :options="timeUnitOptions"
+                @change="updateTimeValue('purger_threshold')"
+              />
+            </AInputGroup>
+          </AFormItem>
+        </ACol>
+      </ARow> -->
+    </div>
+  </AForm>
+</template>

+ 44 - 0
app/src/views/dashboard/components/ParamsOpt/SizeInput.vue

@@ -0,0 +1,44 @@
+<script setup lang="ts">
+const modelValue = defineModel<string>()
+
+const sizeUnitOptions = [
+  { value: 'k', label: 'K' },
+  { value: 'm', label: 'M' },
+  { value: 'g', label: 'G' },
+]
+
+const numberValue = ref<number>(0)
+const unitValue = ref<string>('m')
+
+watch(modelValue, val => {
+  if (!val) {
+    numberValue.value = 0
+    unitValue.value = 'm'
+    return
+  }
+  const match = val.match(/^(\d+)([kmg])$/)
+  if (match) {
+    numberValue.value = Number.parseInt(match[1])
+    unitValue.value = match[2]
+  }
+}, { immediate: true })
+
+watch(() => [numberValue.value, unitValue.value], () => {
+  modelValue.value = `${numberValue.value}${unitValue.value}`
+})
+</script>
+
+<template>
+  <AInputGroup compact>
+    <AInputNumber
+      v-model:value="numberValue"
+      :step="1"
+      class="w-30"
+    />
+    <ASelect v-model:value="unitValue" class="w-15">
+      <ASelectOption v-for="unit in sizeUnitOptions" :key="unit.value" :value="unit.value">
+        {{ unit.label }}
+      </ASelectOption>
+    </ASelect>
+  </AInputGroup>
+</template>

+ 53 - 0
app/src/views/dashboard/components/ParamsOpt/TimeInput.vue

@@ -0,0 +1,53 @@
+<script setup lang="ts">
+const modelValue = defineModel<string>()
+
+const timeUnitOptions = [
+  { value: 'ms', label: 'ms' },
+  { value: 's', label: 's' },
+  { value: 'm', label: 'm' },
+  { value: 'h', label: 'h' },
+  { value: 'd', label: 'd' },
+  { value: 'w', label: 'w' },
+  { value: 'M', label: 'M' },
+  { value: 'y', label: 'y' },
+]
+
+const numberValue = ref<number>(0)
+const unitValue = ref<string>('s')
+
+watch(modelValue, val => {
+  if (!val) {
+    numberValue.value = 0
+    unitValue.value = 's'
+    return
+  }
+  const match = val.match(/^(\d+)([msdhwMy])$/)
+  if (match) {
+    numberValue.value = Number.parseInt(match[1])
+    unitValue.value = match[2]
+  }
+}, { immediate: true })
+
+watch(() => [numberValue.value, unitValue.value], () => {
+  if (numberValue.value === 0) {
+    modelValue.value = ''
+    return
+  }
+  modelValue.value = `${numberValue.value}${unitValue.value}`
+})
+</script>
+
+<template>
+  <AInputGroup compact>
+    <AInputNumber
+      v-model:value="numberValue"
+      :step="1"
+      class="w-30"
+    />
+    <ASelect v-model:value="unitValue" class="w-15">
+      <ASelectOption v-for="unit in timeUnitOptions" :key="unit.value" :value="unit.value">
+        {{ unit.label }}
+      </ASelectOption>
+    </ASelect>
+  </AInputGroup>
+</template>

+ 130 - 0
app/src/views/dashboard/components/ParamsOptimization.vue

@@ -0,0 +1,130 @@
+<script setup lang="ts">
+import type { NginxConfigInfo, NginxPerfOpt } from '@/api/ngx'
+import ngx from '@/api/ngx'
+import {
+  SettingOutlined,
+} from '@ant-design/icons-vue'
+import { message } from 'ant-design-vue'
+import PerformanceConfig from './ParamsOpt/PerformanceConfig.vue'
+import ProxyCacheConfig from './ParamsOpt/ProxyCacheConfig.vue'
+// Performance settings modal
+const visible = ref(false)
+const loading = ref(false)
+const data = ref<NginxConfigInfo>({
+  worker_processes: '4',
+  worker_connections: 1024,
+  process_mode: 'manual',
+  keepalive_timeout: '65s',
+  gzip: 'off',
+  gzip_min_length: 1,
+  gzip_comp_level: 1,
+  client_max_body_size: '1m',
+  server_names_hash_bucket_size: '32k',
+  client_header_buffer_size: '1k',
+  client_body_buffer_size: '8k',
+  proxy_cache: {
+    enabled: false,
+    path: '/var/cache/nginx/proxy_cache',
+    levels: '1:2',
+    use_temp_path: 'off',
+    keys_zone: 'proxy_cache:10m',
+    inactive: '60m',
+    max_size: '1g',
+    min_free: '',
+    manager_files: '',
+    manager_sleep: '',
+    manager_threshold: '',
+    loader_files: '',
+    loader_sleep: '',
+    loader_threshold: '',
+    purger: 'off',
+    purger_files: '',
+    purger_sleep: '',
+    purger_threshold: '',
+  },
+})
+
+// Open modal and load performance settings
+async function openPerformanceModal() {
+  visible.value = true
+  await fetchPerformanceSettings()
+}
+
+// Load performance settings
+async function fetchPerformanceSettings() {
+  loading.value = true
+  try {
+    data.value = await ngx.get_performance()
+  }
+  catch (error) {
+    console.error('Failed to get Nginx performance settings:', error)
+    message.error($gettext('Failed to get Nginx performance settings'))
+  }
+  finally {
+    loading.value = false
+  }
+}
+
+// Save performance settings
+async function savePerformanceSettings() {
+  loading.value = true
+  try {
+    const params: NginxPerfOpt = {
+      worker_processes: data.value.process_mode === 'auto' ? 'auto' : data.value.worker_processes.toString(),
+      worker_connections: data.value.worker_connections.toString(),
+      keepalive_timeout: data.value.keepalive_timeout.toString(),
+      gzip: data.value.gzip,
+      gzip_min_length: data.value.gzip_min_length.toString(),
+      gzip_comp_level: data.value.gzip_comp_level.toString(),
+      client_max_body_size: data.value.client_max_body_size,
+      server_names_hash_bucket_size: data.value.server_names_hash_bucket_size.toString(),
+      client_header_buffer_size: data.value.client_header_buffer_size,
+      client_body_buffer_size: data.value.client_body_buffer_size,
+      proxy_cache: data.value.proxy_cache,
+    }
+    await ngx.update_performance(params)
+    message.success($gettext('Performance settings saved successfully'))
+  }
+  catch (error) {
+    console.error('Failed to save Nginx performance settings:', error)
+    message.error($gettext('Failed to save Nginx performance settings'))
+  }
+  finally {
+    loading.value = false
+  }
+}
+</script>
+
+<template>
+  <div>
+    <!-- Performance Optimization Button -->
+    <AButton
+      type="link"
+      size="small"
+      @click="openPerformanceModal"
+    >
+      <template #icon>
+        <SettingOutlined />
+      </template>
+      {{ $gettext('Params Optimization') }}
+    </AButton>
+
+    <!-- Performance Optimization Modal -->
+    <AModal
+      v-model:open="visible"
+      :title="$gettext('Params Optimization')"
+      :mask-closable="false"
+      :ok-button-props="{ loading }"
+      @ok="savePerformanceSettings"
+    >
+      <ATabs>
+        <ATabPane key="performance" :tab="$gettext('Performance')">
+          <PerformanceConfig v-model="data" />
+        </ATabPane>
+        <ATabPane key="cache" :tab="$gettext('Cache')">
+          <ProxyCacheConfig v-model="data.proxy_cache" />
+        </ATabPane>
+      </ATabs>
+    </AModal>
+  </div>
+</template>

+ 0 - 327
app/src/views/dashboard/components/PerformanceOptimization.vue

@@ -1,327 +0,0 @@
-<script setup lang="ts">
-import type { NginxConfigInfo, NginxPerfOpt } from '@/api/ngx'
-import type { CheckedType } from '@/types'
-import ngx from '@/api/ngx'
-import {
-  SettingOutlined,
-} from '@ant-design/icons-vue'
-import { message } from 'ant-design-vue'
-
-// Size units
-const sizeUnits = ['k', 'm', 'g']
-
-// Size values and units
-const maxBodySizeValue = ref<number>(1)
-const maxBodySizeUnit = ref<string>('m')
-const headerBufferSizeValue = ref<number>(1)
-const headerBufferSizeUnit = ref<string>('k')
-const bodyBufferSizeValue = ref<number>(8)
-const bodyBufferSizeUnit = ref<string>('k')
-
-// Performance settings modal
-const visible = ref(false)
-const loading = ref(false)
-const performanceConfig = ref<NginxConfigInfo>({
-  worker_processes: 1,
-  worker_connections: 1024,
-  process_mode: 'manual',
-  keepalive_timeout: 65,
-  gzip: 'off',
-  gzip_min_length: 1,
-  gzip_comp_level: 1,
-  client_max_body_size: '1m',
-  server_names_hash_bucket_size: 32,
-  client_header_buffer_size: '1k',
-  client_body_buffer_size: '8k',
-})
-
-// Open modal and load performance settings
-async function openPerformanceModal() {
-  visible.value = true
-  await fetchPerformanceSettings()
-}
-
-// Load performance settings
-async function fetchPerformanceSettings() {
-  loading.value = true
-  try {
-    const data = await ngx.get_performance()
-    performanceConfig.value = data
-
-    // Parse size values and units
-    parseSizeValues()
-  }
-  catch (error) {
-    console.error('Failed to get Nginx performance settings:', error)
-    message.error($gettext('Failed to get Nginx performance settings'))
-  }
-  finally {
-    loading.value = false
-  }
-}
-
-// Parse size values from config
-function parseSizeValues() {
-  // Parse client_max_body_size
-  const maxBodySize = performanceConfig.value.client_max_body_size
-  const maxBodyMatch = maxBodySize.match(/^(\d+)([kmg])?$/i)
-  if (maxBodyMatch) {
-    maxBodySizeValue.value = Number.parseInt(maxBodyMatch[1])
-    maxBodySizeUnit.value = (maxBodyMatch[2] || 'm').toLowerCase()
-  }
-
-  // Parse client_header_buffer_size
-  const headerSize = performanceConfig.value.client_header_buffer_size
-  const headerMatch = headerSize.match(/^(\d+)([kmg])?$/i)
-  if (headerMatch) {
-    headerBufferSizeValue.value = Number.parseInt(headerMatch[1])
-    headerBufferSizeUnit.value = (headerMatch[2] || 'k').toLowerCase()
-  }
-
-  // Parse client_body_buffer_size
-  const bodySize = performanceConfig.value.client_body_buffer_size
-  const bodyMatch = bodySize.match(/^(\d+)([kmg])?$/i)
-  if (bodyMatch) {
-    bodyBufferSizeValue.value = Number.parseInt(bodyMatch[1])
-    bodyBufferSizeUnit.value = (bodyMatch[2] || 'k').toLowerCase()
-  }
-}
-
-// Format size values before saving
-function formatSizeValues() {
-  performanceConfig.value.client_max_body_size = `${maxBodySizeValue.value}${maxBodySizeUnit.value}`
-  performanceConfig.value.client_header_buffer_size = `${headerBufferSizeValue.value}${headerBufferSizeUnit.value}`
-  performanceConfig.value.client_body_buffer_size = `${bodyBufferSizeValue.value}${bodyBufferSizeUnit.value}`
-}
-
-// Save performance settings
-async function savePerformanceSettings() {
-  loading.value = true
-  try {
-    // Format size values
-    formatSizeValues()
-
-    const params: NginxPerfOpt = {
-      worker_processes: performanceConfig.value.process_mode === 'auto' ? 'auto' : performanceConfig.value.worker_processes.toString(),
-      worker_connections: performanceConfig.value.worker_connections.toString(),
-      keepalive_timeout: performanceConfig.value.keepalive_timeout.toString(),
-      gzip: performanceConfig.value.gzip,
-      gzip_min_length: performanceConfig.value.gzip_min_length.toString(),
-      gzip_comp_level: performanceConfig.value.gzip_comp_level.toString(),
-      client_max_body_size: performanceConfig.value.client_max_body_size,
-      server_names_hash_bucket_size: performanceConfig.value.server_names_hash_bucket_size.toString(),
-      client_header_buffer_size: performanceConfig.value.client_header_buffer_size,
-      client_body_buffer_size: performanceConfig.value.client_body_buffer_size,
-    }
-    const data = await ngx.update_performance(params)
-    performanceConfig.value = data
-
-    // Parse the returned values
-    parseSizeValues()
-
-    message.success($gettext('Performance settings saved successfully'))
-  }
-  catch (error) {
-    console.error('Failed to save Nginx performance settings:', error)
-    message.error($gettext('Failed to save Nginx performance settings'))
-  }
-  finally {
-    loading.value = false
-  }
-}
-
-// Toggle worker process mode
-function handleProcessModeChange(checked: CheckedType) {
-  performanceConfig.value.process_mode = checked ? 'auto' : 'manual'
-  if (checked) {
-    performanceConfig.value.worker_processes = navigator.hardwareConcurrency || 4
-  }
-}
-
-// Toggle GZIP compression
-function handleGzipChange(checked: CheckedType) {
-  performanceConfig.value.gzip = checked ? 'on' : 'off'
-}
-</script>
-
-<template>
-  <div>
-    <!-- Performance Optimization Button -->
-    <AButton
-      type="link"
-      size="small"
-      @click="openPerformanceModal"
-    >
-      <template #icon>
-        <SettingOutlined />
-      </template>
-      {{ $gettext('Optimize Performance') }}
-    </AButton>
-
-    <!-- Performance Optimization Modal -->
-    <AModal
-      v-model:open="visible"
-      :title="$gettext('Optimize Nginx Performance')"
-      :mask-closable="false"
-      :ok-button-props="{ loading }"
-      @ok="savePerformanceSettings"
-    >
-      <ASpin :spinning="loading">
-        <AForm layout="vertical">
-          <AFormItem
-            :label="$gettext('Worker Processes')"
-            :help="$gettext('Number of concurrent worker processes, auto sets to CPU core count')"
-          >
-            <ASpace>
-              <ASwitch
-                :checked="performanceConfig.process_mode === 'auto'"
-                :checked-children="$gettext('Auto')"
-                :un-checked-children="$gettext('Manual')"
-                @change="handleProcessModeChange"
-              />
-              <AInputNumber
-                v-if="performanceConfig.process_mode !== 'auto'"
-                v-model:value="performanceConfig.worker_processes"
-                :min="1"
-                :max="32"
-                style="width: 120px"
-              />
-              <span v-else>{{ performanceConfig.worker_processes }} ({{ $gettext('Auto') }})</span>
-            </ASpace>
-          </AFormItem>
-
-          <AFormItem
-            :label="$gettext('Worker Connections')"
-            :help="$gettext('Maximum number of concurrent connections')"
-          >
-            <AInputNumber
-              v-model:value="performanceConfig.worker_connections"
-              :min="512"
-              :max="65536"
-              style="width: 120px"
-            />
-          </AFormItem>
-
-          <AFormItem
-            :label="$gettext('Keepalive Timeout')"
-            :help="$gettext('Connection timeout period')"
-          >
-            <ASpace>
-              <AInputNumber
-                v-model:value="performanceConfig.keepalive_timeout"
-                :min="0"
-                :max="999"
-                style="width: 120px"
-              />
-              <span>{{ $gettext('seconds') }}</span>
-            </ASpace>
-          </AFormItem>
-
-          <AFormItem
-            :label="$gettext('GZIP Compression')"
-            :help="$gettext('Enable compression for content transfer')"
-          >
-            <ASwitch
-              :checked="performanceConfig.gzip === 'on'"
-              :checked-children="$gettext('On')"
-              :un-checked-children="$gettext('Off')"
-              @change="handleGzipChange"
-            />
-          </AFormItem>
-
-          <AFormItem
-            :label="$gettext('GZIP Min Length')"
-            :help="$gettext('Minimum file size for compression')"
-          >
-            <ASpace>
-              <AInputNumber
-                v-model:value="performanceConfig.gzip_min_length"
-                :min="0"
-                style="width: 120px"
-              />
-              <span>{{ $gettext('KB') }}</span>
-            </ASpace>
-          </AFormItem>
-
-          <AFormItem
-            :label="$gettext('GZIP Compression Level')"
-            :help="$gettext('Compression level, 1 is lowest, 9 is highest')"
-          >
-            <AInputNumber
-              v-model:value="performanceConfig.gzip_comp_level"
-              :min="1"
-              :max="9"
-              style="width: 120px"
-            />
-          </AFormItem>
-
-          <AFormItem
-            :label="$gettext('Client Max Body Size')"
-            :help="$gettext('Maximum client request body size')"
-          >
-            <AInputGroup compact style="width: 180px">
-              <AInputNumber
-                v-model:value="maxBodySizeValue"
-                :min="1"
-                style="width: 120px"
-              />
-              <ASelect v-model:value="maxBodySizeUnit" style="width: 60px">
-                <ASelectOption v-for="unit in sizeUnits" :key="unit" :value="unit">
-                  {{ unit.toUpperCase() }}
-                </ASelectOption>
-              </ASelect>
-            </AInputGroup>
-          </AFormItem>
-
-          <AFormItem
-            :label="$gettext('Server Names Hash Bucket Size')"
-            :help="$gettext('Server names hash table size')"
-          >
-            <AInputNumber
-              v-model:value="performanceConfig.server_names_hash_bucket_size"
-              :min="32"
-              :step="32"
-              style="width: 120px"
-            />
-          </AFormItem>
-
-          <AFormItem
-            :label="$gettext('Client Header Buffer Size')"
-            :help="$gettext('Client request header buffer size')"
-          >
-            <AInputGroup compact style="width: 180px">
-              <AInputNumber
-                v-model:value="headerBufferSizeValue"
-                :min="1"
-                style="width: 120px"
-              />
-              <ASelect v-model:value="headerBufferSizeUnit" style="width: 60px">
-                <ASelectOption v-for="unit in sizeUnits" :key="unit" :value="unit">
-                  {{ unit.toUpperCase() }}
-                </ASelectOption>
-              </ASelect>
-            </AInputGroup>
-          </AFormItem>
-
-          <AFormItem
-            :label="$gettext('Client Body Buffer Size')"
-            :help="$gettext('Client request body buffer size')"
-          >
-            <AInputGroup compact style="width: 180px">
-              <AInputNumber
-                v-model:value="bodyBufferSizeValue"
-                :min="1"
-                style="width: 120px"
-              />
-              <ASelect v-model:value="bodyBufferSizeUnit" style="width: 60px">
-                <ASelectOption v-for="unit in sizeUnits" :key="unit" :value="unit">
-                  {{ unit.toUpperCase() }}
-                </ASelectOption>
-              </ASelect>
-            </AInputGroup>
-          </AFormItem>
-        </AForm>
-      </ASpin>
-    </AModal>
-  </div>
-</template>

+ 4 - 4
app/src/views/site/cert/Cert.vue

@@ -28,13 +28,13 @@ watch(() => props.certInfo, () => {
 function handleCertChange(certs: Cert[]) {
   changedCerts.value = certs
 
-  // 更新 NgxDirective
+  // Update NgxDirective
   if (current_server_directives.value) {
-    // 过滤掉现有的证书配置
+    // Filter out existing certificate configurations
     const filteredDirectives = current_server_directives.value
       .filter(v => v.directive !== 'ssl_certificate' && v.directive !== 'ssl_certificate_key')
 
-    // 添加新的证书配置
+    // Add new certificate configuration
     const newDirectives = [...filteredDirectives]
 
     certs.forEach(cert => {
@@ -48,7 +48,7 @@ function handleCertChange(certs: Cert[]) {
       })
     })
 
-    // 更新 directives
+    // Update directives
     current_server_directives.value = newDirectives
   }
 }

+ 2 - 1
app/uno.config.ts

@@ -56,7 +56,8 @@ export default defineConfig({
         // default
         /\.(vue|[jt]sx|ts)($|\?)/,
 
-        // 参考:https://unocss.dev/guide/extracting#extracting-from-build-tools-pipeline
+        // Use utility functions
+        // Reference: https://unocss.dev/guide/extracting#extracting-from-build-tools-pipeline
       ],
 
       // exclude files

+ 0 - 135
internal/config/perf_opt.go

@@ -1,135 +0,0 @@
-package config
-
-import (
-	"os"
-	"sort"
-
-	"github.com/0xJacky/Nginx-UI/internal/nginx"
-	"github.com/pkg/errors"
-	"github.com/tufanbarisyildirim/gonginx/config"
-	"github.com/tufanbarisyildirim/gonginx/dumper"
-	"github.com/tufanbarisyildirim/gonginx/parser"
-)
-
-// PerfOpt represents Nginx performance optimization settings
-type PerfOpt struct {
-	WorkerProcesses           string `json:"worker_processes"`              // auto or number
-	WorkerConnections         string `json:"worker_connections"`            // max connections
-	KeepaliveTimeout          string `json:"keepalive_timeout"`             // timeout in seconds
-	Gzip                      string `json:"gzip"`                          // on or off
-	GzipMinLength             string `json:"gzip_min_length"`               // min length to compress
-	GzipCompLevel             string `json:"gzip_comp_level"`               // compression level
-	ClientMaxBodySize         string `json:"client_max_body_size"`          // max body size (with unit: k, m, g)
-	ServerNamesHashBucketSize string `json:"server_names_hash_bucket_size"` // hash bucket size
-	ClientHeaderBufferSize    string `json:"client_header_buffer_size"`     // header buffer size (with unit: k, m, g)
-	ClientBodyBufferSize      string `json:"client_body_buffer_size"`       // body buffer size (with unit: k, m, g)
-}
-
-// UpdatePerfOpt updates the Nginx performance optimization settings
-func UpdatePerfOpt(opt *PerfOpt) error {
-	confPath := nginx.GetConfPath("nginx.conf")
-	if confPath == "" {
-		return errors.New("failed to get nginx.conf path")
-	}
-
-	// Read the current configuration
-	content, err := os.ReadFile(confPath)
-	if err != nil {
-		return errors.Wrap(err, "failed to read nginx.conf")
-	}
-
-	// Parse the configuration
-	p := parser.NewStringParser(string(content), parser.WithSkipValidDirectivesErr())
-	conf, err := p.Parse()
-	if err != nil {
-		return errors.Wrap(err, "failed to parse nginx.conf")
-	}
-
-	// Process the configuration and update performance settings
-	updateNginxConfig(conf.Block, opt)
-
-	// Dump the updated configuration
-	updatedConf := dumper.DumpBlock(conf.Block, dumper.IndentedStyle)
-
-	return Save(confPath, updatedConf, nil)
-
-}
-
-// updateNginxConfig updates the performance settings in the Nginx configuration
-func updateNginxConfig(block config.IBlock, opt *PerfOpt) {
-	if block == nil {
-		return
-	}
-
-	directives := block.GetDirectives()
-	// Update main context directives
-	updateOrAddDirective(block, directives, "worker_processes", opt.WorkerProcesses)
-
-	// Look for events, http, and other blocks
-	for _, directive := range directives {
-		if directive.GetName() == "events" && directive.GetBlock() != nil {
-			// Update events block directives
-			eventsBlock := directive.GetBlock()
-			eventsDirectives := eventsBlock.GetDirectives()
-			updateOrAddDirective(eventsBlock, eventsDirectives, "worker_connections", opt.WorkerConnections)
-		} else if directive.GetName() == "http" && directive.GetBlock() != nil {
-			// Update http block directives
-			httpBlock := directive.GetBlock()
-			httpDirectives := httpBlock.GetDirectives()
-			updateOrAddDirective(httpBlock, httpDirectives, "keepalive_timeout", opt.KeepaliveTimeout)
-			updateOrAddDirective(httpBlock, httpDirectives, "gzip", opt.Gzip)
-			updateOrAddDirective(httpBlock, httpDirectives, "gzip_min_length", opt.GzipMinLength)
-			updateOrAddDirective(httpBlock, httpDirectives, "gzip_comp_level", opt.GzipCompLevel)
-			updateOrAddDirective(httpBlock, httpDirectives, "client_max_body_size", opt.ClientMaxBodySize)
-			updateOrAddDirective(httpBlock, httpDirectives, "server_names_hash_bucket_size", opt.ServerNamesHashBucketSize)
-			updateOrAddDirective(httpBlock, httpDirectives, "client_header_buffer_size", opt.ClientHeaderBufferSize)
-			updateOrAddDirective(httpBlock, httpDirectives, "client_body_buffer_size", opt.ClientBodyBufferSize)
-		}
-	}
-}
-
-// updateOrAddDirective updates a directive if it exists, or adds it to the block if it doesn't
-func updateOrAddDirective(block config.IBlock, directives []config.IDirective, name string, value string) {
-	if value == "" {
-		return
-	}
-
-	// Search for existing directive
-	for _, directive := range directives {
-		if directive.GetName() == name {
-			// Update existing directive
-			if len(directive.GetParameters()) > 0 {
-				directive.GetParameters()[0].Value = value
-			}
-			return
-		}
-	}
-
-	// If we get here, we need to add a new directive
-	// Create a new directive and add it to the block
-	// This requires knowledge of the underlying implementation
-	// For now, we'll use the Directive type from gonginx/config
-	newDirective := &config.Directive{
-		Name:       name,
-		Parameters: []config.Parameter{{Value: value}},
-	}
-
-	// Add the new directive to the block
-	// This is specific to the gonginx library implementation
-	switch block := block.(type) {
-	case *config.Config:
-		block.Block.Directives = append(block.Block.Directives, newDirective)
-	case *config.Block:
-		block.Directives = append(block.Directives, newDirective)
-	case *config.HTTP:
-		block.Directives = append(block.Directives, newDirective)
-	}
-}
-
-// sortDirectives sorts directives alphabetically by name
-func sortDirectives(directives []config.IDirective) {
-	sort.SliceStable(directives, func(i, j int) bool {
-		// Ensure both i and j can return valid names
-		return directives[i].GetName() < directives[j].GetName()
-	})
-}

+ 0 - 122
internal/nginx/config_info.go

@@ -1,122 +0,0 @@
-package nginx
-
-import (
-	"os"
-	"regexp"
-	"runtime"
-	"strconv"
-
-	"github.com/pkg/errors"
-)
-
-type NginxConfigInfo struct {
-	WorkerProcesses           int    `json:"worker_processes"`
-	WorkerConnections         int    `json:"worker_connections"`
-	ProcessMode               string `json:"process_mode"`
-	KeepaliveTimeout          int    `json:"keepalive_timeout"`
-	Gzip                      string `json:"gzip"`
-	GzipMinLength             int    `json:"gzip_min_length"`
-	GzipCompLevel             int    `json:"gzip_comp_level"`
-	ClientMaxBodySize         string `json:"client_max_body_size"` // with unit
-	ServerNamesHashBucketSize int    `json:"server_names_hash_bucket_size"`
-	ClientHeaderBufferSize    string `json:"client_header_buffer_size"` // with unit
-	ClientBodyBufferSize      string `json:"client_body_buffer_size"`   // with unit
-}
-
-// GetNginxWorkerConfigInfo Get Nginx config info of worker_processes and worker_connections
-func GetNginxWorkerConfigInfo() (*NginxConfigInfo, error) {
-	result := &NginxConfigInfo{
-		WorkerProcesses:           1,
-		WorkerConnections:         1024,
-		ProcessMode:               "manual",
-		KeepaliveTimeout:          65,
-		Gzip:                      "off",
-		GzipMinLength:             1,
-		GzipCompLevel:             1,
-		ClientMaxBodySize:         "1m",
-		ServerNamesHashBucketSize: 32,
-		ClientHeaderBufferSize:    "1k",
-		ClientBodyBufferSize:      "8k",
-	}
-
-	confPath := GetConfPath("nginx.conf")
-	if confPath == "" {
-		return nil, errors.New("failed to get nginx.conf path")
-	}
-
-	// Read the current configuration
-	content, err := os.ReadFile(confPath)
-	if err != nil {
-		return nil, errors.Wrap(err, "failed to read nginx.conf")
-	}
-
-	outputStr := string(content)
-
-	// Parse worker_processes
-	wpRe := regexp.MustCompile(`worker_processes\s+(\d+|auto);`)
-	if matches := wpRe.FindStringSubmatch(outputStr); len(matches) > 1 {
-		if matches[1] == "auto" {
-			result.WorkerProcesses = runtime.NumCPU()
-			result.ProcessMode = "auto"
-		} else {
-			result.WorkerProcesses, _ = strconv.Atoi(matches[1])
-			result.ProcessMode = "manual"
-		}
-	}
-
-	// Parse worker_connections
-	wcRe := regexp.MustCompile(`worker_connections\s+(\d+);`)
-	if matches := wcRe.FindStringSubmatch(outputStr); len(matches) > 1 {
-		result.WorkerConnections, _ = strconv.Atoi(matches[1])
-	}
-
-	// Parse keepalive_timeout
-	ktRe := regexp.MustCompile(`keepalive_timeout\s+(\d+);`)
-	if matches := ktRe.FindStringSubmatch(outputStr); len(matches) > 1 {
-		result.KeepaliveTimeout, _ = strconv.Atoi(matches[1])
-	}
-
-	// Parse gzip
-	gzipRe := regexp.MustCompile(`gzip\s+(on|off);`)
-	if matches := gzipRe.FindStringSubmatch(outputStr); len(matches) > 1 {
-		result.Gzip = matches[1]
-	}
-
-	// Parse gzip_min_length
-	gzipMinRe := regexp.MustCompile(`gzip_min_length\s+(\d+);`)
-	if matches := gzipMinRe.FindStringSubmatch(outputStr); len(matches) > 1 {
-		result.GzipMinLength, _ = strconv.Atoi(matches[1])
-	}
-
-	// Parse gzip_comp_level
-	gzipCompRe := regexp.MustCompile(`gzip_comp_level\s+(\d+);`)
-	if matches := gzipCompRe.FindStringSubmatch(outputStr); len(matches) > 1 {
-		result.GzipCompLevel, _ = strconv.Atoi(matches[1])
-	}
-
-	// Parse client_max_body_size with any unit (k, m, g)
-	cmaxRe := regexp.MustCompile(`client_max_body_size\s+(\d+[kmg]?);`)
-	if matches := cmaxRe.FindStringSubmatch(outputStr); len(matches) > 1 {
-		result.ClientMaxBodySize = matches[1]
-	}
-
-	// Parse server_names_hash_bucket_size
-	hashRe := regexp.MustCompile(`server_names_hash_bucket_size\s+(\d+);`)
-	if matches := hashRe.FindStringSubmatch(outputStr); len(matches) > 1 {
-		result.ServerNamesHashBucketSize, _ = strconv.Atoi(matches[1])
-	}
-
-	// Parse client_header_buffer_size with any unit (k, m, g)
-	headerRe := regexp.MustCompile(`client_header_buffer_size\s+(\d+[kmg]?);`)
-	if matches := headerRe.FindStringSubmatch(outputStr); len(matches) > 1 {
-		result.ClientHeaderBufferSize = matches[1]
-	}
-
-	// Parse client_body_buffer_size with any unit (k, m, g)
-	bodyRe := regexp.MustCompile(`client_body_buffer_size\s+(\d+[kmg]?);`)
-	if matches := bodyRe.FindStringSubmatch(outputStr); len(matches) > 1 {
-		result.ClientBodyBufferSize = matches[1]
-	}
-
-	return result, nil
-}

+ 246 - 0
internal/performance/config_info.go

@@ -0,0 +1,246 @@
+package performance
+
+import (
+	"os"
+	"regexp"
+	"runtime"
+	"strconv"
+
+	"github.com/0xJacky/Nginx-UI/internal/nginx"
+	"github.com/pkg/errors"
+)
+
+type NginxConfigInfo struct {
+	WorkerProcesses           int              `json:"worker_processes"`
+	WorkerConnections         int              `json:"worker_connections"`
+	ProcessMode               string           `json:"process_mode"`
+	KeepaliveTimeout          string           `json:"keepalive_timeout"`
+	Gzip                      string           `json:"gzip"`
+	GzipMinLength             int              `json:"gzip_min_length"`
+	GzipCompLevel             int              `json:"gzip_comp_level"`
+	ClientMaxBodySize         string           `json:"client_max_body_size"` // with unit
+	ServerNamesHashBucketSize string           `json:"server_names_hash_bucket_size"`
+	ClientHeaderBufferSize    string           `json:"client_header_buffer_size"` // with unit
+	ClientBodyBufferSize      string           `json:"client_body_buffer_size"`   // with unit
+	ProxyCache                ProxyCacheConfig `json:"proxy_cache"`
+}
+
+// GetNginxWorkerConfigInfo Get Nginx config info of worker_processes and worker_connections
+func GetNginxWorkerConfigInfo() (*NginxConfigInfo, error) {
+	result := &NginxConfigInfo{
+		WorkerProcesses:           1,
+		WorkerConnections:         1024,
+		ProcessMode:               "manual",
+		KeepaliveTimeout:          "65s",
+		Gzip:                      "off",
+		GzipMinLength:             1,
+		GzipCompLevel:             1,
+		ClientMaxBodySize:         "1m",
+		ServerNamesHashBucketSize: "32k",
+		ClientHeaderBufferSize:    "1k",
+		ClientBodyBufferSize:      "8k",
+		ProxyCache: ProxyCacheConfig{
+			Enabled:     false,
+			Path:        "/var/cache/nginx/proxy_cache",
+			Levels:      "1:2",
+			UseTempPath: "off",
+			KeysZone:    "proxy_cache:10m",
+			Inactive:    "60m",
+			MaxSize:     "1g",
+			// Purger:      "off",
+		},
+	}
+
+	confPath := nginx.GetConfPath("nginx.conf")
+	if confPath == "" {
+		return nil, errors.New("failed to get nginx.conf path")
+	}
+
+	// Read the current configuration
+	content, err := os.ReadFile(confPath)
+	if err != nil {
+		return nil, errors.Wrap(err, "failed to read nginx.conf")
+	}
+
+	outputStr := string(content)
+
+	// Parse worker_processes
+	wpRe := regexp.MustCompile(`worker_processes\s+(\d+|auto);`)
+	if matches := wpRe.FindStringSubmatch(outputStr); len(matches) > 1 {
+		if matches[1] == "auto" {
+			result.WorkerProcesses = runtime.NumCPU()
+			result.ProcessMode = "auto"
+		} else {
+			result.WorkerProcesses, _ = strconv.Atoi(matches[1])
+			result.ProcessMode = "manual"
+		}
+	}
+
+	// Parse worker_connections
+	wcRe := regexp.MustCompile(`worker_connections\s+(\d+);`)
+	if matches := wcRe.FindStringSubmatch(outputStr); len(matches) > 1 {
+		result.WorkerConnections, _ = strconv.Atoi(matches[1])
+	}
+
+	// Parse keepalive_timeout
+	ktRe := regexp.MustCompile(`keepalive_timeout\s+(\d+[smhdwMy]?);`)
+	if matches := ktRe.FindStringSubmatch(outputStr); len(matches) > 1 {
+		result.KeepaliveTimeout = matches[1]
+	}
+
+	// Parse gzip
+	gzipRe := regexp.MustCompile(`gzip\s+(on|off);`)
+	if matches := gzipRe.FindStringSubmatch(outputStr); len(matches) > 1 {
+		result.Gzip = matches[1]
+	}
+
+	// Parse gzip_min_length
+	gzipMinRe := regexp.MustCompile(`gzip_min_length\s+(\d+);`)
+	if matches := gzipMinRe.FindStringSubmatch(outputStr); len(matches) > 1 {
+		result.GzipMinLength, _ = strconv.Atoi(matches[1])
+	}
+
+	// Parse gzip_comp_level
+	gzipCompRe := regexp.MustCompile(`gzip_comp_level\s+(\d+);`)
+	if matches := gzipCompRe.FindStringSubmatch(outputStr); len(matches) > 1 {
+		result.GzipCompLevel, _ = strconv.Atoi(matches[1])
+	}
+
+	// Parse client_max_body_size with any unit (k, m, g)
+	cmaxRe := regexp.MustCompile(`client_max_body_size\s+(\d+[kmg]?);`)
+	if matches := cmaxRe.FindStringSubmatch(outputStr); len(matches) > 1 {
+		result.ClientMaxBodySize = matches[1]
+	}
+
+	// Parse server_names_hash_bucket_size
+	hashRe := regexp.MustCompile(`server_names_hash_bucket_size\s+(\d+[kmg]?);`)
+	if matches := hashRe.FindStringSubmatch(outputStr); len(matches) > 1 {
+		result.ServerNamesHashBucketSize = matches[1]
+	}
+
+	// Parse client_header_buffer_size with any unit (k, m, g)
+	headerRe := regexp.MustCompile(`client_header_buffer_size\s+(\d+[kmg]?);`)
+	if matches := headerRe.FindStringSubmatch(outputStr); len(matches) > 1 {
+		result.ClientHeaderBufferSize = matches[1]
+	}
+
+	// Parse client_body_buffer_size with any unit (k, m, g)
+	bodyRe := regexp.MustCompile(`client_body_buffer_size\s+(\d+[kmg]?);`)
+	if matches := bodyRe.FindStringSubmatch(outputStr); len(matches) > 1 {
+		result.ClientBodyBufferSize = matches[1]
+	}
+
+	// Parse proxy_cache_path settings
+	proxyCachePathRe := regexp.MustCompile(`proxy_cache_path\s+([^;]+);`)
+	if matches := proxyCachePathRe.FindStringSubmatch(outputStr); len(matches) > 1 {
+		result.ProxyCache.Enabled = true
+		proxyCacheParams := matches[1]
+
+		// Extract path (first parameter)
+		pathRe := regexp.MustCompile(`^\s*([^\s]+)`)
+		if pathMatches := pathRe.FindStringSubmatch(proxyCacheParams); len(pathMatches) > 1 {
+			result.ProxyCache.Path = pathMatches[1]
+		}
+
+		// Extract levels parameter
+		levelsRe := regexp.MustCompile(`levels=([^\s]+)`)
+		if levelsMatches := levelsRe.FindStringSubmatch(proxyCacheParams); len(levelsMatches) > 1 {
+			result.ProxyCache.Levels = levelsMatches[1]
+		}
+
+		// Extract use_temp_path parameter
+		useTempPathRe := regexp.MustCompile(`use_temp_path=(on|off)`)
+		if useTempPathMatches := useTempPathRe.FindStringSubmatch(proxyCacheParams); len(useTempPathMatches) > 1 {
+			result.ProxyCache.UseTempPath = useTempPathMatches[1]
+		}
+
+		// Extract keys_zone parameter
+		keysZoneRe := regexp.MustCompile(`keys_zone=([^\s]+)`)
+		if keysZoneMatches := keysZoneRe.FindStringSubmatch(proxyCacheParams); len(keysZoneMatches) > 1 {
+			result.ProxyCache.KeysZone = keysZoneMatches[1]
+		}
+
+		// Extract inactive parameter
+		inactiveRe := regexp.MustCompile(`inactive=([^\s]+)`)
+		if inactiveMatches := inactiveRe.FindStringSubmatch(proxyCacheParams); len(inactiveMatches) > 1 {
+			result.ProxyCache.Inactive = inactiveMatches[1]
+		}
+
+		// Extract max_size parameter
+		maxSizeRe := regexp.MustCompile(`max_size=([^\s]+)`)
+		if maxSizeMatches := maxSizeRe.FindStringSubmatch(proxyCacheParams); len(maxSizeMatches) > 1 {
+			result.ProxyCache.MaxSize = maxSizeMatches[1]
+		}
+
+		// Extract min_free parameter
+		minFreeRe := regexp.MustCompile(`min_free=([^\s]+)`)
+		if minFreeMatches := minFreeRe.FindStringSubmatch(proxyCacheParams); len(minFreeMatches) > 1 {
+			result.ProxyCache.MinFree = minFreeMatches[1]
+		}
+
+		// Extract manager_files parameter
+		managerFilesRe := regexp.MustCompile(`manager_files=([^\s]+)`)
+		if managerFilesMatches := managerFilesRe.FindStringSubmatch(proxyCacheParams); len(managerFilesMatches) > 1 {
+			result.ProxyCache.ManagerFiles = managerFilesMatches[1]
+		}
+
+		// Extract manager_sleep parameter
+		managerSleepRe := regexp.MustCompile(`manager_sleep=([^\s]+)`)
+		if managerSleepMatches := managerSleepRe.FindStringSubmatch(proxyCacheParams); len(managerSleepMatches) > 1 {
+			result.ProxyCache.ManagerSleep = managerSleepMatches[1]
+		}
+
+		// Extract manager_threshold parameter
+		managerThresholdRe := regexp.MustCompile(`manager_threshold=([^\s]+)`)
+		if managerThresholdMatches := managerThresholdRe.FindStringSubmatch(proxyCacheParams); len(managerThresholdMatches) > 1 {
+			result.ProxyCache.ManagerThreshold = managerThresholdMatches[1]
+		}
+
+		// Extract loader_files parameter
+		loaderFilesRe := regexp.MustCompile(`loader_files=([^\s]+)`)
+		if loaderFilesMatches := loaderFilesRe.FindStringSubmatch(proxyCacheParams); len(loaderFilesMatches) > 1 {
+			result.ProxyCache.LoaderFiles = loaderFilesMatches[1]
+		}
+
+		// Extract loader_sleep parameter
+		loaderSleepRe := regexp.MustCompile(`loader_sleep=([^\s]+)`)
+		if loaderSleepMatches := loaderSleepRe.FindStringSubmatch(proxyCacheParams); len(loaderSleepMatches) > 1 {
+			result.ProxyCache.LoaderSleep = loaderSleepMatches[1]
+		}
+
+		// Extract loader_threshold parameter
+		loaderThresholdRe := regexp.MustCompile(`loader_threshold=([^\s]+)`)
+		if loaderThresholdMatches := loaderThresholdRe.FindStringSubmatch(proxyCacheParams); len(loaderThresholdMatches) > 1 {
+			result.ProxyCache.LoaderThreshold = loaderThresholdMatches[1]
+		}
+
+		// Extract purger parameter
+		// purgerRe := regexp.MustCompile(`purger=(on|off)`)
+		// if purgerMatches := purgerRe.FindStringSubmatch(proxyCacheParams); len(purgerMatches) > 1 {
+		// 	result.ProxyCache.Purger = purgerMatches[1]
+		// }
+
+		// // Extract purger_files parameter
+		// purgerFilesRe := regexp.MustCompile(`purger_files=([^\s]+)`)
+		// if purgerFilesMatches := purgerFilesRe.FindStringSubmatch(proxyCacheParams); len(purgerFilesMatches) > 1 {
+		// 	result.ProxyCache.PurgerFiles = purgerFilesMatches[1]
+		// }
+
+		// // Extract purger_sleep parameter
+		// purgerSleepRe := regexp.MustCompile(`purger_sleep=([^\s]+)`)
+		// if purgerSleepMatches := purgerSleepRe.FindStringSubmatch(proxyCacheParams); len(purgerSleepMatches) > 1 {
+		// 	result.ProxyCache.PurgerSleep = purgerSleepMatches[1]
+		// }
+
+		// // Extract purger_threshold parameter
+		// purgerThresholdRe := regexp.MustCompile(`purger_threshold=([^\s]+)`)
+		// if purgerThresholdMatches := purgerThresholdRe.FindStringSubmatch(proxyCacheParams); len(purgerThresholdMatches) > 1 {
+		// 	result.ProxyCache.PurgerThreshold = purgerThresholdMatches[1]
+		// }
+	} else {
+		// No proxy_cache_path directive found, so disable it
+		result.ProxyCache.Enabled = false
+	}
+
+	return result, nil
+}

+ 289 - 0
internal/performance/perf_opt.go

@@ -0,0 +1,289 @@
+package performance
+
+import (
+	"os"
+	"sort"
+
+	ngxConfig "github.com/0xJacky/Nginx-UI/internal/config"
+	"github.com/0xJacky/Nginx-UI/internal/nginx"
+	"github.com/pkg/errors"
+	"github.com/tufanbarisyildirim/gonginx/config"
+	"github.com/tufanbarisyildirim/gonginx/dumper"
+	"github.com/tufanbarisyildirim/gonginx/parser"
+)
+
+type ProxyCacheConfig struct {
+	Enabled          bool   `json:"enabled"`
+	Path             string `json:"path"`              // Cache file path
+	Levels           string `json:"levels"`            // Cache directory levels
+	UseTempPath      string `json:"use_temp_path"`     // Use temporary path (on/off)
+	KeysZone         string `json:"keys_zone"`         // Shared memory zone name and size
+	Inactive         string `json:"inactive"`          // Time after which inactive cache is removed
+	MaxSize          string `json:"max_size"`          // Maximum size of cache
+	MinFree          string `json:"min_free"`          // Minimum free space
+	ManagerFiles     string `json:"manager_files"`     // Number of files processed by manager
+	ManagerSleep     string `json:"manager_sleep"`     // Manager check interval
+	ManagerThreshold string `json:"manager_threshold"` // Manager processing threshold
+	LoaderFiles      string `json:"loader_files"`      // Number of files loaded at once
+	LoaderSleep      string `json:"loader_sleep"`      // Loader check interval
+	LoaderThreshold  string `json:"loader_threshold"`  // Loader processing threshold
+
+	// Additionally, the following parameters are available as part of nginx commercial subscription:
+	// Purger           string `json:"purger"`            // Enable cache purger (on/off)
+	// PurgerFiles      string `json:"purger_files"`      // Number of files processed by purger
+	// PurgerSleep      string `json:"purger_sleep"`      // Purger check interval
+	// PurgerThreshold  string `json:"purger_threshold"`  // Purger processing threshold
+}
+
+// PerfOpt represents Nginx performance optimization settings
+type PerfOpt struct {
+	WorkerProcesses           string           `json:"worker_processes"`              // auto or number
+	WorkerConnections         string           `json:"worker_connections"`            // max connections
+	KeepaliveTimeout          string           `json:"keepalive_timeout"`             // timeout in seconds
+	Gzip                      string           `json:"gzip"`                          // on or off
+	GzipMinLength             string           `json:"gzip_min_length"`               // min length to compress
+	GzipCompLevel             string           `json:"gzip_comp_level"`               // compression level
+	ClientMaxBodySize         string           `json:"client_max_body_size"`          // max body size (with unit: k, m, g)
+	ServerNamesHashBucketSize string           `json:"server_names_hash_bucket_size"` // hash bucket size
+	ClientHeaderBufferSize    string           `json:"client_header_buffer_size"`     // header buffer size (with unit: k, m, g)
+	ClientBodyBufferSize      string           `json:"client_body_buffer_size"`       // body buffer size (with unit: k, m, g)
+	ProxyCache                ProxyCacheConfig `json:"proxy_cache,omitzero"`          // proxy cache settings
+}
+
+// UpdatePerfOpt updates the Nginx performance optimization settings
+func UpdatePerfOpt(opt *PerfOpt) error {
+	confPath := nginx.GetConfPath("nginx.conf")
+	if confPath == "" {
+		return errors.New("failed to get nginx.conf path")
+	}
+
+	// Read the current configuration
+	content, err := os.ReadFile(confPath)
+	if err != nil {
+		return errors.Wrap(err, "failed to read nginx.conf")
+	}
+
+	// Parse the configuration
+	p := parser.NewStringParser(string(content), parser.WithSkipValidDirectivesErr())
+	conf, err := p.Parse()
+	if err != nil {
+		return errors.Wrap(err, "failed to parse nginx.conf")
+	}
+
+	// Process the configuration and update performance settings
+	updateNginxConfig(conf.Block, opt)
+
+	// Dump the updated configuration
+	updatedConf := dumper.DumpBlock(conf.Block, dumper.IndentedStyle)
+
+	return ngxConfig.Save(confPath, updatedConf, nil)
+
+}
+
+// updateNginxConfig updates the performance settings in the Nginx configuration
+func updateNginxConfig(block config.IBlock, opt *PerfOpt) {
+	if block == nil {
+		return
+	}
+
+	directives := block.GetDirectives()
+	// Update main context directives
+	updateOrAddDirective(block, directives, "worker_processes", opt.WorkerProcesses)
+
+	// Look for events, http, and other blocks
+	for _, directive := range directives {
+		if directive.GetName() == "events" && directive.GetBlock() != nil {
+			// Update events block directives
+			eventsBlock := directive.GetBlock()
+			eventsDirectives := eventsBlock.GetDirectives()
+			updateOrAddDirective(eventsBlock, eventsDirectives, "worker_connections", opt.WorkerConnections)
+		} else if directive.GetName() == "http" && directive.GetBlock() != nil {
+			// Update http block directives
+			httpBlock := directive.GetBlock()
+			httpDirectives := httpBlock.GetDirectives()
+			updateOrAddDirective(httpBlock, httpDirectives, "keepalive_timeout", opt.KeepaliveTimeout)
+			updateOrAddDirective(httpBlock, httpDirectives, "gzip", opt.Gzip)
+			updateOrAddDirective(httpBlock, httpDirectives, "gzip_min_length", opt.GzipMinLength)
+			updateOrAddDirective(httpBlock, httpDirectives, "gzip_comp_level", opt.GzipCompLevel)
+			updateOrAddDirective(httpBlock, httpDirectives, "client_max_body_size", opt.ClientMaxBodySize)
+			updateOrAddDirective(httpBlock, httpDirectives, "server_names_hash_bucket_size", opt.ServerNamesHashBucketSize)
+			updateOrAddDirective(httpBlock, httpDirectives, "client_header_buffer_size", opt.ClientHeaderBufferSize)
+			updateOrAddDirective(httpBlock, httpDirectives, "client_body_buffer_size", opt.ClientBodyBufferSize)
+
+			// Handle proxy_cache_path directive
+			updateOrRemoveProxyCachePath(httpBlock, httpDirectives, &opt.ProxyCache)
+
+			sortDirectives(httpDirectives)
+		}
+	}
+}
+
+// updateOrAddDirective updates a directive if it exists, or adds it to the block if it doesn't
+func updateOrAddDirective(block config.IBlock, directives []config.IDirective, name string, value string) {
+	if value == "" {
+		return
+	}
+
+	// Search for existing directive
+	for _, directive := range directives {
+		if directive.GetName() == name {
+			// Update existing directive
+			if len(directive.GetParameters()) > 0 {
+				directive.GetParameters()[0].Value = value
+			}
+			return
+		}
+	}
+
+	// If we get here, we need to add a new directive
+	// Create a new directive and add it to the block
+	// This requires knowledge of the underlying implementation
+	// For now, we'll use the Directive type from gonginx/config
+	newDirective := &config.Directive{
+		Name:       name,
+		Parameters: []config.Parameter{{Value: value}},
+	}
+
+	// Add the new directive to the block
+	// This is specific to the gonginx library implementation
+	switch block := block.(type) {
+	case *config.Config:
+		block.Block.Directives = append(block.Block.Directives, newDirective)
+	case *config.Block:
+		block.Directives = append(block.Directives, newDirective)
+	case *config.HTTP:
+		block.Directives = append(block.Directives, newDirective)
+	}
+}
+
+// sortDirectives sorts directives alphabetically by name
+func sortDirectives(directives []config.IDirective) {
+	sort.SliceStable(directives, func(i, j int) bool {
+		// Ensure both i and j can return valid names
+		return directives[i].GetName() < directives[j].GetName()
+	})
+}
+
+// updateOrRemoveProxyCachePath adds or removes the proxy_cache_path directive based on whether it's enabled
+func updateOrRemoveProxyCachePath(block config.IBlock, directives []config.IDirective, proxyCache *ProxyCacheConfig) {
+	// If not enabled, remove the directive if it exists
+	if !proxyCache.Enabled {
+		for i, directive := range directives {
+			if directive.GetName() == "proxy_cache_path" {
+				// Remove the directive
+				switch block := block.(type) {
+				case *config.Block:
+					block.Directives = append(block.Directives[:i], block.Directives[i+1:]...)
+				case *config.HTTP:
+					block.Directives = append(block.Directives[:i], block.Directives[i+1:]...)
+				}
+				return
+			}
+		}
+		return
+	}
+
+	// If enabled, build the proxy_cache_path directive with all parameters
+	params := []config.Parameter{}
+
+	// First parameter is the path (required)
+	if proxyCache.Path != "" {
+		params = append(params, config.Parameter{Value: proxyCache.Path})
+		_ = os.MkdirAll(proxyCache.Path, 0755)
+	} else {
+		// No path specified, can't add the directive
+		return
+	}
+
+	// Add optional parameters
+	if proxyCache.Levels != "" {
+		params = append(params, config.Parameter{Value: "levels=" + proxyCache.Levels})
+	}
+
+	if proxyCache.UseTempPath != "" {
+		params = append(params, config.Parameter{Value: "use_temp_path=" + proxyCache.UseTempPath})
+	}
+
+	if proxyCache.KeysZone != "" {
+		params = append(params, config.Parameter{Value: "keys_zone=" + proxyCache.KeysZone})
+	} else {
+		// keys_zone is required, can't add the directive without it
+		return
+	}
+
+	if proxyCache.Inactive != "" {
+		params = append(params, config.Parameter{Value: "inactive=" + proxyCache.Inactive})
+	}
+
+	if proxyCache.MaxSize != "" {
+		params = append(params, config.Parameter{Value: "max_size=" + proxyCache.MaxSize})
+	}
+
+	if proxyCache.MinFree != "" {
+		params = append(params, config.Parameter{Value: "min_free=" + proxyCache.MinFree})
+	}
+
+	if proxyCache.ManagerFiles != "" {
+		params = append(params, config.Parameter{Value: "manager_files=" + proxyCache.ManagerFiles})
+	}
+
+	if proxyCache.ManagerSleep != "" {
+		params = append(params, config.Parameter{Value: "manager_sleep=" + proxyCache.ManagerSleep})
+	}
+
+	if proxyCache.ManagerThreshold != "" {
+		params = append(params, config.Parameter{Value: "manager_threshold=" + proxyCache.ManagerThreshold})
+	}
+
+	if proxyCache.LoaderFiles != "" {
+		params = append(params, config.Parameter{Value: "loader_files=" + proxyCache.LoaderFiles})
+	}
+
+	if proxyCache.LoaderSleep != "" {
+		params = append(params, config.Parameter{Value: "loader_sleep=" + proxyCache.LoaderSleep})
+	}
+
+	if proxyCache.LoaderThreshold != "" {
+		params = append(params, config.Parameter{Value: "loader_threshold=" + proxyCache.LoaderThreshold})
+	}
+
+	// if proxyCache.Purger != "" {
+	// 	params = append(params, config.Parameter{Value: "purger=" + proxyCache.Purger})
+	// }
+
+	// if proxyCache.PurgerFiles != "" {
+	// 	params = append(params, config.Parameter{Value: "purger_files=" + proxyCache.PurgerFiles})
+	// }
+
+	// if proxyCache.PurgerSleep != "" {
+	// 	params = append(params, config.Parameter{Value: "purger_sleep=" + proxyCache.PurgerSleep})
+	// }
+
+	// if proxyCache.PurgerThreshold != "" {
+	// 	params = append(params, config.Parameter{Value: "purger_threshold=" + proxyCache.PurgerThreshold})
+	// }
+
+	// Check if directive already exists
+	for i, directive := range directives {
+		if directive.GetName() == "proxy_cache_path" {
+			// Remove the old directive
+			switch block := block.(type) {
+			case *config.HTTP:
+				block.Directives = append(block.Directives[:i], block.Directives[i+1:]...)
+			}
+			break
+		}
+	}
+
+	// Create new directive
+	newDirective := &config.Directive{
+		Name:       "proxy_cache_path",
+		Parameters: params,
+	}
+
+	// Add the directive to the block
+	switch block := block.(type) {
+	case *config.HTTP:
+		block.Directives = append(block.Directives, newDirective)
+	}
+}

+ 6 - 3
internal/nginx/performance.go → internal/performance/performance.go

@@ -1,6 +1,9 @@
-package nginx
+package performance
 
-import "github.com/uozi-tech/cosy/logger"
+import (
+	"github.com/0xJacky/Nginx-UI/internal/nginx"
+	"github.com/uozi-tech/cosy/logger"
+)
 
 type NginxPerformanceInfo struct {
 	StubStatusData
@@ -16,7 +19,7 @@ type NginxPerformanceResponse struct {
 
 func GetPerformanceData() NginxPerformanceResponse {
 	// Check if Nginx is running
-	running := IsNginxRunning()
+	running := nginx.IsNginxRunning()
 	if !running {
 		return NginxPerformanceResponse{
 			StubStatusEnabled: false,

+ 1 - 1
internal/nginx/process_info.go → internal/performance/process_info.go

@@ -1,4 +1,4 @@
-package nginx
+package performance
 
 import (
 	"fmt"

+ 7 - 6
internal/nginx/stub_status.go → internal/performance/stub_status.go

@@ -1,4 +1,4 @@
-package nginx
+package performance
 
 import (
 	"bytes"
@@ -12,6 +12,7 @@ import (
 	"text/template"
 	"time"
 
+	"github.com/0xJacky/Nginx-UI/internal/nginx"
 	"github.com/0xJacky/Nginx-UI/settings"
 	"github.com/pkg/errors"
 	"github.com/uozi-tech/cosy/logger"
@@ -119,12 +120,12 @@ func GetStubStatus() *StubStatusInfo {
 // IsStubStatusEnabled Check if the stub_status module is enabled and return the access address
 // Only check the stub_status_nginx-ui.conf configuration file
 func IsStubStatusEnabled() (bool, string) {
-	stubStatusConfPath := GetConfPath("conf.d", StubStatusConfigName)
+	stubStatusConfPath := nginx.GetConfPath("conf.d", StubStatusConfigName)
 	if _, err := os.Stat(stubStatusConfPath); os.IsNotExist(err) {
 		return false, ""
 	}
 
-	ngxConfig, err := ParseNgxConfig(stubStatusConfPath)
+	ngxConfig, err := nginx.ParseNgxConfig(stubStatusConfPath)
 	if err != nil {
 		return false, ""
 	}
@@ -159,7 +160,7 @@ func EnableStubStatus() error {
 
 // DisableStubStatus Disable stub_status module
 func DisableStubStatus() error {
-	stubStatusConfPath := GetConfPath("conf.d", StubStatusConfigName)
+	stubStatusConfPath := nginx.GetConfPath("conf.d", StubStatusConfigName)
 	if _, err := os.Stat(stubStatusConfPath); os.IsNotExist(err) {
 		return nil
 	}
@@ -169,7 +170,7 @@ func DisableStubStatus() error {
 
 // CreateStubStatusConfig Create a new stub_status configuration file
 func CreateStubStatusConfig() error {
-	httpConfPath := GetConfPath("conf.d", StubStatusConfigName)
+	httpConfPath := nginx.GetConfPath("conf.d", StubStatusConfigName)
 
 	const stubStatusTemplate = `
 # DO NOT EDIT THIS FILE, IT IS AUTO GENERATED BY NGINX-UI
@@ -219,7 +220,7 @@ server {
 
 	stubStatusConfig := buf.String()
 
-	ngxConfig, err := ParseNgxConfigByContent(stubStatusConfig)
+	ngxConfig, err := nginx.ParseNgxConfigByContent(stubStatusConfig)
 	if err != nil {
 		return errors.Wrap(err, "failed to parse new nginx config")
 	}