mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 08:02:36 +09:00 
			
		
		
		
	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. 
		
			
				
	
	
		
			232 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			232 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// bootstrap module must be the first one to be imported, it handles webpack lazy-loading and global errors
 | 
						|
import './bootstrap.js';
 | 
						|
import './htmx.js';
 | 
						|
 | 
						|
import {initRepoActivityTopAuthorsChart} from './components/RepoActivityTopAuthors.vue';
 | 
						|
import {initScopedAccessTokenCategories} from './components/ScopedAccessTokenSelector.vue';
 | 
						|
import {initDashboardRepoList} from './components/DashboardRepoList.vue';
 | 
						|
 | 
						|
import {initGlobalCopyToClipboardListener} from './features/clipboard.js';
 | 
						|
import {initContextPopups} from './features/contextpopup.js';
 | 
						|
import {initRepoGraphGit} from './features/repo-graph.js';
 | 
						|
import {initHeatmap} from './features/heatmap.js';
 | 
						|
import {initImageDiff} from './features/imagediff.js';
 | 
						|
import {initRepoMigration} from './features/repo-migration.js';
 | 
						|
import {initRepoProject} from './features/repo-projects.js';
 | 
						|
import {initTableSort} from './features/tablesort.js';
 | 
						|
import {initAutoFocusEnd} from './features/autofocus-end.js';
 | 
						|
import {initAdminUserListSearchForm} from './features/admin/users.js';
 | 
						|
import {initAdminConfigs} from './features/admin/config.js';
 | 
						|
import {initMarkupAnchors} from './markup/anchors.js';
 | 
						|
import {initNotificationCount, initNotificationsTable} from './features/notification.js';
 | 
						|
import {initRepoIssueContentHistory} from './features/repo-issue-content.js';
 | 
						|
import {initStopwatch} from './features/stopwatch.js';
 | 
						|
import {initFindFileInRepo} from './features/repo-findfile.js';
 | 
						|
import {initCommentContent, initMarkupContent} from './markup/content.js';
 | 
						|
import {initPdfViewer} from './render/pdf.js';
 | 
						|
 | 
						|
import {initUserAuthOauth2} from './features/user-auth.js';
 | 
						|
import {
 | 
						|
  initRepoIssueDue,
 | 
						|
  initRepoIssueReferenceRepositorySearch,
 | 
						|
  initRepoIssueTimeTracking,
 | 
						|
  initRepoIssueWipTitle,
 | 
						|
  initRepoPullRequestMergeInstruction,
 | 
						|
  initRepoPullRequestAllowMaintainerEdit,
 | 
						|
  initRepoPullRequestReview, initRepoIssueSidebarList, initArchivedLabelHandler,
 | 
						|
} from './features/repo-issue.js';
 | 
						|
import {initRepoEllipsisButton, initCommitStatuses} from './features/repo-commit.js';
 | 
						|
import {initRepoTopicBar} from './features/repo-home.js';
 | 
						|
import {initAdminEmails} from './features/admin/emails.js';
 | 
						|
import {initAdminCommon} from './features/admin/common.js';
 | 
						|
import {initRepoTemplateSearch} from './features/repo-template.js';
 | 
						|
import {initRepoCodeView} from './features/repo-code.js';
 | 
						|
import {initSshKeyFormParser} from './features/sshkey-helper.js';
 | 
						|
import {initUserSettings} from './features/user-settings.js';
 | 
						|
import {initRepoArchiveLinks} from './features/repo-common.js';
 | 
						|
import {initRepoMigrationStatusChecker} from './features/repo-migrate.js';
 | 
						|
import {
 | 
						|
  initRepoSettingGitHook,
 | 
						|
  initRepoSettingsCollaboration,
 | 
						|
  initRepoSettingSearchTeamBox,
 | 
						|
} from './features/repo-settings.js';
 | 
						|
import {initRepoDiffView} from './features/repo-diff.js';
 | 
						|
import {initOrgTeamSearchRepoBox, initOrgTeamSettings} from './features/org-team.js';
 | 
						|
