Improve marketplace loading performance Fix https://github.com/siyuan-note/siyuan/issues/10973

This commit is contained in:
Daniel 2024-04-12 09:15:03 +08:00
parent 541483ed29
commit da59fa2afa
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
7 changed files with 49 additions and 0 deletions

View file

@ -51,6 +51,13 @@ func Icons() (icons []*Icon) {
repo := arg.(*StageRepo)
repoURL := repo.URL
if pkg, found := packageCache.Get(repoURL); found {
lock.Lock()
icons = append(icons, pkg.(*Icon))
lock.Unlock()
return
}
icon := &Icon{}
innerU := util.BazaarOSSServer + "/package/" + repoURL + "/icon.json"
innerResp, innerErr := httpclient.NewBrowserRequest().SetSuccessResult(icon).Get(innerU)
@ -91,6 +98,8 @@ func Icons() (icons []*Icon) {
lock.Lock()
icons = append(icons, icon)
lock.Unlock()
packageCache.SetDefault(repoURL, icon)
})
for _, repo := range stageIndex.Repos {
waitGroup.Add(1)

View file

@ -29,6 +29,7 @@ import (
"github.com/88250/lute"
"github.com/araddon/dateparse"
"github.com/imroc/req/v3"
gcache "github.com/patrickmn/go-cache"
"github.com/siyuan-note/filelock"
"github.com/siyuan-note/httpclient"
"github.com/siyuan-note/logging"
@ -680,3 +681,5 @@ func disallowDisplayBazaarPackage(pkg *Package) bool {
}
return false
}
var packageCache = gcache.New(6*time.Hour, 30*time.Minute) // [repoURL]*Package

View file

@ -55,6 +55,13 @@ func Plugins(frontend string) (plugins []*Plugin) {
repo := arg.(*StageRepo)
repoURL := repo.URL
if pkg, found := packageCache.Get(repoURL); found {
lock.Lock()
plugins = append(plugins, pkg.(*Plugin))
lock.Unlock()
return
}
plugin := &Plugin{}
innerU := util.BazaarOSSServer + "/package/" + repoURL + "/plugin.json"
innerResp, innerErr := httpclient.NewBrowserRequest().SetSuccessResult(plugin).Get(innerU)
@ -97,6 +104,8 @@ func Plugins(frontend string) (plugins []*Plugin) {
lock.Lock()
plugins = append(plugins, plugin)
lock.Unlock()
packageCache.SetDefault(repoURL, plugin)
})
for _, repo := range stageIndex.Repos {
waitGroup.Add(1)

View file

@ -53,6 +53,13 @@ func Templates() (templates []*Template) {
repo := arg.(*StageRepo)
repoURL := repo.URL
if pkg, found := packageCache.Get(repoURL); found {
lock.Lock()
templates = append(templates, pkg.(*Template))
lock.Unlock()
return
}
template := &Template{}
innerU := util.BazaarOSSServer + "/package/" + repoURL + "/template.json"
innerResp, innerErr := httpclient.NewBrowserRequest().SetSuccessResult(template).Get(innerU)
@ -93,6 +100,8 @@ func Templates() (templates []*Template) {
lock.Lock()
templates = append(templates, template)
lock.Unlock()
packageCache.SetDefault(repoURL, template)
})
for _, repo := range stageIndex.Repos {
waitGroup.Add(1)

View file

@ -53,6 +53,13 @@ func Themes() (ret []*Theme) {
repo := arg.(*StageRepo)
repoURL := repo.URL
if pkg, found := packageCache.Get(repoURL); found {
lock.Lock()
ret = append(ret, pkg.(*Theme))
lock.Unlock()
return
}
theme := &Theme{}
innerU := util.BazaarOSSServer + "/package/" + repoURL + "/theme.json"
innerResp, innerErr := httpclient.NewBrowserRequest().SetSuccessResult(theme).Get(innerU)
@ -93,6 +100,8 @@ func Themes() (ret []*Theme) {
lock.Lock()
ret = append(ret, theme)
lock.Unlock()
packageCache.SetDefault(repoURL, theme)
})
for _, repo := range stageIndex.Repos {
waitGroup.Add(1)

View file

@ -53,6 +53,13 @@ func Widgets() (widgets []*Widget) {
repo := arg.(*StageRepo)
repoURL := repo.URL
if pkg, found := packageCache.Get(repoURL); found {
lock.Lock()
widgets = append(widgets, pkg.(*Widget))
lock.Unlock()
return
}
widget := &Widget{}
innerU := util.BazaarOSSServer + "/package/" + repoURL + "/widget.json"
innerResp, innerErr := httpclient.NewBrowserRequest().SetSuccessResult(widget).Get(innerU)
@ -93,6 +100,8 @@ func Widgets() (widgets []*Widget) {
lock.Lock()
widgets = append(widgets, widget)
lock.Unlock()
packageCache.SetDefault(repoURL, widget)
})
for _, repo := range stageIndex.Repos {
waitGroup.Add(1)

View file

@ -210,6 +210,7 @@ var (
)
func RefreshCheckJob() {
go util.GetRhyResult(true) // 发一次请求进行结果缓存
go refreshSubscriptionExpirationRemind()
go refreshUser()
go refreshAnnouncement()