summaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
authorGusted <williamzijl7@hotmail.com>2022-04-26 20:34:30 +0000
committerGitHub <noreply@github.com>2022-04-26 16:34:30 -0400
commit076eaad7430dd80f202446487c99e95e8d803ab3 (patch)
tree6947ade9f26ffba8a23e384f7ad99562acd03f22 /routers
parent89eec15dd90e50c36051eb3f6a2ed2616c513ad8 (diff)
downloadgitea-076eaad7430dd80f202446487c99e95e8d803ab3.tar.gz
gitea-076eaad7430dd80f202446487c99e95e8d803ab3.zip
Improve dashboard's repo list performance (#18963)
* Improve dashboard's repo list performance - Avoid a lot of database lookups for all the repo's, by adding a undocumented "minimal" mode for this specific task, which returns the data that's only needed by this list which doesn't require any database lookups. - Makes fetching these list faster. - Less CPU overhead when a user visits home page. * Refactor javascript code + fix Fork icon - Use async in the function so we can use `await`. - Remove `archivedFilter` check for count, as it doesn't make sense to show the count of repos when you can't even see them(as they are filited away). * Add `count_only` * Remove uncessary code * Improve comment Co-authored-by: delvh <dev.lh@web.de> * Update web_src/js/components/DashboardRepoList.js Co-authored-by: delvh <dev.lh@web.de> * Update web_src/js/components/DashboardRepoList.js Co-authored-by: delvh <dev.lh@web.de> * By default apply minimal mode * Remove `minimal` paramater * Refactor count header * Simplify init Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: delvh <dev.lh@web.de> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: zeripath <art27@cantab.net>
Diffstat (limited to 'routers')
-rw-r--r--routers/api/v1/repo/repo.go1
-rw-r--r--routers/web/repo/repo.go32
2 files changed, 17 insertions, 16 deletions
diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go
index 16942dd3ba..cec4c93d19 100644
--- a/routers/api/v1/repo/repo.go
+++ b/routers/api/v1/repo/repo.go
@@ -218,7 +218,6 @@ func Search(ctx *context.APIContext) {
}
results[i] = convert.ToRepo(repo, accessMode)
}
-
ctx.SetLinkHeader(int(count), opts.PageSize)
ctx.SetTotalCountHeader(count)
ctx.JSON(http.StatusOK, api.SearchResults{
diff --git a/routers/web/repo/repo.go b/routers/web/repo/repo.go
index 60298121df..199651b2f1 100644
--- a/routers/web/repo/repo.go
+++ b/routers/web/repo/repo.go
@@ -590,26 +590,28 @@ func SearchRepo(ctx *context.Context) {
return
}
+ ctx.SetTotalCountHeader(count)
+
+ // To improve performance when only the count is requested
+ if ctx.FormBool("count_only") {
+ return
+ }
+
results := make([]*api.Repository, len(repos))
for i, repo := range repos {
- if err = repo.GetOwner(ctx); err != nil {
- ctx.JSON(http.StatusInternalServerError, api.SearchError{
- OK: false,
- Error: err.Error(),
- })
- return
- }
- accessMode, err := models.AccessLevel(ctx.Doer, repo)
- if err != nil {
- ctx.JSON(http.StatusInternalServerError, api.SearchError{
- OK: false,
- Error: err.Error(),
- })
+ results[i] = &api.Repository{
+ ID: repo.ID,
+ FullName: repo.FullName(),
+ Fork: repo.IsFork,
+ Private: repo.IsPrivate,
+ Template: repo.IsTemplate,
+ Mirror: repo.IsMirror,
+ Stars: repo.NumStars,
+ HTMLURL: repo.HTMLURL(),
+ Internal: !repo.IsPrivate && repo.Owner.Visibility == api.VisibleTypePrivate,
}
- results[i] = convert.ToRepo(repo, accessMode)
}
- ctx.SetTotalCountHeader(count)
ctx.JSON(http.StatusOK, api.SearchResults{
OK: true,
Data: results,