diff options
author | Gusted <williamzijl7@hotmail.com> | 2022-04-26 20:34:30 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-26 16:34:30 -0400 |
commit | 076eaad7430dd80f202446487c99e95e8d803ab3 (patch) | |
tree | 6947ade9f26ffba8a23e384f7ad99562acd03f22 /routers | |
parent | 89eec15dd90e50c36051eb3f6a2ed2616c513ad8 (diff) | |
download | gitea-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.go | 1 | ||||
-rw-r--r-- | routers/web/repo/repo.go | 32 |
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, |