From d1228954ea9d6d414cad4e2a413096067961e94d Mon Sep 17 00:00:00 2001 From: admin Date: Sat, 13 Jun 2026 00:22:21 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E9=9D=99=E6=80=81=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=AE=8C=E5=85=A8=E7=BB=95=E8=BF=87=E6=89=80=E6=9C=89=E4=B8=AD?= =?UTF-8?q?=E9=97=B4=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 使用 gin.New() 替代 gin.Default(),避免默认中间件 - 添加 skipUploads 包装器,所有中间件跳过 /uploads/ 路径 - 静态文件路由注册在最前面,零中间件开销 - 移除 gzipMiddleware 中重复的跳过逻辑 Co-Authored-By: Claude --- backend/cmd/main.go | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/backend/cmd/main.go b/backend/cmd/main.go index 9df6393..7ca1927 100644 --- a/backend/cmd/main.go +++ b/backend/cmd/main.go @@ -225,23 +225,19 @@ func startServer() { gin.SetMode(gin.ReleaseMode) } - r := gin.Default() + // 使用 gin.New() 而不是 gin.Default(),避免默认中间件 + r := gin.New() r.MaxMultipartMemory = 32 << 20 - r.Use(middleware.Logger()) - r.Use(middleware.Recovery()) - r.Use(middleware.Cors()) - r.Use(gzipMiddleware()) - - r.Use(func(c *gin.Context) { - if strings.HasPrefix(c.Request.URL.Path, "/uploads/") { - c.Header("Cache-Control", "public, max-age=31536000, immutable") - } - c.Next() - }) - - // 优化的静态文件服务,支持 Range 请求和断点续传 + // 静态文件路由 - 注册在最前面,不经过任何中间件 r.GET("/uploads/*filepath", handleOptimizedStaticFile) + + // 以下中间件只对非 uploads 路径生效 + r.Use(skipUploads(middleware.Logger())) + r.Use(skipUploads(middleware.Recovery())) + r.Use(skipUploads(middleware.Cors())) + r.Use(skipUploads(gzipMiddleware())) + router.SetupRoutes(r) setupEmbeddedFrontend(r) @@ -258,6 +254,17 @@ func startServer() { } } +// skipUploads 包装中间件,跳过 /uploads/ 路径 +func skipUploads(handler gin.HandlerFunc) gin.HandlerFunc { + return func(c *gin.Context) { + if strings.HasPrefix(c.Request.URL.Path, "/uploads/") { + c.Next() + return + } + handler(c) + } +} + func setupEmbeddedFrontend(r *gin.Engine) { distFS, err := fs.Sub(embeddedFiles, "embedded/dist") if err != nil { @@ -386,12 +393,6 @@ func isCompressibleContentType(contentType string) bool { func gzipMiddleware() gin.HandlerFunc { return func(c *gin.Context) { - // 静态文件下载路径跳过 gzip 处理,避免影响下载性能 - if strings.HasPrefix(c.Request.URL.Path, "/uploads/") { - c.Next() - return - } - if !strings.Contains(c.GetHeader("Accept-Encoding"), "gzip") { c.Next() return