From 06b1396b96dbefb4ab6c01b5d34b2150e1721165 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Tue, 25 Mar 2025 02:54:07 +0800 Subject: [PATCH] Cache file view --- cache.go | 22 ++++++++++++++++++---- http_handle_repo_tree.go | 19 +++++++++++++++---- diff --git a/cache.go b/cache.go index 8f9781b9e81b69871542bddf276a0b075c65ce49..7259e3840714a93ed180cf2481d180818163b16e 100644 --- a/cache.go +++ b/cache.go @@ -23,8 +23,8 @@ func init() { var err error treeReadmeCache, err = ristretto.NewCache(&ristretto.Config[[]byte, treeReadmeCacheEntry]{ NumCounters: 1e4, - MaxCost: 1 << 30, - BufferItems: 64, + MaxCost: 1 << 60, + BufferItems: 8192, }) if err != nil { clog.Fatal(1, "Error initializing indexPageCache: "+err.Error()) @@ -37,10 +37,24 @@ func init() { var err error indexCommitsDisplayCache, err = ristretto.NewCache(&ristretto.Config[[]byte, []commitDisplay]{ NumCounters: 1e4, - MaxCost: 1 << 30, - BufferItems: 64, + MaxCost: 1 << 60, + BufferItems: 8192, }) if err != nil { clog.Fatal(1, "Error initializing indexCommitsCache: "+err.Error()) } } + +var commitPathFileHTMLCache *ristretto.Cache[[]byte, template.HTML] + +func init() { + var err error + commitPathFileHTMLCache, err = ristretto.NewCache(&ristretto.Config[[]byte, template.HTML]{ + NumCounters: 1e4, + MaxCost: 1 << 60, + BufferItems: 8192, + }) + if err != nil { + clog.Fatal(1, "Error initializing commitPathFileHTMLCache: "+err.Error()) + } +} diff --git a/http_handle_repo_tree.go b/http_handle_repo_tree.go index 41ae93e777fd41b4cfe5e7023d907678d0b2a45d..38b533d462c5e14a1effb04a5bb044e8d240ce1e 100644 --- a/http_handle_repo_tree.go +++ b/http_handle_repo_tree.go @@ -42,7 +42,7 @@ refHashSlice = refHash[:] cacheHandle := append(refHashSlice, []byte(pathSpec)...) - fmt.Printf("%#v", string(cacheHandle)) + fmt.Printf("%#v\n", string(cacheHandle)) if value, found := treeReadmeCache.Get(cacheHandle); found { params["files"] = value.DisplayTree @@ -52,6 +52,15 @@ renderTemplate(writer, "repo_tree_dir", params) return } + if value, found := commitPathFileHTMLCache.Get(cacheHandle); found { + params["file_contents"] = value + renderTemplate(writer, "repo_tree_file", params) + return + } + start := time.Now() + + fmt.Println("miss") + var target *object.Tree if pathSpec == "" { if commitObject, err = repo.CommitObject(refHash); err != nil { @@ -63,7 +72,6 @@ errorPage500(writer, params, "Error getting file tree: "+err.Error()) return } - start := time.Now() displayTree := makeDisplayTree(tree) readmeFilename, readmeRendered := renderReadmeAtTree(tree) cost := time.Since(start).Nanoseconds() @@ -127,6 +135,10 @@ errorPage500(writer, params, "Error formatting code: "+err.Error()) return } formattedHTML = template.HTML(formattedHTMLStr.Bytes()) //#nosec G203 + cost := time.Since(start).Nanoseconds() + + commitPathFileHTMLCache.Set(cacheHandle, formattedHTML, cost) + params["file_contents"] = formattedHTML renderTemplate(writer, "repo_tree_file", params) @@ -138,7 +150,6 @@ http.Redirect(writer, request, path.Base(pathSpec)+"/", http.StatusSeeOther) return } - start := time.Now() displayTree := makeDisplayTree(target) readmeFilename, readmeRendered := renderReadmeAtTree(target) cost := time.Since(start).Nanoseconds() @@ -148,7 +159,7 @@ DisplayTree: displayTree, ReadmeFilename: readmeFilename, ReadmeRendered: readmeRendered, } - treeReadmeCache.Set(cacheHandle, entry, cost) + fmt.Println(treeReadmeCache.Set(cacheHandle, entry, cost)) params["readme_filename"], params["readme"] = readmeFilename, readmeRendered params["files"] = displayTree -- 2.48.1