mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-26 12:27:06 +00:00 
			
		
		
		
	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>
This commit is contained in:
		| @@ -298,36 +298,41 @@ function initVueComponents() { | ||||
|         this.searchRepos(); | ||||
|       }, | ||||
|  | ||||
|       searchRepos() { | ||||
|       async searchRepos() { | ||||
|         this.isLoading = true; | ||||
|  | ||||
|         if (!this.reposTotalCount) { | ||||
|           const totalCountSearchURL = `${this.subUrl}/repo/search?sort=updated&order=desc&uid=${this.uid}&team_id=${this.teamId}&q=&page=1&mode=`; | ||||
|           $.getJSON(totalCountSearchURL, (_result, _textStatus, request) => { | ||||
|             this.reposTotalCount = request.getResponseHeader('X-Total-Count'); | ||||
|           }); | ||||
|         } | ||||
|  | ||||
|         const searchedMode = this.repoTypes[this.reposFilter].searchMode; | ||||
|         const searchedURL = this.searchURL; | ||||
|         const searchedQuery = this.searchQuery; | ||||
|  | ||||
|         $.getJSON(searchedURL, (result, _textStatus, request) => { | ||||
|           if (searchedURL === this.searchURL) { | ||||
|             this.repos = result.data; | ||||
|             const count = request.getResponseHeader('X-Total-Count'); | ||||
|             if (searchedQuery === '' && searchedMode === '' && this.archivedFilter === 'both') { | ||||
|               this.reposTotalCount = count; | ||||
|             } | ||||
|             Vue.set(this.counts, `${this.reposFilter}:${this.archivedFilter}:${this.privateFilter}`, count); | ||||
|             this.finalPage = Math.ceil(count / this.searchLimit); | ||||
|             this.updateHistory(); | ||||
|         let response, json; | ||||
|         try { | ||||
|           if (!this.reposTotalCount) { | ||||
|             const totalCountSearchURL = `${this.subUrl}/repo/search?count_only=1&uid=${this.uid}&team_id=${this.teamId}&q=&page=1&mode=`; | ||||
|             response = await fetch(totalCountSearchURL); | ||||
|             this.reposTotalCount = response.headers.get('X-Total-Count'); | ||||
|           } | ||||
|         }).always(() => { | ||||
|  | ||||
|           response = await fetch(searchedURL); | ||||
|           json = await response.json(); | ||||
|         } catch { | ||||
|           if (searchedURL === this.searchURL) { | ||||
|             this.isLoading = false; | ||||
|           } | ||||
|         }); | ||||
|           return; | ||||
|         } | ||||
|  | ||||
|         if (searchedURL === this.searchURL) { | ||||
|           this.repos = json.data; | ||||
|           const count = response.headers.get('X-Total-Count'); | ||||
|           if (searchedQuery === '' && searchedMode === '' && this.archivedFilter === 'both') { | ||||
|             this.reposTotalCount = count; | ||||
|           } | ||||
|           Vue.set(this.counts, `${this.reposFilter}:${this.archivedFilter}:${this.privateFilter}`, count); | ||||
|           this.finalPage = Math.ceil(count / this.searchLimit); | ||||
|           this.updateHistory(); | ||||
|           this.isLoading = false; | ||||
|         } | ||||
|       }, | ||||
|  | ||||
|       repoIcon(repo) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Gusted
					Gusted