From 7e5092179e5d4cddc56d3edb306242f101301c9c Mon Sep 17 00:00:00 2001 From: wjqserver <114663932+WJQSERVER@users.noreply.github.com> Date: Fri, 28 Mar 2025 10:41:02 +0800 Subject: [PATCH 1/2] optimize frontend load --- main.go | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/main.go b/main.go index 1537748..cc8914f 100644 --- a/main.go +++ b/main.go @@ -146,7 +146,7 @@ func InitReq(cfg *config.Config) { } // loadEmbeddedPages 加载嵌入式页面资源 -func loadEmbeddedPages(cfg *config.Config) (fs.FS, error) { +func loadEmbeddedPages(cfg *config.Config) (fs.FS, fs.FS, error) { var pages fs.FS var err error switch cfg.Pages.Theme { @@ -168,9 +168,15 @@ func loadEmbeddedPages(cfg *config.Config) (fs.FS, error) { } if err != nil { - return nil, fmt.Errorf("failed to load embedded pages: %w", err) + return nil, nil, fmt.Errorf("failed to load embedded pages: %w", err) } - return pages, nil + + var assets fs.FS + assets, err = fs.Sub(pagesFS, "pages/assets") + if err != nil { + return nil, nil, fmt.Errorf("failed to load embedded assets: %w", err) + } + return pages, assets, nil } // setupPages 设置页面路由 @@ -178,7 +184,7 @@ func setupPages(cfg *config.Config, router *gin.Engine) { switch cfg.Pages.Mode { case "internal": // 加载嵌入式资源 - pages, err := loadEmbeddedPages(cfg) + pages, assets, err := loadEmbeddedPages(cfg) if err != nil { logError("Failed when processing internal pages: %s", err) return @@ -189,7 +195,8 @@ func setupPages(cfg *config.Config, router *gin.Engine) { router.GET("/favicon.ico", gin.WrapH(http.FileServer(http.FS(pages)))) router.GET("/script.js", gin.WrapH(http.FileServer(http.FS(pages)))) router.GET("/style.css", gin.WrapH(http.FileServer(http.FS(pages)))) - //router.GET("/bootstrap.min.css", gin.WrapH(http.FileServer(http.FS(pages)))) + router.GET("/bootstrap.min.css", gin.WrapH(http.FileServer(http.FS(assets)))) + router.GET("/bootstrap.bundle.min.js", gin.WrapH(http.FileServer(http.FS(assets)))) case "external": // 设置外部资源路径 @@ -197,7 +204,8 @@ func setupPages(cfg *config.Config, router *gin.Engine) { faviconPath := fmt.Sprintf("%s/favicon.ico", cfg.Pages.StaticDir) javascriptsPath := fmt.Sprintf("%s/script.js", cfg.Pages.StaticDir) stylesheetsPath := fmt.Sprintf("%s/style.css", cfg.Pages.StaticDir) - //bootstrapPath := fmt.Sprintf("%s/bootstrap.min.css", cfg.Pages.StaticDir) + bootstrapPath := fmt.Sprintf("%s/bootstrap.min.css", cfg.Pages.StaticDir) + bootstrapBundlePath := fmt.Sprintf("%s/bootstrap.bundle.min.js", cfg.Pages.StaticDir) // 设置外部资源路由 router.GET("/", func(c *gin.Context) { @@ -207,6 +215,9 @@ func setupPages(cfg *config.Config, router *gin.Engine) { router.StaticFile("/favicon.ico", faviconPath) router.StaticFile("/script.js", javascriptsPath) router.StaticFile("/style.css", stylesheetsPath) + router.StaticFile("/bootstrap.min.css", bootstrapPath) + router.StaticFile("/bootstrap.bundle.min.js", bootstrapBundlePath) + //router.StaticFile("/bootstrap.min.css", bootstrapPath) default: @@ -214,7 +225,7 @@ func setupPages(cfg *config.Config, router *gin.Engine) { logWarning("Invalid Pages Mode: %s, using default embedded theme", cfg.Pages.Mode) // 加载嵌入式资源 - pages, err := loadEmbeddedPages(cfg) + pages, assets, err := loadEmbeddedPages(cfg) if err != nil { logError("Failed when processing pages: %s", err) return @@ -224,6 +235,8 @@ func setupPages(cfg *config.Config, router *gin.Engine) { router.GET("/favicon.ico", gin.WrapH(http.FileServer(http.FS(pages)))) router.GET("/script.js", gin.WrapH(http.FileServer(http.FS(pages)))) router.GET("/style.css", gin.WrapH(http.FileServer(http.FS(pages)))) + router.GET("/bootstrap.min.css", gin.WrapH(http.FileServer(http.FS(assets)))) + router.GET("/bootstrap.bundle.min.js", gin.WrapH(http.FileServer(http.FS(assets)))) } } From 8adc9c87f9de7dd9424bd867a703977d74505910 Mon Sep 17 00:00:00 2001 From: wjqserver <114663932+WJQSERVER@users.noreply.github.com> Date: Sat, 29 Mar 2025 11:02:54 +0800 Subject: [PATCH 2/2] 2.6.2 --- CHANGELOG.md | 19 +++++++++++++++++-- VERSION | 2 +- go.mod | 4 ++-- go.sum | 8 ++++---- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08e0a72..2ccf6f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # 更新日志 +2.6.2 - 2025-03-29 +--- +- BACKPORT: 反向移植前端资源加载改进 + +e3.0.6 - 2025-03-28 +--- +- ATTENTION: 此版本是实验性的, 请确保了解这一点 +- FIX: 修正状态码相关问题(开发遗留所致) + +e3.0.5 - 2025-03-28 +--- +- ATTENTION: 此版本是实验性的, 请确保了解这一点 +- CHANGE: 增加默认配置生成 +- CHANGE: 优化前端资源加载 + 2.6.1 - 2025-03-27 --- - CHANGE: 改进`matcher`组件 @@ -42,7 +57,7 @@ e3.0.3rc1 - 2025-03-26 e3.0.2 - 2025-03-21 --- - ATTENTION: 此版本是实验性的, 请确保了解这一点 -- RELEASE: 在此表达对各位的歉意, v3迁移到HertZ带来了许多问题; 此版本完善v3的同时, 修正已知问题; v3会与v2.4.0及以上版本保证兼容关系, 可平顺升级; +- RELEASE: 在此表达对各位的歉意, v3迁移到HertZ带来了许多问题; 此版本完善v3的同时, 修正已知问题; - FIX: 使用等效`c.Writer()`, 回归v2.5.0 func以修正问题 - CHANGE: 更新相关依赖 @@ -54,7 +69,7 @@ e3.0.2 - 2025-03-21 e3.0.1 - 2025-03-21 --- - ATTENTION: 此版本是实验性的, 请确保了解这一点 -- RELEASE: Next Step; 下一步; 完善v3的同时, 修正已知问题; v3会与v2.4.0及以上版本保证兼容关系, 可平顺升级; +- RELEASE: Next Step; 下一步; 完善v3的同时, 修正已知问题; - CHANGE: 改进cli - CHANGE: 重写`ProcessLinksAndWriteChunked`(脚本嵌套加速处理器), 修正已知问题的同时提高性能与效率 - CHANGE: 完善`gitreq`部分 diff --git a/VERSION b/VERSION index b8d12d7..d5724cd 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.6.1 \ No newline at end of file +2.6.2 \ No newline at end of file diff --git a/go.mod b/go.mod index ef5c353..81fed1c 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/WJQSERVER-STUDIO/go-utils/logger v1.5.0 github.com/gin-gonic/gin v1.10.0 github.com/satomitouka/touka-httpc v0.3.3 - golang.org/x/net v0.37.0 + golang.org/x/net v0.38.0 golang.org/x/time v0.11.0 ) @@ -21,7 +21,7 @@ require ( github.com/gin-contrib/sse v1.0.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.25.0 // indirect + github.com/go-playground/validator/v10 v10.26.0 // indirect github.com/goccy/go-json v0.10.5 // indirect github.com/google/go-cmp v0.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect diff --git a/go.sum b/go.sum index 601ffdd..447490b 100644 --- a/go.sum +++ b/go.sum @@ -30,8 +30,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.25.0 h1:5Dh7cjvzR7BRZadnsVOzPhWsrwUr0nmsZJxEAnFLNO8= -github.com/go-playground/validator/v10 v10.25.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1x/7cByt++cQ+YOuDM5wus= +github.com/go-playground/validator/v10 v10.26.0 h1:SP05Nqhjcvz81uJaRfEV0YBSSSGMc/iMaVtFbr3Sw2k= +github.com/go-playground/validator/v10 v10.26.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo= github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= @@ -91,8 +91,8 @@ golang.org/x/arch v0.15.0 h1:QtOrQd0bTUnhNVNndMpLHNWrDmYzZ2KDqSrEymqInZw= golang.org/x/arch v0.15.0/go.mod h1:JmwW7aLIoRUKgaTzhkiEFxvcEiQGyOg9BMonBJUS7EE= golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= -golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= -golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= +golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=