mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 03:18:24 +00:00 
			
		
		
		
	Add simple JS init performance trace (#31459)
Related to #23461, and help some cases like #31412 For developers, they could use browser's Performance tool to collect performance data, while this PR is also quite handy to optimize the `index.js`. For end users, this PR is simple enough and could figure out the slow function quickly. 
This commit is contained in:
		| @@ -94,110 +94,138 @@ import { | |||||||
| import {initGlobalDropzone} from './features/dropzone.js'; | import {initGlobalDropzone} from './features/dropzone.js'; | ||||||
| import {initGlobalEnterQuickSubmit, initGlobalFormDirtyLeaveConfirm} from './features/common-form.js'; | import {initGlobalEnterQuickSubmit, initGlobalFormDirtyLeaveConfirm} from './features/common-form.js'; | ||||||
|  |  | ||||||
| // Init Gitea's Fomantic settings |  | ||||||
| initGiteaFomantic(); | initGiteaFomantic(); | ||||||
| initDirAuto(); | initDirAuto(); | ||||||
| initSubmitEventPolyfill(); | initSubmitEventPolyfill(); | ||||||
|  |  | ||||||
|  | function callInitFunctions(functions) { | ||||||
|  |   // Start performance trace by accessing a URL by "https://localhost/?_ui_performance_trace=1" or "https://localhost/?key=value&_ui_performance_trace=1" | ||||||
|  |   // It is a quick check, no side effect so no need to do slow URL parsing. | ||||||
|  |   const initStart = performance.now(); | ||||||
|  |   if (window.location.search.includes('_ui_performance_trace=1')) { | ||||||
|  |     let results = []; | ||||||
|  |     for (const func of functions) { | ||||||
|  |       const start = performance.now(); | ||||||
|  |       func(); | ||||||
|  |       results.push({name: func.name, dur: performance.now() - start}); | ||||||
|  |     } | ||||||
|  |     results = results.sort((a, b) => b.dur - a.dur); | ||||||
|  |     for (let i = 0; i < 20 && i < results.length; i++) { | ||||||
|  |       // eslint-disable-next-line no-console | ||||||
|  |       console.log(`performance trace: ${results[i].name} ${results[i].dur.toFixed(3)}`); | ||||||
|  |     } | ||||||
|  |   } else { | ||||||
|  |     for (const func of functions) { | ||||||
|  |       func(); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   const initDur = performance.now() - initStart; | ||||||
|  |   if (initDur > 500) { | ||||||
|  |     console.error(`slow init functions took ${initDur.toFixed(3)}ms`); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| onDomReady(() => { | onDomReady(() => { | ||||||
|   initGlobalDropdown(); |   callInitFunctions([ | ||||||
|   initGlobalTabularMenu(); |     initGlobalDropdown, | ||||||
|   initGlobalShowModal(); |     initGlobalTabularMenu, | ||||||
|   initGlobalFetchAction(); |     initGlobalShowModal, | ||||||
|   initGlobalTooltips(); |     initGlobalFetchAction, | ||||||
|   initGlobalButtonClickOnEnter(); |     initGlobalTooltips, | ||||||
|   initGlobalButtons(); |     initGlobalButtonClickOnEnter, | ||||||
|   initGlobalCopyToClipboardListener(); |     initGlobalButtons, | ||||||
|   initGlobalDropzone(); |     initGlobalCopyToClipboardListener, | ||||||
|   initGlobalEnterQuickSubmit(); |     initGlobalDropzone, | ||||||
|   initGlobalFormDirtyLeaveConfirm(); |     initGlobalEnterQuickSubmit, | ||||||
|   initGlobalDeleteButton(); |     initGlobalFormDirtyLeaveConfirm, | ||||||
|  |     initGlobalDeleteButton, | ||||||
|  |  | ||||||
|   initCommonOrganization(); |     initCommonOrganization, | ||||||
|   initCommonIssueListQuickGoto(); |     initCommonIssueListQuickGoto, | ||||||
|  |  | ||||||
|   initCompSearchUserBox(); |     initCompSearchUserBox, | ||||||
|   initCompWebHookEditor(); |     initCompWebHookEditor, | ||||||
|  |  | ||||||
|   initInstall(); |     initInstall, | ||||||
|  |  | ||||||
|   initHeadNavbarContentToggle(); |     initHeadNavbarContentToggle, | ||||||
|   initFootLanguageMenu(); |     initFootLanguageMenu, | ||||||
|  |  | ||||||
|   initCommentContent(); |     initCommentContent, | ||||||
|   initContextPopups(); |     initContextPopups, | ||||||
|   initHeatmap(); |     initHeatmap, | ||||||
|   initImageDiff(); |     initImageDiff, | ||||||
|   initMarkupAnchors(); |     initMarkupAnchors, | ||||||
|   initMarkupContent(); |     initMarkupContent, | ||||||
|   initSshKeyFormParser(); |     initSshKeyFormParser, | ||||||
|   initStopwatch(); |     initStopwatch, | ||||||
|   initTableSort(); |     initTableSort, | ||||||
|   initAutoFocusEnd(); |     initAutoFocusEnd, | ||||||
|   initFindFileInRepo(); |     initFindFileInRepo, | ||||||
|   initCopyContent(); |     initCopyContent, | ||||||
|  |  | ||||||
|   initAdminCommon(); |     initAdminCommon, | ||||||
|   initAdminEmails(); |     initAdminEmails, | ||||||
|   initAdminUserListSearchForm(); |     initAdminUserListSearchForm, | ||||||
|   initAdminConfigs(); |     initAdminConfigs, | ||||||
|   initAdminSelfCheck(); |     initAdminSelfCheck, | ||||||
|  |  | ||||||
|   initDashboardRepoList(); |     initDashboardRepoList, | ||||||
|  |  | ||||||
|   initNotificationCount(); |     initNotificationCount, | ||||||
|   initNotificationsTable(); |     initNotificationsTable, | ||||||
|  |  | ||||||
|   initOrgTeamSearchRepoBox(); |     initOrgTeamSearchRepoBox, | ||||||
|   initOrgTeamSettings(); |     initOrgTeamSettings, | ||||||
|  |  | ||||||
|   initRepoActivityTopAuthorsChart(); |     initRepoActivityTopAuthorsChart, | ||||||
|   initRepoArchiveLinks(); |     initRepoArchiveLinks, | ||||||
|   initRepoBranchButton(); |     initRepoBranchButton, | ||||||
|   initRepoCodeView(); |     initRepoCodeView, | ||||||
|   initRepoCommentForm(); |     initRepoCommentForm, | ||||||
|   initRepoEllipsisButton(); |     initRepoEllipsisButton, | ||||||
|   initRepoDiffCommitBranchesAndTags(); |     initRepoDiffCommitBranchesAndTags, | ||||||
|   initRepoEditor(); |     initRepoEditor, | ||||||
|   initRepoGraphGit(); |     initRepoGraphGit, | ||||||
|   initRepoIssueContentHistory(); |     initRepoIssueContentHistory, | ||||||
|   initRepoIssueDue(); |     initRepoIssueDue, | ||||||
|   initRepoIssueList(); |     initRepoIssueList, | ||||||
|   initRepoIssueSidebarList(); |     initRepoIssueSidebarList, | ||||||
|   initArchivedLabelHandler(); |     initArchivedLabelHandler, | ||||||
|   initRepoIssueReferenceRepositorySearch(); |     initRepoIssueReferenceRepositorySearch, | ||||||
|   initRepoIssueTimeTracking(); |     initRepoIssueTimeTracking, | ||||||
|   initRepoIssueWipTitle(); |     initRepoIssueWipTitle, | ||||||
|   initRepoMigration(); |     initRepoMigration, | ||||||
|   initRepoMigrationStatusChecker(); |     initRepoMigrationStatusChecker, | ||||||
|   initRepoProject(); |     initRepoProject, | ||||||
|   initRepoPullRequestMergeInstruction(); |     initRepoPullRequestMergeInstruction, | ||||||
|   initRepoPullRequestAllowMaintainerEdit(); |     initRepoPullRequestAllowMaintainerEdit, | ||||||
|   initRepoPullRequestReview(); |     initRepoPullRequestReview, | ||||||
|   initRepoRelease(); |     initRepoRelease, | ||||||
|   initRepoReleaseNew(); |     initRepoReleaseNew, | ||||||
|   initRepoSettingGitHook(); |     initRepoSettingGitHook, | ||||||
|   initRepoSettingSearchTeamBox(); |     initRepoSettingSearchTeamBox, | ||||||
|   initRepoSettingsCollaboration(); |     initRepoSettingsCollaboration, | ||||||
|   initRepoTemplateSearch(); |     initRepoTemplateSearch, | ||||||
|   initRepoTopicBar(); |     initRepoTopicBar, | ||||||
|   initRepoWikiForm(); |     initRepoWikiForm, | ||||||
|   initRepository(); |     initRepository, | ||||||
|   initRepositoryActionView(); |     initRepositoryActionView, | ||||||
|   initRepositorySearch(); |     initRepositorySearch, | ||||||
|   initRepoContributors(); |     initRepoContributors, | ||||||
|   initRepoCodeFrequency(); |     initRepoCodeFrequency, | ||||||
|   initRepoRecentCommits(); |     initRepoRecentCommits, | ||||||
|  |  | ||||||
|   initCommitStatuses(); |     initCommitStatuses, | ||||||
|   initCaptcha(); |     initCaptcha, | ||||||
|  |  | ||||||
|   initUserAuthOauth2(); |     initUserAuthOauth2, | ||||||
|   initUserAuthWebAuthn(); |     initUserAuthWebAuthn, | ||||||
|   initUserAuthWebAuthnRegister(); |     initUserAuthWebAuthnRegister, | ||||||
|   initUserSettings(); |     initUserSettings, | ||||||
|   initRepoDiffView(); |     initRepoDiffView, | ||||||
|   initPdfViewer(); |     initPdfViewer, | ||||||
|   initScopedAccessTokenCategories(); |     initScopedAccessTokenCategories, | ||||||
|   initColorPickers(); |     initColorPickers, | ||||||
|  |   ]); | ||||||
| }); | }); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user