import {initUserAuthWebAuthn, initUserAuthWebAuthnRegister} from './features/user-auth-webauthn.js';
 | 
						|
import {initRepoRelease, initRepoReleaseNew} from './features/repo-release.js';
 | 
						|
import {initRepoEditor} from './features/repo-editor.js';
 | 
						|
import {initCompSearchUserBox} from './features/comp/SearchUserBox.js';
 | 
						|
import {initInstall} from './features/install.js';
 | 
						|
import {initCompWebHookEditor} from './features/comp/WebHookEditor.js';
 | 
						|
import {initRepoBranchButton} from './features/repo-branch.js';
 | 
						|
import {initCommonOrganization} from './features/common-organization.js';
 | 
						|
import {initRepoWikiForm} from './features/repo-wiki.js';
 | 
						|
import {initRepoCommentForm, initRepository} from './features/repo-legacy.js';
 | 
						|
import {initCopyContent} from './features/copycontent.js';
 | 
						|
import {initCaptcha} from './features/captcha.js';
 | 
						|
import {initRepositoryActionView} from './components/RepoActionView.vue';
 | 
						|
import {initGlobalTooltips} from './modules/tippy.js';
 | 
						|
import {initGiteaFomantic} from './modules/fomantic.js';
 | 
						|
import {initSubmitEventPolyfill, onDomReady} from './utils/dom.js';
 | 
						|
import {initRepoIssueList} from './features/repo-issue-list.js';
 | 
						|
import {initCommonIssueListQuickGoto} from './features/common-issue-list.js';
 | 
						|
import {initRepoContributors} from './features/contributors.js';
 | 
						|
import {initRepoCodeFrequency} from './features/code-frequency.js';
 | 
						|
import {initRepoRecentCommits} from './features/recent-commits.js';
 | 
						|
import {initRepoDiffCommitBranchesAndTags} from './features/repo-diff-commit.js';
 | 
						|
import {initDirAuto} from './modules/dirauto.js';
 | 
						|
import {initRepositorySearch} from './features/repo-search.js';
 | 
						|
import {initColorPickers} from './features/colorpicker.js';
 | 
						|
import {initAdminSelfCheck} from './features/admin/selfcheck.js';
 | 
						|
import {initGlobalFetchAction} from './features/common-fetch-action.js';
 | 
						|
import {
 | 
						|
  initFootLanguageMenu,
 | 
						|
  initGlobalDropdown,
 | 
						|
  initGlobalTabularMenu,
 | 
						|
  initHeadNavbarContentToggle,
 | 
						|
} from './features/common-page.js';
 | 
						|
import {
 | 
						|
  initGlobalButtonClickOnEnter,
 | 
						|
  initGlobalButtons,
 | 
						|
  initGlobalDeleteButton,
 | 
						|
  initGlobalShowModal,
 | 
						|
} from './features/common-button.js';
 | 
						|
import {initGlobalDropzone} from './features/dropzone.js';
 | 
						|
import {initGlobalEnterQuickSubmit, initGlobalFormDirtyLeaveConfirm} from './features/common-form.js';
 | 
						|
 | 
						|
initGiteaFomantic();
 | 
						|
