perf: 添加gzip压缩提升前端资源加载速度
- 对JS/CSS/HTML/JSON/SVG等文本资源启用gzip压缩 - 传输体积可减少70-80%,大幅提升页面加载速度 - 图片和字体等已压缩格式不重复压缩
This commit is contained in:
+22
-1
@@ -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")
|
||||
|
||||
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 {
|
||||
|
||||
@@ -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#
|
||||
Reference in New Issue
Block a user