From bc30afe1062e4811f70646c25b7f76e20d2fdead Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 5 May 2026 12:15:46 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E6=B7=BB=E5=8A=A0gzip=E5=8E=8B?= =?UTF-8?q?=E7=BC=A9=E6=8F=90=E5=8D=87=E5=89=8D=E7=AB=AF=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 对JS/CSS/HTML/JSON/SVG等文本资源启用gzip压缩 - 传输体积可减少70-80%,大幅提升页面加载速度 - 图片和字体等已压缩格式不重复压缩 --- backend/cmd/main.go | 25 ++++++- error.txt | 174 +++++++++++++++++++++++--------------------- 2 files changed, 113 insertions(+), 86 deletions(-) diff --git a/backend/cmd/main.go b/backend/cmd/main.go index 2bceb17..9806ecd 100644 --- a/backend/cmd/main.go +++ b/backend/cmd/main.go @@ -1,6 +1,7 @@ package main import ( + "compress/gzip" "embed" "fmt" "io/fs" @@ -273,9 +274,19 @@ func setupEmbeddedFrontend(r *gin.Engine) { } contentType := getContentType(decodedPath) - c.Header("Cache-Control", "public, max-age=31536000, immutable") - c.Data(200, contentType, data) + + if strings.Contains(c.GetHeader("Accept-Encoding"), "gzip") && isCompressible(decodedPath) { + c.Header("Content-Encoding", "gzip") + c.Header("Vary", "Accept-Encoding") + c.Writer.WriteHeader(200) + c.Writer.Header().Set("Content-Type", contentType) + gw := gzip.NewWriter(c.Writer) + gw.Write(data) + gw.Close() + } else { + c.Data(200, contentType, data) + } }) r.NoRoute(func(c *gin.Context) { @@ -334,6 +345,16 @@ func getSettingString(settings map[string]interface{}, key, defaultValue string) return defaultValue } +func isCompressible(filename string) bool { + ext := strings.ToLower(filename[strings.LastIndex(filename, "."):]) + switch ext { + case ".js", ".mjs", ".css", ".html", ".json", ".svg", ".xml", ".txt": + return true + default: + return false + } +} + func getContentType(filename string) string { ext := strings.ToLower(filename[strings.LastIndex(filename, "."):]) switch ext { diff --git a/error.txt b/error.txt index 9693a5e..6339d12 100644 --- a/error.txt +++ b/error.txt @@ -1,89 +1,95 @@ root@super:/opt/ace/compose/verify# docker compose logs -verify-app | 2026/05/04 20:09:27 database.go:69: Using SQLite database: /app/data/verification_platform.db +verify-app | 2026/05/05 03:40:45 database.go:69: Using SQLite database: /app/data/verification_platform.db verify-app | -verify-app | 2026/05/04 20:09:27 /app/internal/database/database.go:163 -verify-app | [error] failed to parse field: DefaultVal, error: unsupported data type: 0xc000035ff0 -verify-app | 2026/05/04 20:09:27 database.go:164: Applications table columns: -verify-app | 2026/05/04 20:09:27 database.go:166: - id (INTEGER) -verify-app | 2026/05/04 20:09:27 database.go:166: - user_id (INTEGER) -verify-app | 2026/05/04 20:09:27 database.go:166: - name (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - description (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - icon_url (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - app_key (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - billing_type (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - login_policy (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - encrypt_type (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - encrypt_key (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - bind_type (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - max_devices (INTEGER) -verify-app | 2026/05/04 20:09:27 database.go:166: - change_limit (INTEGER) -verify-app | 2026/05/04 20:09:27 database.go:166: - change_interval (INTEGER) -verify-app | 2026/05/04 20:09:27 database.go:166: - change_exceed_action (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - change_deduct_amount (REAL) -verify-app | 2026/05/04 20:09:27 database.go:166: - multi_open_mode (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - max_instances (INTEGER) -verify-app | 2026/05/04 20:09:27 database.go:166: - enable_trial (numeric) -verify-app | 2026/05/04 20:09:27 database.go:166: - trial_balance (REAL) -verify-app | 2026/05/04 20:09:27 database.go:166: - trial_days (INTEGER) -verify-app | 2026/05/04 20:09:27 database.go:166: - enable_free_period (numeric) -verify-app | 2026/05/04 20:09:27 database.go:166: - free_period_type (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - free_period_start (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - free_period_end (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - free_period_weekdays (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - free_period_start_time (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - free_period_end_time (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - heartbeat_interval (INTEGER) -verify-app | 2026/05/04 20:09:27 database.go:166: - heartbeat_timeout (INTEGER) -verify-app | 2026/05/04 20:09:27 database.go:166: - max_attempts (INTEGER) -verify-app | 2026/05/04 20:09:27 database.go:166: - lock_duration (INTEGER) -verify-app | 2026/05/04 20:09:27 database.go:166: - status (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - deduction_mode (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - deduction_type (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - deduction_interval (INTEGER) -verify-app | 2026/05/04 20:09:27 database.go:166: - deduction_unit (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - deduction_amount (REAL) -verify-app | 2026/05/04 20:09:27 database.go:166: - allow_register (numeric) -verify-app | 2026/05/04 20:09:27 database.go:166: - enable_login_verify (numeric) -verify-app | 2026/05/04 20:09:27 database.go:166: - enable_register_verify (numeric) -verify-app | 2026/05/04 20:09:27 database.go:166: - verify_method (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - email_config_id (INTEGER) -verify-app | 2026/05/04 20:09:27 database.go:166: - sms_config_id (INTEGER) -verify-app | 2026/05/04 20:09:27 database.go:166: - enable_password_reset (numeric) -verify-app | 2026/05/04 20:09:27 database.go:166: - password_reset_method (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:166: - password_reset_email_id (INTEGER) -verify-app | 2026/05/04 20:09:27 database.go:166: - password_reset_sms_id (INTEGER) -verify-app | 2026/05/04 20:09:27 database.go:166: - created_at (datetime) -verify-app | 2026/05/04 20:09:27 database.go:166: - updated_at (datetime) -verify-app | 2026/05/04 20:09:27 database.go:166: - deleted_at (datetime) +verify-app | 2026/05/05 03:40:45 /app/internal/database/database.go:163 +verify-app | [error] failed to parse field: DefaultVal, error: unsupported data type: 0xc0002c8140 +verify-app | 2026/05/05 03:40:45 database.go:164: Applications table columns: +verify-app | 2026/05/05 03:40:45 database.go:166: - id (INTEGER) +verify-app | 2026/05/05 03:40:45 database.go:166: - user_id (INTEGER) +verify-app | 2026/05/05 03:40:45 database.go:166: - name (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - description (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - icon_url (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - app_key (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - billing_type (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - login_policy (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - encrypt_type (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - encrypt_key (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - bind_type (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - max_devices (INTEGER) +verify-app | 2026/05/05 03:40:45 database.go:166: - change_limit (INTEGER) +verify-app | 2026/05/05 03:40:45 database.go:166: - change_interval (INTEGER) +verify-app | 2026/05/05 03:40:45 database.go:166: - change_exceed_action (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - change_deduct_amount (REAL) +verify-app | 2026/05/05 03:40:45 database.go:166: - multi_open_mode (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - max_instances (INTEGER) +verify-app | 2026/05/05 03:40:45 database.go:166: - enable_trial (numeric) +verify-app | 2026/05/05 03:40:45 database.go:166: - trial_balance (REAL) +verify-app | 2026/05/05 03:40:45 database.go:166: - trial_days (INTEGER) +verify-app | 2026/05/05 03:40:45 database.go:166: - enable_free_period (numeric) +verify-app | 2026/05/05 03:40:45 database.go:166: - free_period_type (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - free_period_start (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - free_period_end (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - free_period_weekdays (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - free_period_start_time (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - free_period_end_time (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - heartbeat_interval (INTEGER) +verify-app | 2026/05/05 03:40:45 database.go:166: - heartbeat_timeout (INTEGER) +verify-app | 2026/05/05 03:40:45 database.go:166: - max_attempts (INTEGER) +verify-app | 2026/05/05 03:40:45 database.go:166: - lock_duration (INTEGER) +verify-app | 2026/05/05 03:40:45 database.go:166: - status (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - deduction_mode (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - deduction_type (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - deduction_interval (INTEGER) +verify-app | 2026/05/05 03:40:45 database.go:166: - deduction_unit (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - deduction_amount (REAL) +verify-app | 2026/05/05 03:40:45 database.go:166: - allow_register (numeric) +verify-app | 2026/05/05 03:40:45 database.go:166: - enable_login_verify (numeric) +verify-app | 2026/05/05 03:40:45 database.go:166: - enable_register_verify (numeric) +verify-app | 2026/05/05 03:40:45 database.go:166: - verify_method (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - email_config_id (INTEGER) +verify-app | 2026/05/05 03:40:45 database.go:166: - sms_config_id (INTEGER) +verify-app | 2026/05/05 03:40:45 database.go:166: - enable_password_reset (numeric) +verify-app | 2026/05/05 03:40:45 database.go:166: - password_reset_method (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:166: - password_reset_email_id (INTEGER) +verify-app | 2026/05/05 03:40:45 database.go:166: - password_reset_sms_id (INTEGER) +verify-app | 2026/05/05 03:40:45 database.go:166: - created_at (datetime) +verify-app | 2026/05/05 03:40:45 database.go:166: - updated_at (datetime) +verify-app | 2026/05/05 03:40:45 database.go:166: - deleted_at (datetime) verify-app | -verify-app | 2026/05/04 20:09:27 /app/internal/database/database.go:178 -verify-app | [error] failed to parse field: DefaultVal, error: unsupported data type: 0xc000235970 -verify-app | 2026/05/04 20:09:27 database.go:179: AppUsers table columns: -verify-app | 2026/05/04 20:09:27 database.go:181: - id (INTEGER) -verify-app | 2026/05/04 20:09:27 database.go:181: - username (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:181: - email (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:181: - password (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:181: - device_id (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:181: - avatar (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:181: - status (TEXT) -verify-app | 2026/05/04 20:09:27 database.go:181: - application_id (INTEGER) -verify-app | 2026/05/04 20:09:27 database.go:181: - balance (REAL) -verify-app | 2026/05/04 20:09:27 database.go:181: - expiry_at (datetime) -verify-app | 2026/05/04 20:09:27 database.go:181: - last_login_at (datetime) -verify-app | 2026/05/04 20:09:27 database.go:181: - last_heartbeat_at (datetime) -verify-app | 2026/05/04 20:09:27 database.go:181: - is_trial_user (numeric) -verify-app | 2026/05/04 20:09:27 database.go:181: - trial_start_at (datetime) -verify-app | 2026/05/04 20:09:27 database.go:181: - trial_end_at (datetime) -verify-app | 2026/05/04 20:09:27 database.go:181: - created_at (datetime) -verify-app | 2026/05/04 20:09:27 database.go:181: - updated_at (datetime) -verify-app | 2026/05/04 20:09:27 database.go:181: - deleted_at (datetime) +verify-app | 2026/05/05 03:40:45 /app/internal/database/database.go:178 +verify-app | [error] failed to parse field: DefaultVal, error: unsupported data type: 0xc0002c9cc0 +verify-app | 2026/05/05 03:40:45 database.go:179: AppUsers table columns: +verify-app | 2026/05/05 03:40:45 database.go:181: - id (INTEGER) +verify-app | 2026/05/05 03:40:45 database.go:181: - username (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:181: - email (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:181: - password (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:181: - device_id (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:181: - avatar (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:181: - status (TEXT) +verify-app | 2026/05/05 03:40:45 database.go:181: - application_id (INTEGER) +verify-app | 2026/05/05 03:40:45 database.go:181: - balance (REAL) +verify-app | 2026/05/05 03:40:45 database.go:181: - expiry_at (datetime) +verify-app | 2026/05/05 03:40:45 database.go:181: - last_login_at (datetime) +verify-app | 2026/05/05 03:40:45 database.go:181: - last_heartbeat_at (datetime) +verify-app | 2026/05/05 03:40:45 database.go:181: - is_trial_user (numeric) +verify-app | 2026/05/05 03:40:45 database.go:181: - trial_start_at (datetime) +verify-app | 2026/05/05 03:40:45 database.go:181: - trial_end_at (datetime) +verify-app | 2026/05/05 03:40:45 database.go:181: - created_at (datetime) +verify-app | 2026/05/05 03:40:45 database.go:181: - updated_at (datetime) +verify-app | 2026/05/05 03:40:45 database.go:181: - deleted_at (datetime) verify-app | -verify-app | 2026/05/04 20:09:27 /app/internal/database/database.go:273 -verify-app | [error] failed to parse field: DefaultVal, error: unsupported data type: 0xc0006aa820 -verify-app | 2026/05/04 20:09:27 database.go:418: Document data already exists, skipping initialization -verify-app | 2026/05/04 20:09:27 database.go:730: Initializing ticket data... -verify-app | 2026/05/04 20:09:27 database.go:734: No dev user found, skipping ticket initialization -verify-app | 2026/05/04 20:09:27 database.go:418: Document data already exists, skipping initialization -verify-app | 2026/05/04 20:09:27 database.go:718: Failed to connect to Redis: dial tcp [::1]:6379: connect: connection refused -verify-app | 2026/05/04 20:09:27 main.go:250: Server starting on port 8080 +verify-app | 2026/05/05 03:40:45 /app/internal/database/database.go:273 +verify-app | [error] failed to parse field: DefaultVal, error: unsupported data type: 0xc000235f40 +verify-app | 2026/05/05 03:40:45 database.go:418: Document data already exists, skipping initialization +verify-app | 2026/05/05 03:40:45 database.go:730: Initializing ticket data... +verify-app | 2026/05/05 03:40:45 database.go:734: No dev user found, skipping ticket initialization +verify-app | 2026/05/05 03:40:45 database.go:418: Document data already exists, skipping initialization +verify-app | 2026/05/05 03:40:45 database.go:718: Failed to connect to Redis: dial tcp [::1]:6379: connect: connection refused +verify-app | 2026/05/05 03:40:45 main.go:240: Server starting on port 8080 +verify-app | 103.244.89.77 - [Tue, 05 May 2026 03:41:04 UTC] "GET / HTTP/1.1 200 848.29µs "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " +verify-app | 103.244.89.77 - [Tue, 05 May 2026 03:41:04 UTC] "GET / HTTP/1.1 200 907.021µs "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " +verify-app | [GIN] 2026/05/05 - 03:41:04 | 200 | 922.691µs | 103.244.89.77 | GET "/" +verify-app | 103.244.89.77 - [Tue, 05 May 2026 03:41:05 UTC] "GET /logo-black.svg HTTP/1.1 200 34.14µs "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " +verify-app | 103.244.89.77 - [Tue, 05 May 2026 03:41:05 UTC] "GET /logo-black.svg HTTP/1.1 200 308.597µs "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" " +verify-app | [GIN] 2026/05/05 - 03:41:05 | 200 | 764.498µs | 103.244.89.77 | GET "/logo-black.svg" root@super:/opt/ace/compose/verify# \ No newline at end of file