initDirAuto();
 | 
						|
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(() => {
 | 
						|
  callInitFunctions([
 | 
						|
    initGlobalDropdown,
 | 
						|
    initGlobalTabularMenu,
 | 
						|
    initGlobalShowModal,
 | 
						|
    initGlobalFetchAction,
 | 
						|
    initGlobalTooltips,
 | 
						|
    initGlobalButtonClickOnEnter,
 | 
						|
    initGlobalButtons,
 | 
						|
    initGlobalCopyToClipboardListener,
 | 
						|
    initGlobalDropzone,
 | 
						|
    initGlobalEnterQuickSubmit,
 | 
						|
    initGlobalFormDirtyLeaveConfirm,
 | 
						|
    initGlobalDeleteButton,
 | 
						|
 | 
						|
    initCommonOrganization,
 | 
						|
    initCommonIssueListQuickGoto,
 | 
						|
 | 
						|
    initCompSearchUserBox,
 | 
						|
    initCompWebHookEditor,
 | 
						|
 | 
						|
    initInstall,
 | 
						|
 | 
						|
    initHeadNavbarContentToggle,
 | 
						|
    initFootLanguageMenu,
 | 
						|
 | 
						|
    initCommentContent,
 | 
						|
    initContextPopups,
 | 
						|
    initHeatmap,
 | 
						|
    initImageDiff,
 | 
						|
    initMarkupAnchors,
 | 
						|
    initMarkupContent,
 | 
						|
    initSshKeyFormParser,
 | 
						|
    initStopwatch,
 | 
						|
    initTableSort,
 | 
						|
    initAutoFocusEnd,
 | 
						|
    initFindFileInRepo,
 | 
						|
    initCopyContent,
 | 
						|
 | 
						|
    initAdminCommon,
 | 
						|
    initAdminEmails,
 | 
						|
    initAdminUserListSearchForm,
 | 
						|
    initAdminConfigs,
 | 
						|
    initAdminSelfCheck,
 | 
						|
 | 
						|
    initDashboardRepoList,
 | 
						|
 | 
						|
    initNotificationCount,
 | 
						|
    initNotificationsTable,
 | 
						|
 | 
						|
    initOrgTeamSearchRepoBox,
 | 
						|
    initOrgTeamSettings,
 | 
						|
 | 
						|
    initRepoActivityTopAuthorsChart,
 | 
						|
    initRepoArchiveLinks,
 | 
						|
    initRepoBranchButton,
 | 
						|
    initRepoCodeView,
 | 
						|
    initRepoCommentForm,
 | 
						|
    initRepoEllipsisButton,
 | 
						|
    initRepoDiffCommitBranchesAndTags,
 | 
						|
    initRepoEditor,
 | 
						|
    initRepoGraphGit,
 | 
						|
    initRepoIssueContentHistory,
 | 
						|
    initRepoIssueDue,
 | 
						|
    initRepoIssueList,
 | 
						|
    initRepoIssueSidebarList,
 | 
						|
    initArchivedLabelHandler,
 | 
						|
    initRepoIssueReferenceRepositorySearch,
 | 
						|
    initRepoIssueTimeTracking,
 | 
						|
    initRepoIssueWipTitle,
 | 
						|
    initRepoMigration,
 | 
						|
    initRepoMigrationStatusChecker,
 | 
						|
    initRepoProject,
 | 
						|
    initRepoPullRequestMergeInstruction,
 | 
						|
    initRepoPullRequestAllowMaintainerEdit,
 | 
						|
    initRepoPullRequestReview,
 | 
						|
    initRepoRelease,
 | 
						|
    initRepoReleaseNew,
 | 
						|
    initRepoSettingGitHook,
 | 
						|
    initRepoSettingSearchTeamBox,
 | 
						|
    initRepoSettingsCollaboration,
 | 
						|
    initRepoTemplateSearch,
 | 
						|
    initRepoTopicBar,
 | 
						|
    initRepoWikiForm,
 | 
						|
    initRepository,
 | 
						|
    initRepositoryActionView,
 | 
						|
    initRepositorySearch,
 | 
						|
    initRepoContributors,
 | 
						|
    initRepoCodeFrequency,
 | 
						|
    initRepoRecentCommits,
 | 
						|
 | 
						|
    initCommitStatuses,
 | 
						|
    initCaptcha,
 | 
						|
 | 
						|
    initUserAuthOauth2,
 | 
						|
    initUserAuthWebAuthn,
 | 
						|
    initUserAuthWebAuthnRegister,
 | 
						|
    initUserSettings,
 | 
						|
    initRepoDiffView,
 | 
						|
    initPdfViewer,
 | 
						|
    initScopedAccessTokenCategories,
 | 
						|
    initColorPickers,
 | 
						|
  ]);
 | 
						|
});
 |