mirror of https://github.com/go-gitea/gitea.git
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. ![image](https://github.com/go-gitea/gitea/assets/2114189/a557b08e-6594-474b-81a3-03d5ac2bd68e)
This commit is contained in:
parent
1a811c0bd1
commit
1d76e9aabf
|
@ -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,
|
||||||
|
]);
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue