From 2bac5d018e265025c69440c63178ea9711cce679 Mon Sep 17 00:00:00 2001 From: SheRunFeng <541899641@qq.com> Date: Tue, 11 Oct 2022 15:54:28 +0800 Subject: [PATCH] feat(): support emit render info --- .size-limit.js | 2 +- etc/brick-types.api.md | 13 +++++++++++ packages/brick-kit/src/core/Router.ts | 32 +++++++++++++++++++++++++++ packages/brick-types/src/runtime.ts | 9 ++++++++ 4 files changed, 55 insertions(+), 1 deletion(-) diff --git a/.size-limit.js b/.size-limit.js index 8e8736e4c1..df12f768e3 100644 --- a/.size-limit.js +++ b/.size-limit.js @@ -45,7 +45,7 @@ module.exports = [ }, { path: "packages/brick-kit/dist/index.esm.js", - limit: "111 KB", + limit: "115 KB", }, { path: "packages/brick-types/dist/index.esm.js", diff --git a/etc/brick-types.api.md b/etc/brick-types.api.md index 69af092c88..cfbcc021e0 100644 --- a/etc/brick-types.api.md +++ b/etc/brick-types.api.md @@ -1479,6 +1479,19 @@ export interface NavbarConf { menuBar: string; } +// @public (undocumented) +export interface NavTip { + // (undocumented) + closeable?: boolean; + // (undocumented) + info?: { + url: string; + label: string; + }; + // (undocumented) + text: string; +} + // Warning: (ae-internal-missing-underscore) The name "OmitListener" should be prefixed with an underscore because the declaration is marked as @internal // // @internal (undocumented) diff --git a/packages/brick-kit/src/core/Router.ts b/packages/brick-kit/src/core/Router.ts index 7f6e717c41..23a693f78e 100644 --- a/packages/brick-kit/src/core/Router.ts +++ b/packages/brick-kit/src/core/Router.ts @@ -6,6 +6,7 @@ import type { PluginLocation, PluginRuntimeContext, RuntimeMisc, + NavTip, } from "@next-core/brick-types"; import { restoreDynamicTemplates, @@ -234,6 +235,7 @@ export class Router { const history = getHistory(); history.unblock(); + const renderStartTime = performance.now(); // Create the page tracker before page load. // And the API Analyzer maybe disabled. const pageTracker = apiAnalyzer.getInstance()?.pageTracker(); @@ -559,6 +561,36 @@ export class Router { pageTitle: document.title, }); + const renderTime = performance.now() - renderStartTime; + const { loadTime = 0, loadInfoPage } = + this.kernel.bootstrapData.settings?.misc ?? {}; + if (currentApp.isBuildPush && loadTime > 0 && renderTime > loadTime) { + const getSecond = (time: number): number => + Math.floor(time * 100) / 100; + window.dispatchEvent( + new CustomEvent("app.bar.tips", { + detail: [ + { + text: `您的页面存在性能问题, 当前页面渲染时间为: ${getSecond( + renderTime / 1000 + )} 秒, 规定阈值为: ${getSecond( + (loadTime as number) / 1000 + )} 秒; 您已超过, 请您针对该页面进行性能优化!`, + closeable: false, + ...(loadInfoPage + ? { + info: { + label: "查看详情", + url: loadInfoPage as string, + }, + } + : {}), + }, + ], + }) + ); + } + // analytics page_view event userAnalytics.event("page_view", { micro_app_id: this.kernel.currentApp.id, diff --git a/packages/brick-types/src/runtime.ts b/packages/brick-types/src/runtime.ts index ab618c815e..db37747c31 100644 --- a/packages/brick-types/src/runtime.ts +++ b/packages/brick-types/src/runtime.ts @@ -321,6 +321,15 @@ export interface UserInfo { user_memo: string; } +export interface NavTip { + text: string; + closeable?: boolean; + info?: { + url: string; + label: string; + }; +} + /** @internal */ export interface MagicBrickConfig { selector: string;