From d67dbf88ae073f07254cf05685415917240b1aee Mon Sep 17 00:00:00 2001 From: dragon Date: Fri, 14 Nov 2025 17:28:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 2 +- go.sum | 2 ++ pkg/core/domain.go | 5 ++-- pkg/core/meta.go | 2 +- pkg/server.go | 6 ++--- tests/core/test.go | 3 +-- tests/filter_qjs_test.go | 52 ++++++++++++++++++++++++++++++++++++++++ 7 files changed, 62 insertions(+), 10 deletions(-) diff --git a/go.mod b/go.mod index 3d82b4f..a20fba6 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/pkg/errors v0.9.1 github.com/stretchr/testify v1.11.1 go.uber.org/zap v1.27.0 - gopkg.d7z.net/middleware v0.0.0-20251113064153-9f946bf959f5 + gopkg.d7z.net/middleware v0.0.0-20251114092249-67753b883a45 gopkg.in/yaml.v3 v3.0.1 ) diff --git a/go.sum b/go.sum index 49c4b05..3408369 100644 --- a/go.sum +++ b/go.sum @@ -193,6 +193,8 @@ gopkg.d7z.net/middleware v0.0.0-20251113014952-1d1e87d199a4 h1:0O6cCLuM+IHaDqpBU gopkg.d7z.net/middleware v0.0.0-20251113014952-1d1e87d199a4/go.mod h1:BJ8ySXqmlBpM9B2zFJfmvYQ61XPA+G0O1VDmYomxyrM= gopkg.d7z.net/middleware v0.0.0-20251113064153-9f946bf959f5 h1:RwEXivoUP8qEbKxRWhJfaSTWHg+AEpV0p0K2DSG+LGw= gopkg.d7z.net/middleware v0.0.0-20251113064153-9f946bf959f5/go.mod h1:BJ8ySXqmlBpM9B2zFJfmvYQ61XPA+G0O1VDmYomxyrM= +gopkg.d7z.net/middleware v0.0.0-20251114092249-67753b883a45 h1:ujyhl4Di/z6fGOcIAqydzRQNwI13F9JD3xj8+s+rTVM= +gopkg.d7z.net/middleware v0.0.0-20251114092249-67753b883a45/go.mod h1:BJ8ySXqmlBpM9B2zFJfmvYQ61XPA+G0O1VDmYomxyrM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/pkg/core/domain.go b/pkg/core/domain.go index 0b36615..26b46c7 100644 --- a/pkg/core/domain.go +++ b/pkg/core/domain.go @@ -8,7 +8,6 @@ import ( "github.com/pkg/errors" "go.uber.org/zap" "gopkg.d7z.net/middleware/kv" - "gopkg.d7z.net/middleware/tools" ) type PageDomain struct { @@ -89,8 +88,8 @@ func (p *PageDomain) returnMeta(ctx context.Context, owner, repo, branch string, result.Owner = owner result.Repo = repo result.PageVFS = NewPageVFS(p.client, p.Backend, owner, repo, result.CommitID) - result.OrgDB = tools.NewPrefixKV(p.pageDB, p.pageDB.WithKey("org", owner)) - result.RepoDB = tools.NewPrefixKV(p.pageDB, p.pageDB.WithKey("repo", owner, repo)) + result.OrgDB = p.pageDB.Child("org").Child(owner) + result.RepoDB = p.pageDB.Child("repo").Child(owner).Child(repo) result.Path = strings.Join(path, "/") if err = p.alias.Bind(ctx, meta.Alias, result.Owner, result.Repo, branch); err != nil { diff --git a/pkg/core/meta.go b/pkg/core/meta.go index 7fda014..e442ece 100644 --- a/pkg/core/meta.go +++ b/pkg/core/meta.go @@ -26,7 +26,7 @@ type ServerMeta struct { Domain string client *http.Client - cache *tools.Cache[PageMetaContent] + cache *tools.KVCache[PageMetaContent] locker *utils.Locker } diff --git a/pkg/server.go b/pkg/server.go index a5f8c2d..06260d8 100644 --- a/pkg/server.go +++ b/pkg/server.go @@ -16,7 +16,6 @@ import ( "gopkg.d7z.net/gitea-pages/pkg/core" "gopkg.d7z.net/gitea-pages/pkg/filters" "gopkg.d7z.net/middleware/kv" - "gopkg.d7z.net/middleware/tools" ) var portExp = regexp.MustCompile(`:\d+$`) @@ -42,9 +41,10 @@ func NewPageServer( errorHandler func(w http.ResponseWriter, r *http.Request, err error), ) *Server { svcMeta := core.NewServerMeta(client, backend, domain, cache, cacheTTL) + cfgDB := db.Child("config") pageMeta := core.NewPageDomain(svcMeta, - core.NewDomainAlias(tools.NewPrefixKV(db, "config/alias")), - tools.NewPrefixKV(db, "config/pages"), + core.NewDomainAlias(cfgDB.Child("alias")), + cfgDB.Child("pages"), domain, defaultBranch) c, err := lru.New[string, glob.Glob](256) if err != nil { diff --git a/tests/core/test.go b/tests/core/test.go index fca1bcd..08176a0 100644 --- a/tests/core/test.go +++ b/tests/core/test.go @@ -12,7 +12,6 @@ import ( "go.uber.org/zap" "gopkg.d7z.net/gitea-pages/pkg" "gopkg.d7z.net/middleware/kv" - "gopkg.d7z.net/middleware/tools" ) type TestServer struct { @@ -43,7 +42,7 @@ func NewTestServer(domain string) *TestServer { domain, "gh-pages", memoryKV, - tools.NewPrefixKV(memoryKV, "cache"), + memoryKV.Child("cache"), 0, func(w http.ResponseWriter, r *http.Request, err error) { if errors.Is(err, os.ErrNotExist) { diff --git a/tests/filter_qjs_test.go b/tests/filter_qjs_test.go index 3a77655..614f707 100644 --- a/tests/filter_qjs_test.go +++ b/tests/filter_qjs_test.go @@ -56,3 +56,55 @@ routes: assert.NoError(t, err) assert.Equal(t, "POST /api/v1/fetch", string(data)) } + +func Benchmark_JS_Request(b *testing.B) { + // 初始化服务器(在基准测试外执行,避免计入时间) + server := core.NewDefaultTestServer() + defer server.Close() + server.AddFile("org1/repo1/gh-pages/index.html", "hello world") + server.AddFile("org1/repo1/gh-pages/index.js", `response.write(request.method+' /'+request.path)`) + server.AddFile("org1/repo1/gh-pages/.pages.yaml", ` +routes: +- path: "api/v1/**" + qjs: + exec: "index.js" +`) + + b.ResetTimer() // 重置计时器,只测量下面的操作 + + b.Run("OpenFile_root", func(b *testing.B) { + for i := 0; i < b.N; i++ { + data, _, err := server.OpenFile("https://org1.example.com/repo1/") + if err != nil { + b.Fatal(err) + } + if string(data) != "hello world" { + b.Fatalf("expected 'hello world', got '%s'", string(data)) + } + } + }) + + b.Run("OpenFile_api", func(b *testing.B) { + for i := 0; i < b.N; i++ { + data, _, err := server.OpenFile("https://org1.example.com/repo1/api/v1/fetch") + if err != nil { + b.Fatal(err) + } + if string(data) != "GET /api/v1/fetch" { + b.Fatalf("expected 'GET /api/v1/fetch', got '%s'", string(data)) + } + } + }) + + b.Run("OpenRequest_post", func(b *testing.B) { + for i := 0; i < b.N; i++ { + data, _, err := server.OpenRequest(http.MethodPost, "https://org1.example.com/repo1/api/v1/fetch", nil) + if err != nil { + b.Fatal(err) + } + if string(data) != "POST /api/v1/fetch" { + b.Fatalf("expected 'POST /api/v1/fetch', got '%s'", string(data)) + } + } + }) +}