mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 20:36:07 +01: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 {initGlobalEnterQuickSubmit, initGlobalFormDirtyLeaveConfirm} from './features/common-form.js';
 | 
			
		||||
 | 
			
		||||
// Init Gitea's Fomantic settings
 | 
			
		||||
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(() => {
 | 
			
		||||
  initGlobalDropdown();
 | 
			
		||||
  initGlobalTabularMenu();
 | 
			
		||||
  initGlobalShowModal();
 | 
			
		||||
  initGlobalFetchAction();
 | 
			
		||||
  initGlobalTooltips();
 | 
			
		||||
  initGlobalButtonClickOnEnter();
 | 
			
		||||
  initGlobalButtons();
 | 
			
		||||
  initGlobalCopyToClipboardListener();
 | 
			
		||||
  initGlobalDropzone();
 | 
			
		||||
  initGlobalEnterQuickSubmit();
 | 
			
		||||
  initGlobalFormDirtyLeaveConfirm();
 | 
			
		||||
  initGlobalDeleteButton();
 | 
			
		||||
  callInitFunctions([
 | 
			
		||||
    initGlobalDropdown,
 | 
			
		||||
    initGlobalTabularMenu,
 | 
			
		||||
    initGlobalShowModal,
 | 
			
		||||
    initGlobalFetchAction,
 | 
			
		||||
    initGlobalTooltips,
 | 
			
		||||
    initGlobalButtonClickOnEnter,
 | 
			
		||||
    initGlobalButtons,
 | 
			
		||||
    initGlobalCopyToClipboardListener,
 | 
			
		||||
    initGlobalDropzone,
 | 
			
		||||
    initGlobalEnterQuickSubmit,
 | 
			
		||||
    initGlobalFormDirtyLeaveConfirm,
 | 
			
		||||
    initGlobalDeleteButton,
 | 
			
		||||
 | 
			
		||||
  initCommonOrganization();
 | 
			
		||||
  initCommonIssueListQuickGoto();
 | 
			
		||||
    initCommonOrganization,
 | 
			
		||||
    initCommonIssueListQuickGoto,
 | 
			
		||||
 | 
			
		||||
  initCompSearchUserBox();
 | 
			
		||||
  initCompWebHookEditor();
 | 
			
		||||
    initCompSearchUserBox,
 | 
			
		||||
    initCompWebHookEditor,
 | 
			
		||||
 | 
			
		||||
  initInstall();
 | 
			
		||||
    initInstall,
 | 
			
		||||
 | 
			
		||||
  initHeadNavbarContentToggle();
 | 
			
		||||
  initFootLanguageMenu();
 | 
			
		||||
    initHeadNavbarContentToggle,
 | 
			
		||||
    initFootLanguageMenu,
 | 
			
		||||
 | 
			
		||||
  initCommentContent();
 | 
			
		||||
  initContextPopups();
 | 
			
		||||
  initHeatmap();
 | 
			
		||||
  initImageDiff();
 | 
			
		||||
  initMarkupAnchors();
 | 
			
		||||
  initMarkupContent();
 | 
			
		||||
  initSshKeyFormParser();
 | 
			
		||||
  initStopwatch();
 | 
			
		||||
  initTableSort();
 | 
			
		||||
  initAutoFocusEnd();
 | 
			
		||||
  initFindFileInRepo();
 | 
			
		||||
  initCopyContent();
 | 
			
		||||
    initCommentContent,
 | 
			
		||||
    initContextPopups,
 | 
			
		||||
    initHeatmap,
 | 
			
		||||
    initImageDiff,
 | 
			
		||||
    initMarkupAnchors,
 | 
			
		||||
    initMarkupContent,
 | 
			
		||||
    initSshKeyFormParser,
 | 
			
		||||
    initStopwatch,
 | 
			
		||||
    initTableSort,
 | 
			
		||||
    initAutoFocusEnd,
 | 
			
		||||
    initFindFileInRepo,
 | 
			
		||||
    initCopyContent,
 | 
			
		||||
 | 
			
		||||
  initAdminCommon();
 | 
			
		||||
  initAdminEmails();
 | 
			
		||||
  initAdminUserListSearchForm();
 | 
			
		||||
  initAdminConfigs();
 | 
			
		||||
  initAdminSelfCheck();
 | 
			
		||||
    initAdminCommon,
 | 
			
		||||
    initAdminEmails,
 | 
			
		||||
    initAdminUserListSearchForm,
 | 
			
		||||
    initAdminConfigs,
 | 
			
		||||
    initAdminSelfCheck,
 | 
			
		||||
 | 
			
		||||
  initDashboardRepoList();
 | 
			
		||||
    initDashboardRepoList,
 | 
			
		||||
 | 
			
		||||
  initNotificationCount();
 | 
			
		||||
  initNotificationsTable();
 | 
			
		||||
    initNotificationCount,
 | 
			
		||||
    initNotificationsTable,
 | 
			
		||||
 | 
			
		||||
  initOrgTeamSearchRepoBox();
 | 
			
		||||
  initOrgTeamSettings();
 | 
			
		||||
    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();
 | 
			
		||||
    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();
 | 
			
		||||
    initCommitStatuses,
 | 
			
		||||
    initCaptcha,
 | 
			
		||||
 | 
			
		||||
  initUserAuthOauth2();
 | 
			
		||||
  initUserAuthWebAuthn();
 | 
			
		||||
  initUserAuthWebAuthnRegister();
 | 
			
		||||
  initUserSettings();
 | 
			
		||||
  initRepoDiffView();
 | 
			
		||||
  initPdfViewer();
 | 
			
		||||
  initScopedAccessTokenCategories();
 | 
			
		||||
  initColorPickers();
 | 
			
		||||
    initUserAuthOauth2,
 | 
			
		||||
    initUserAuthWebAuthn,
 | 
			
		||||
    initUserAuthWebAuthnRegister,
 | 
			
		||||
    initUserSettings,
 | 
			
		||||
    initRepoDiffView,
 | 
			
		||||
    initPdfViewer,
 | 
			
		||||
    initScopedAccessTokenCategories,
 | 
			
		||||
    initColorPickers,
 | 
			
		||||
  ]);
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user