summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorEltrac <hi@guhub.cn>2025-11-21 13:46:10 +0800
committerEltrac <hi@guhub.cn>2025-11-21 13:46:10 +0800
commit5205a76de15203655f9807578c8b5586f98a82bc (patch)
treeb22d0aeead6000d364a8bf1bb42516846b0a8b2b /main.go
parent963b66e9e7047a188cc31319212d21a78cff49b0 (diff)
perf: cache stats for fasterlookup
Diffstat (limited to 'main.go')
-rw-r--r--main.go35
1 files changed, 22 insertions, 13 deletions
diff --git a/main.go b/main.go
index fb72972..ae02d5f 100644
--- a/main.go
+++ b/main.go
@@ -24,21 +24,30 @@ func main() {
pkgName := cmd.Args().First()
// prompt
showLoadingPrompt(fmt.Sprintf("What the heck is \"%s\"", pkgName))
- // search, tidy up, and print
- fmlChan := make(chan *FormulaInfo)
- caskChan := make(chan *CaskInfo)
- rvsChan := make(chan []string)
- go func() {
- formula, cask := GetBrewInfo(pkgName)
- fmlChan <- formula
- caskChan <- cask
- }()
- go func() {
- rvsChan <- GetBrewUses(pkgName)
- }()
- stat := NewStatistics(<-fmlChan, <-caskChan, pkgName,<-rvsChan)
+ // try reading from cache
+ var stat *statistics
+ if stat = NewStatisticsFromCache(pkgName); stat == nil {
+ fmt.Println("cache not hit")
+ // cache not hit, then search
+ fmlChan := make(chan *FormulaInfo)
+ caskChan := make(chan *CaskInfo)
+ rvsChan := make(chan []string)
+ // start 2 goroutines, fetching formula/cask info and uses
+ go func() {
+ formula, cask := GetBrewInfo(pkgName)
+ fmlChan <- formula
+ caskChan <- cask
+ }()
+ go func() {
+ rvsChan <- GetBrewUses(pkgName)
+ }()
+ stat = NewStatistics(<-fmlChan, <-caskChan, pkgName,<-rvsChan)
+ stat.Cache()
+ }
+ // print
hideLoadingPrompt()
stat.Print()
+
return nil
},
}