@be-link/cls-logger 1.0.1-beta.25 → 1.0.1-beta.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.umd.js CHANGED
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('web-vitals')) :
3
- typeof define === 'function' && define.amd ? define(['exports', 'web-vitals'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.BeLinkClsLogger = {}, global.webVitals));
5
- })(this, (function (exports, webVitals) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.BeLinkClsLogger = {}));
5
+ })(this, (function (exports) { 'use strict';
6
6
 
7
7
  function isPlainObject(value) {
8
8
  return Object.prototype.toString.call(value) === '[object Object]';
@@ -1995,10 +1995,14 @@
1995
1995
  return '';
1996
1996
  }
1997
1997
  }
1998
- /**
1999
- * 安装浏览器性能监控
2000
- * 使用 Google web-vitals 库实现 Core Web Vitals 指标采集
2001
- */
1998
+ function reportMetric(report, reportType, metric, value, extra = {}) {
1999
+ report(reportType, {
2000
+ pagePath: getPagePath(),
2001
+ metric,
2002
+ value,
2003
+ ...extra,
2004
+ });
2005
+ }
2002
2006
  function installBrowserPerformanceMonitor(report, options) {
2003
2007
  if (typeof window === 'undefined')
2004
2008
  return;
@@ -2007,100 +2011,145 @@
2007
2011
  return;
2008
2012
  w.__beLinkClsLoggerPerfInstalled__ = true;
2009
2013
  const ignoreUrls = [...DEFAULT_IGNORE, ...(options.ignoreUrls ?? [])];
2010
- // Web Vitals: 使用 Google web-vitals 库
2011
- // 这个库会自动处理:
2012
- // - LCP 在用户交互后停止观察
2013
- // - firstHiddenTime 过滤(页面隐藏后的数据不计入)
2014
- // - CLS 5秒会话窗口算法
2015
- // - BFCache 恢复时自动重置指标
2016
- if (options.webVitals) {
2017
- // FCP
2014
+ // Navigation timing: TTFB
2015
+ if (options.navigationTiming) {
2018
2016
  try {
2019
- webVitals.onFCP((metric) => {
2020
- report(options.reportType, {
2021
- pagePath: getPagePath(),
2022
- metric: 'FCP',
2023
- value: metric.value,
2024
- unit: 'ms',
2025
- rating: metric.rating,
2026
- id: metric.id,
2027
- navigationType: metric.navigationType,
2028
- });
2029
- });
2017
+ const navEntries = performance.getEntriesByType?.('navigation');
2018
+ const nav = Array.isArray(navEntries) ? navEntries[0] : undefined;
2019
+ if (nav && typeof nav === 'object') {
2020
+ const ttfb = typeof nav.responseStart === 'number' && typeof nav.requestStart === 'number'
2021
+ ? nav.responseStart - nav.requestStart
2022
+ : -1;
2023
+ if (ttfb >= 0 && sampleHit$1(options.sampleRate))
2024
+ reportMetric(report, options.reportType, 'TTFB', ttfb, { unit: 'ms' });
2025
+ }
2030
2026
  }
2031
2027
  catch {
2032
2028
  // ignore
2033
2029
  }
2034
- // LCP(自动处理用户交互后停止)
2030
+ }
2031
+ // Web Vitals: FCP/LCP/CLS/FID
2032
+ if (options.webVitals && typeof globalThis.PerformanceObserver === 'function') {
2033
+ // FCP
2035
2034
  try {
2036
- webVitals.onLCP((metric) => {
2037
- report(options.reportType, {
2038
- pagePath: getPagePath(),
2039
- metric: 'LCP',
2040
- value: metric.value,
2041
- unit: 'ms',
2042
- rating: metric.rating,
2043
- id: metric.id,
2044
- navigationType: metric.navigationType,
2045
- });
2035
+ const po = new PerformanceObserver((list) => {
2036
+ try {
2037
+ if (!sampleHit$1(options.sampleRate))
2038
+ return;
2039
+ for (const entry of list.getEntries()) {
2040
+ if (entry?.name === 'first-contentful-paint' && typeof entry.startTime === 'number') {
2041
+ reportMetric(report, options.reportType, 'FCP', entry.startTime, { unit: 'ms' });
2042
+ }
2043
+ }
2044
+ }
2045
+ catch {
2046
+ // ignore
2047
+ }
2046
2048
  });
2049
+ po.observe({ type: 'paint', buffered: true });
2047
2050
  }
2048
2051
  catch {
2049
2052
  // ignore
2050
2053
  }
2051
- // CLS(自动处理会话窗口)
2054
+ // LCP(最后一次为准)
2055
+ let lastLcp = null;
2052
2056
  try {
2053
- webVitals.onCLS((metric) => {
2054
- report(options.reportType, {
2055
- pagePath: getPagePath(),
2056
- metric: 'CLS',
2057
- value: metric.value,
2058
- unit: 'score',
2059
- rating: metric.rating,
2060
- id: metric.id,
2061
- navigationType: metric.navigationType,
2062
- });
2057
+ const po = new PerformanceObserver((list) => {
2058
+ try {
2059
+ const entries = list.getEntries();
2060
+ if (entries && entries.length)
2061
+ lastLcp = entries[entries.length - 1];
2062
+ }
2063
+ catch {
2064
+ // ignore
2065
+ }
2063
2066
  });
2067
+ po.observe({ type: 'largest-contentful-paint', buffered: true });
2068
+ const flushLcp = () => {
2069
+ try {
2070
+ if (!lastLcp)
2071
+ return;
2072
+ if (!sampleHit$1(options.sampleRate))
2073
+ return;
2074
+ if (typeof lastLcp.startTime === 'number')
2075
+ reportMetric(report, options.reportType, 'LCP', lastLcp.startTime, { unit: 'ms' });
2076
+ lastLcp = null;
2077
+ }
2078
+ catch {
2079
+ // ignore
2080
+ }
2081
+ };
2082
+ window.addEventListener('pagehide', flushLcp, { once: true });
2083
+ document.addEventListener('visibilitychange', () => {
2084
+ if (document.visibilityState === 'hidden')
2085
+ flushLcp();
2086
+ }, { once: true });
2064
2087
  }
2065
2088
  catch {
2066
2089
  // ignore
2067
2090
  }
2068
- // INP(替代 FID,2024年3月起成为核心指标)
2091
+ // CLS
2069
2092
  try {
2070
- webVitals.onINP((metric) => {
2071
- report(options.reportType, {
2072
- pagePath: getPagePath(),
2073
- metric: 'INP',
2074
- value: metric.value,
2075
- unit: 'ms',
2076
- rating: metric.rating,
2077
- id: metric.id,
2078
- navigationType: metric.navigationType,
2079
- });
2093
+ let clsValue = 0;
2094
+ const po = new PerformanceObserver((list) => {
2095
+ try {
2096
+ for (const entry of list.getEntries()) {
2097
+ if (entry && entry.hadRecentInput)
2098
+ continue;
2099
+ if (typeof entry.value === 'number')
2100
+ clsValue += entry.value;
2101
+ }
2102
+ }
2103
+ catch {
2104
+ // ignore
2105
+ }
2080
2106
  });
2107
+ po.observe({ type: 'layout-shift', buffered: true });
2108
+ const flushCls = () => {
2109
+ try {
2110
+ if (!sampleHit$1(options.sampleRate))
2111
+ return;
2112
+ reportMetric(report, options.reportType, 'CLS', clsValue, { unit: 'score' });
2113
+ }
2114
+ catch {
2115
+ // ignore
2116
+ }
2117
+ };
2118
+ window.addEventListener('pagehide', flushCls, { once: true });
2119
+ document.addEventListener('visibilitychange', () => {
2120
+ if (document.visibilityState === 'hidden')
2121
+ flushCls();
2122
+ }, { once: true });
2081
2123
  }
2082
2124
  catch {
2083
2125
  // ignore
2084
2126
  }
2085
- // TTFB
2127
+ // FID
2086
2128
  try {
2087
- webVitals.onTTFB((metric) => {
2088
- report(options.reportType, {
2089
- pagePath: getPagePath(),
2090
- metric: 'TTFB',
2091
- value: metric.value,
2092
- unit: 'ms',
2093
- rating: metric.rating,
2094
- id: metric.id,
2095
- navigationType: metric.navigationType,
2096
- });
2129
+ const po = new PerformanceObserver((list) => {
2130
+ try {
2131
+ if (!sampleHit$1(options.sampleRate))
2132
+ return;
2133
+ for (const entry of list.getEntries()) {
2134
+ const startTime = typeof entry.startTime === 'number' ? entry.startTime : -1;
2135
+ const processingStart = typeof entry.processingStart === 'number' ? entry.processingStart : -1;
2136
+ if (startTime >= 0 && processingStart >= 0) {
2137
+ reportMetric(report, options.reportType, 'FID', processingStart - startTime, { unit: 'ms' });
2138
+ break;
2139
+ }
2140
+ }
2141
+ }
2142
+ catch {
2143
+ // ignore
2144
+ }
2097
2145
  });
2146
+ po.observe({ type: 'first-input', buffered: true });
2098
2147
  }
2099
2148
  catch {
2100
2149
  // ignore
2101
2150
  }
2102
2151
  }
2103
- // Resource timing:资源加载耗时(web-vitals 不包含此功能,保留原有实现)
2152
+ // Resource timing:资源加载耗时
2104
2153
  if (options.resourceTiming && typeof globalThis.PerformanceObserver === 'function') {
2105
2154
  try {
2106
2155
  const po = new PerformanceObserver((list) => {
@@ -2185,6 +2234,7 @@
2185
2234
  sampleRate: raw.sampleRate ?? 1,
2186
2235
  ignoreUrls: raw.ignoreUrls ?? [],
2187
2236
  webVitals: raw.webVitals ?? true,
2237
+ navigationTiming: raw.navigationTiming ?? true,
2188
2238
  resourceTiming: raw.resourceTiming ?? true,
2189
2239
  maxTextLength: raw.maxTextLength ?? 2000,
2190
2240
  };
@@ -2276,6 +2326,7 @@
2276
2326
  sampleRate: raw.sampleRate ?? 1,
2277
2327
  ignoreUrls: raw.ignoreUrls ?? [],
2278
2328
  webVitals: raw.webVitals ?? true,
2329
+ navigationTiming: raw.navigationTiming ?? true,
2279
2330
  resourceTiming: raw.resourceTiming ?? true,
2280
2331
  maxTextLength: raw.maxTextLength ?? 2000,
2281
2332
  };
@@ -1 +1 @@
1
- {"version":3,"file":"performanceMonitor.d.ts","sourceRoot":"","sources":["../../src/mini/performanceMonitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAEtE,KAAK,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;AA+EzD,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,QAAQ,EAChB,IAAI,GAAE,OAAO,GAAG,yBAAyB,GAAG,SAAc,GACzD,IAAI,CAgBN"}
1
+ {"version":3,"file":"performanceMonitor.d.ts","sourceRoot":"","sources":["../../src/mini/performanceMonitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAEtE,KAAK,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;AA+EzD,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,QAAQ,EAChB,IAAI,GAAE,OAAO,GAAG,yBAAyB,GAAG,SAAc,GACzD,IAAI,CAiBN"}
package/dist/mini.esm.js CHANGED
@@ -1520,6 +1520,7 @@ function installMiniPerformanceMonitor(report, opts = {}) {
1520
1520
  sampleRate: raw.sampleRate ?? 1,
1521
1521
  ignoreUrls: raw.ignoreUrls ?? [],
1522
1522
  webVitals: raw.webVitals ?? true,
1523
+ navigationTiming: raw.navigationTiming ?? true,
1523
1524
  resourceTiming: raw.resourceTiming ?? true,
1524
1525
  maxTextLength: raw.maxTextLength ?? 2000,
1525
1526
  };
package/dist/mini.js CHANGED
@@ -1543,6 +1543,7 @@ function installMiniPerformanceMonitor(report, opts = {}) {
1543
1543
  sampleRate: raw.sampleRate ?? 1,
1544
1544
  ignoreUrls: raw.ignoreUrls ?? [],
1545
1545
  webVitals: raw.webVitals ?? true,
1546
+ navigationTiming: raw.navigationTiming ?? true,
1546
1547
  resourceTiming: raw.resourceTiming ?? true,
1547
1548
  maxTextLength: raw.maxTextLength ?? 2000,
1548
1549
  };
package/dist/types.d.ts CHANGED
@@ -251,16 +251,10 @@ export interface PerformanceMonitorOptions {
251
251
  sampleRate?: number;
252
252
  /** Web/H5:忽略的资源 url(防止递归/噪声) */
253
253
  ignoreUrls?: Array<string | RegExp>;
254
- /**
255
- * Web/H5:是否采集 Web Vitals(FCP/LCP/CLS/INP/TTFB),默认 true
256
- * - 使用 Google web-vitals 库实现
257
- * - LCP 在用户交互后自动停止观察
258
- * - CLS 使用 5 秒会话窗口算法
259
- * - INP 替代 FID(2024年3月起成为核心指标)
260
- * - 自动处理 BFCache 恢复时的指标重置
261
- * - 上报数据包含 rating 字段:'good' | 'needs-improvement' | 'poor'
262
- */
254
+ /** Web/H5:是否采集 Web Vitals(FCP/LCP/CLS/FID),默认 true */
263
255
  webVitals?: boolean;
256
+ /** Web/H5:是否采集导航指标(TTFB 等),默认 true */
257
+ navigationTiming?: boolean;
264
258
  /** Web/H5:是否采集资源加载耗时(PerformanceResourceTiming),默认 true */
265
259
  resourceTiming?: boolean;
266
260
  /** 性能指标文本最大长度(超出截断),默认 2000 */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAC7D,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEjF;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,SAAS,GAAG,MAAM,CAAC;AAEhE,sCAAsC;AACtC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAExD,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC;AAEpC,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,aAAa,CAAC;AAEhD,MAAM,WAAW,qBAAqB;IACpC,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC;IAErC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC;IAEV;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAErC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,UAAU,CAAC;IAEtC,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,wCAAwC;IACxC,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0BAA0B;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,qBAAqB,CAAC;IAEjD;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;IAE7C;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,yBAAyB,CAAC;IAEzD;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IAEzC;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,GAAG,sBAAsB,CAAC;CACpD;AAED,MAAM,WAAW,mBAAoB,SAAQ,oBAAoB;IAC/D,yCAAyC;IACzC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,2BAA4B,SAAQ,oBAAoB;IACvE,8BAA8B;IAC9B,OAAO,EAAE,aAAa,CAAC;IACvB,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG,2BAA2B,CAAC;AAErF,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,mBAAmB;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACpC,0BAA0B;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,yBAAyB;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6BAA6B;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8BAA8B;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,mBAAmB;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,uCAAuC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,yBAAyB;IACxC,mBAAmB;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACpC;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,+BAA+B;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gCAAgC;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kDAAkD;IAClD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mCAAmC;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yBAAyB;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sBAAsB;IACtB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,sBAAsB;IACtB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,qBAAqB;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mBAAmB;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzC,kCAAkC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gCAAgC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC;IAE3B;;OAEG;IACH,YAAY,CAAC,EAAE;QACb;;;;WAIG;QACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,yBAAyB;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"performanceMonitor.d.ts","sourceRoot":"","sources":["../../src/web/performanceMonitor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAEtE,KAAK,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;AAyNzD,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,QAAQ,EAChB,IAAI,GAAE,OAAO,GAAG,yBAAyB,GAAG,SAAc,GACzD,IAAI,CAgBN"}
1
+ {"version":3,"file":"performanceMonitor.d.ts","sourceRoot":"","sources":["../../src/web/performanceMonitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAEtE,KAAK,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;AA6QzD,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,QAAQ,EAChB,IAAI,GAAE,OAAO,GAAG,yBAAyB,GAAG,SAAc,GACzD,IAAI,CAiBN"}
package/dist/web.esm.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import * as tencentcloudClsSdkJsWeb from 'tencentcloud-cls-sdk-js-web';
2
- import { onFCP, onLCP, onCLS, onINP, onTTFB } from 'web-vitals';
3
2
 
4
3
  function isPlainObject(value) {
5
4
  return Object.prototype.toString.call(value) === '[object Object]';
@@ -1465,10 +1464,14 @@ function getPagePath() {
1465
1464
  return '';
1466
1465
  }
1467
1466
  }
1468
- /**
1469
- * 安装浏览器性能监控
1470
- * 使用 Google web-vitals 库实现 Core Web Vitals 指标采集
1471
- */
1467
+ function reportMetric(report, reportType, metric, value, extra = {}) {
1468
+ report(reportType, {
1469
+ pagePath: getPagePath(),
1470
+ metric,
1471
+ value,
1472
+ ...extra,
1473
+ });
1474
+ }
1472
1475
  function installBrowserPerformanceMonitor(report, options) {
1473
1476
  if (typeof window === 'undefined')
1474
1477
  return;
@@ -1477,100 +1480,145 @@ function installBrowserPerformanceMonitor(report, options) {
1477
1480
  return;
1478
1481
  w.__beLinkClsLoggerPerfInstalled__ = true;
1479
1482
  const ignoreUrls = [...DEFAULT_IGNORE, ...(options.ignoreUrls ?? [])];
1480
- // Web Vitals: 使用 Google web-vitals 库
1481
- // 这个库会自动处理:
1482
- // - LCP 在用户交互后停止观察
1483
- // - firstHiddenTime 过滤(页面隐藏后的数据不计入)
1484
- // - CLS 5秒会话窗口算法
1485
- // - BFCache 恢复时自动重置指标
1486
- if (options.webVitals) {
1487
- // FCP
1483
+ // Navigation timing: TTFB
1484
+ if (options.navigationTiming) {
1488
1485
  try {
1489
- onFCP((metric) => {
1490
- report(options.reportType, {
1491
- pagePath: getPagePath(),
1492
- metric: 'FCP',
1493
- value: metric.value,
1494
- unit: 'ms',
1495
- rating: metric.rating,
1496
- id: metric.id,
1497
- navigationType: metric.navigationType,
1498
- });
1499
- });
1486
+ const navEntries = performance.getEntriesByType?.('navigation');
1487
+ const nav = Array.isArray(navEntries) ? navEntries[0] : undefined;
1488
+ if (nav && typeof nav === 'object') {
1489
+ const ttfb = typeof nav.responseStart === 'number' && typeof nav.requestStart === 'number'
1490
+ ? nav.responseStart - nav.requestStart
1491
+ : -1;
1492
+ if (ttfb >= 0 && sampleHit(options.sampleRate))
1493
+ reportMetric(report, options.reportType, 'TTFB', ttfb, { unit: 'ms' });
1494
+ }
1500
1495
  }
1501
1496
  catch {
1502
1497
  // ignore
1503
1498
  }
1504
- // LCP(自动处理用户交互后停止)
1499
+ }
1500
+ // Web Vitals: FCP/LCP/CLS/FID
1501
+ if (options.webVitals && typeof globalThis.PerformanceObserver === 'function') {
1502
+ // FCP
1505
1503
  try {
1506
- onLCP((metric) => {
1507
- report(options.reportType, {
1508
- pagePath: getPagePath(),
1509
- metric: 'LCP',
1510
- value: metric.value,
1511
- unit: 'ms',
1512
- rating: metric.rating,
1513
- id: metric.id,
1514
- navigationType: metric.navigationType,
1515
- });
1504
+ const po = new PerformanceObserver((list) => {
1505
+ try {
1506
+ if (!sampleHit(options.sampleRate))
1507
+ return;
1508
+ for (const entry of list.getEntries()) {
1509
+ if (entry?.name === 'first-contentful-paint' && typeof entry.startTime === 'number') {
1510
+ reportMetric(report, options.reportType, 'FCP', entry.startTime, { unit: 'ms' });
1511
+ }
1512
+ }
1513
+ }
1514
+ catch {
1515
+ // ignore
1516
+ }
1516
1517
  });
1518
+ po.observe({ type: 'paint', buffered: true });
1517
1519
  }
1518
1520
  catch {
1519
1521
  // ignore
1520
1522
  }
1521
- // CLS(自动处理会话窗口)
1523
+ // LCP(最后一次为准)
1524
+ let lastLcp = null;
1522
1525
  try {
1523
- onCLS((metric) => {
1524
- report(options.reportType, {
1525
- pagePath: getPagePath(),
1526
- metric: 'CLS',
1527
- value: metric.value,
1528
- unit: 'score',
1529
- rating: metric.rating,
1530
- id: metric.id,
1531
- navigationType: metric.navigationType,
1532
- });
1526
+ const po = new PerformanceObserver((list) => {
1527
+ try {
1528
+ const entries = list.getEntries();
1529
+ if (entries && entries.length)
1530
+ lastLcp = entries[entries.length - 1];
1531
+ }
1532
+ catch {
1533
+ // ignore
1534
+ }
1533
1535
  });
1536
+ po.observe({ type: 'largest-contentful-paint', buffered: true });
1537
+ const flushLcp = () => {
1538
+ try {
1539
+ if (!lastLcp)
1540
+ return;
1541
+ if (!sampleHit(options.sampleRate))
1542
+ return;
1543
+ if (typeof lastLcp.startTime === 'number')
1544
+ reportMetric(report, options.reportType, 'LCP', lastLcp.startTime, { unit: 'ms' });
1545
+ lastLcp = null;
1546
+ }
1547
+ catch {
1548
+ // ignore
1549
+ }
1550
+ };
1551
+ window.addEventListener('pagehide', flushLcp, { once: true });
1552
+ document.addEventListener('visibilitychange', () => {
1553
+ if (document.visibilityState === 'hidden')
1554
+ flushLcp();
1555
+ }, { once: true });
1534
1556
  }
1535
1557
  catch {
1536
1558
  // ignore
1537
1559
  }
1538
- // INP(替代 FID,2024年3月起成为核心指标)
1560
+ // CLS
1539
1561
  try {
1540
- onINP((metric) => {
1541
- report(options.reportType, {
1542
- pagePath: getPagePath(),
1543
- metric: 'INP',
1544
- value: metric.value,
1545
- unit: 'ms',
1546
- rating: metric.rating,
1547
- id: metric.id,
1548
- navigationType: metric.navigationType,
1549
- });
1562
+ let clsValue = 0;
1563
+ const po = new PerformanceObserver((list) => {
1564
+ try {
1565
+ for (const entry of list.getEntries()) {
1566
+ if (entry && entry.hadRecentInput)
1567
+ continue;
1568
+ if (typeof entry.value === 'number')
1569
+ clsValue += entry.value;
1570
+ }
1571
+ }
1572
+ catch {
1573
+ // ignore
1574
+ }
1550
1575
  });
1576
+ po.observe({ type: 'layout-shift', buffered: true });
1577
+ const flushCls = () => {
1578
+ try {
1579
+ if (!sampleHit(options.sampleRate))
1580
+ return;
1581
+ reportMetric(report, options.reportType, 'CLS', clsValue, { unit: 'score' });
1582
+ }
1583
+ catch {
1584
+ // ignore
1585
+ }
1586
+ };
1587
+ window.addEventListener('pagehide', flushCls, { once: true });
1588
+ document.addEventListener('visibilitychange', () => {
1589
+ if (document.visibilityState === 'hidden')
1590
+ flushCls();
1591
+ }, { once: true });
1551
1592
  }
1552
1593
  catch {
1553
1594
  // ignore
1554
1595
  }
1555
- // TTFB
1596
+ // FID
1556
1597
  try {
1557
- onTTFB((metric) => {
1558
- report(options.reportType, {
1559
- pagePath: getPagePath(),
1560
- metric: 'TTFB',
1561
- value: metric.value,
1562
- unit: 'ms',
1563
- rating: metric.rating,
1564
- id: metric.id,
1565
- navigationType: metric.navigationType,
1566
- });
1598
+ const po = new PerformanceObserver((list) => {
1599
+ try {
1600
+ if (!sampleHit(options.sampleRate))
1601
+ return;
1602
+ for (const entry of list.getEntries()) {
1603
+ const startTime = typeof entry.startTime === 'number' ? entry.startTime : -1;
1604
+ const processingStart = typeof entry.processingStart === 'number' ? entry.processingStart : -1;
1605
+ if (startTime >= 0 && processingStart >= 0) {
1606
+ reportMetric(report, options.reportType, 'FID', processingStart - startTime, { unit: 'ms' });
1607
+ break;
1608
+ }
1609
+ }
1610
+ }
1611
+ catch {
1612
+ // ignore
1613
+ }
1567
1614
  });
1615
+ po.observe({ type: 'first-input', buffered: true });
1568
1616
  }
1569
1617
  catch {
1570
1618
  // ignore
1571
1619
  }
1572
1620
  }
1573
- // Resource timing:资源加载耗时(web-vitals 不包含此功能,保留原有实现)
1621
+ // Resource timing:资源加载耗时
1574
1622
  if (options.resourceTiming && typeof globalThis.PerformanceObserver === 'function') {
1575
1623
  try {
1576
1624
  const po = new PerformanceObserver((list) => {
@@ -1655,6 +1703,7 @@ function installWebPerformanceMonitor(report, opts = {}) {
1655
1703
  sampleRate: raw.sampleRate ?? 1,
1656
1704
  ignoreUrls: raw.ignoreUrls ?? [],
1657
1705
  webVitals: raw.webVitals ?? true,
1706
+ navigationTiming: raw.navigationTiming ?? true,
1658
1707
  resourceTiming: raw.resourceTiming ?? true,
1659
1708
  maxTextLength: raw.maxTextLength ?? 2000,
1660
1709
  };