diff options
| author | Eltrac <hi@guhub.cn> | 2025-11-21 13:46:10 +0800 |
|---|---|---|
| committer | Eltrac <hi@guhub.cn> | 2025-11-21 13:46:10 +0800 |
| commit | 5205a76de15203655f9807578c8b5586f98a82bc (patch) | |
| tree | b22d0aeead6000d364a8bf1bb42516846b0a8b2b /main.go | |
| parent | 963b66e9e7047a188cc31319212d21a78cff49b0 (diff) | |
perf: cache stats for fasterlookup
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 35 |
1 files changed, 22 insertions, 13 deletions
@@ -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 }, } |
