Published on

Punch LCP 构成

Authors
  • avatar
    Name
    Magikarp
    Twitter

Performance 分析

环境:正式,20221110-1949-f6966-release

Network:

![图片]

Performance json

Profile-20221130T114703.json

lcp 元素

根据网络情况不同,会有不同的 lcp

![图片] ![图片]

针对实际业务场景只分析图二的场景

Lcp 构成

  1. 页面访问 /punch/punch
project: VNiHYxlRn65CRO-9O7NT0
|
SELECT
  date_trunc('day', __time__) AS time,
  approx_percentile(response_time, 0.95) as htmlResponseTimeTP95,
  approx_percentile(ttfb, 0.95) as htmlTtfbTP95
WHERE
  router_path = '/punch/punch'
  AND 
  event = 'NAVIGATION'
GROUP BY
  time
ORDER BY
  time DESC
  1. 基础资源加载 ![图片]

vconsole.min.js

sentry.min.js

font.js

h5-js-sdk.js

embed.min.js~~~~async ?

project: VNiHYxlRn65CRO-9O7NT0
|
SELECT
  date_trunc('day', __time__) AS time,
  approx_percentile(duration_time, 0.95) as htmlAssetsTP95
WHERE
  project = 'VNiHYxlRn65CRO-9O7NT0'
  AND (
    resource_name = 'https://static-core.mokahr.com/punch/assets/vconsole.min.js'
    OR resource_name = 'https://static-core.mokahr.com/punch/assets/sentry.min.js'
    OR resource_name = 'https://at.alicdn.com/t/font_1052316_7vn9rrvr392.js'
    OR resource_name = 'https://lf1-cdn-tos.bytegoofy.com/goofy/ee/lark/h5jssdk/lark/js_sdk/h5-js-sdk-1.5.8.js'
  )
GROUP BY
  time
ORDER BY
  time DESC
  1. gray 接口 ![图片]

gray

mainfest.json

project: VNiHYxlRn65CRO-9O7NT0
|
SELECT
  date_trunc('day', __time__) AS time,
  approx_percentile(duration_time, 0.95) as grayTP95
WHERE
  resource_name like '/api/gateway/gray%'
GROUP BY
  time
ORDER BY
  time DESC

  1. mainfest.json
project: VNiHYxlRn65CRO-9O7NT0
|
SELECT
  date_trunc('day', __time__) AS time,
  approx_percentile(duration_time, 0.95) as mainfestTP95
WHERE
  resource_name = '/punch/manifest.json'
GROUP BY
  time
ORDER BY
  time DESC
  1. 加载基础资源文件 ![图片]

umi.css

common.js

umi.js

project: VNiHYxlRn65CRO-9O7NT0
|
SELECT
  date_trunc('day', __time__) AS time,
  approx_percentile(duration_time, 0.95) as commonAssetsTP95
WHERE
  project = 'VNiHYxlRn65CRO-9O7NT0'
  AND (
    resource_name like 'https://static-core.mokahr.com/punch/assets/umi%'
    OR resource_name like 'https://static-core.mokahr.com/punch/assets/common%'
  )
GROUP BY
  time
ORDER BY
  time DESC
  1. 加载 layout 资源文件 ![图片]

vendors.js

layout.css

layout.js

project: VNiHYxlRn65CRO-9O7NT0
|
SELECT
  date_trunc('day', __time__) AS time,
  approx_percentile(duration_time, 0.95) as layoutAssetsTP95
WHERE
  project = 'VNiHYxlRn65CRO-9O7NT0'
  AND (
    resource_name like 'https://static-core.mokahr.com/punch/assets/vendors%'
    OR resource_name like 'https://static-core.mokahr.com/punch/assets/layouts%'
  )
GROUP BY
  time
ORDER BY
  time DESC
  1. layout 执行, abRoute 后续不会阻塞,不统计 abRoute

  2. 获取规则![图片]

userInfo~~~~异步,不影响最终结果

getJSSdkConfig 获取 api 授权相关

queryRuleAndAttendanceInfo

通知加载文件

p__punch__index.css

p__punch__index.js

project: VNiHYxlRn65CRO-9O7NT0
|
SELECT
  date_trunc('day', __time__) AS time,
  approx_percentile(duration_time, 0.95) as pucnhAssetsTP95
WHERE
  project = 'VNiHYxlRn65CRO-9O7NT0'
  AND (
    resource_name like '/api/mobile/jsSdk/wechat/getJSSDKConfig%'
    OR resource_name like '/api/abs/clock/clockOnPage/v2/m/queryRuleAndAttendanceInfo%'
    OR resource_name like 'https://static-core.mokahr.com/punch/assets/p__punch__index%'
  )
GROUP BY
  time
ORDER BY
  time DESC
  1. 获取记录 ![图片]

queryClockRecord

project: VNiHYxlRn65CRO-9O7NT0
|
SELECT
  date_trunc('day', __time__) AS time,
  approx_percentile(duration_time, 0.95) as queryClockRecordTP95
WHERE
   resource_name like '/api/abs/clock/clockOnPage/v2/m/queryClockRecord%'
GROUP BY
  time
ORDER BY
  time DESC

⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️

注意:目前实现的看板和实际 lcp 数据可能会有出入,是采用每个阶段耗时进行堆叠的策略,无中间的等待时间(例如代码执行)

⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️

LCP 统计参考 https://abyss.mokahr.com/project/VNiHYxlRn65CRO-9O7NT0/dashboard?from=1669338725258&to=1669943525258

数据看板

sls 日志库:

abyss: https://sls.console.aliyun.com/lognext/project/moka-apm/logsearch/abyss

看板地址:

https://sls.console.aliyun.com/lognext/project/moka-apm/dashboard/dashboard-1669973461313-649998

图表数据类型:

⚠️⚠️⚠️⚠️注意:堆叠显示时 sql 需要倒着排,即最后显示的需要放在最前面⚠️⚠️⚠️⚠️

y1:html 加载 ttfb

y2:html 加载 reponseTime

y3:基础资源加载耗时

y4:...

以上组成 1 天的数据,循环展示 30 次

优先获取 P95