You need to enable JavaScript to run this app.
文档中心
应用性能监控全链路版

应用性能监控全链路版

复制全文
下载 pdf
SDK 接入
使用 SDK 调用 API
复制全文
下载 pdf
使用 SDK 调用 API
本文介绍如何在WebPro中使用SDK调用API。
注意事项
全文的client代表的是SDK实例。如何获取SDK实例,请参见SDK接入
初始化
初始化client实例,初始化配置中可以包含通用事件上下文,通用事件上下文以外的配置只生效一次。
init调用后会开始拉取服务端配置,并拉取异步加载的插件。
client('init', c: InitConfig) => void
interface InitConfig {
aid: number; // 项目唯一标识,必传
token: string; // 项目 token,必传
// 通用事件上下文
pid?: string;
userId?: string; // 不传时将会生成uuid作为userId。(请勿显示传入undefined,显示传入undefined代表不传userId并拒绝生成uuid,所有上传请求中将不包含userId)
deviceId?: string; // 不传时将会生成uuid作为deviceId。如果业务自行传入请确保传入值尽量不含特殊字符。(可含有点,斜杠,横杠,下划线,逗号)。(请勿显示传入undefined,显示传入undefined代表不传deviceId并拒绝生成uuid,所有上传请求中不包含deviceId)
release?: string; // 用于区分不同版本。如果传入,请确保传入值长度小于17且尽量不含特殊字符。(可含有点,斜杠,横杠,下划线,逗号)
env?: string; // 用于区分不同环境。如果传入,请确保传入值尽量不含特殊字符。(可含有点,斜杠,横杠,下划线,逗号)
useLocalConfig?: boolean; // 是否只使用本地配置,默认为关
storageExpires?: number | boolean;// 配置 storage 的过期时间,默认为 90 天
// 采样配置 和 插件配置 的具体配置可在详细配置中查看
sample?: SampleConfig; // 采样配置
plugins?: { ... }; // 具体可以查看 【配置插件】
// 特殊配置
pluginBundle?: {
name: string;
plugins: string[];
}; // 插件打包加载配置,非定制插件不需要配置
pluginPathPrefix?:string; // 插件加载路径前缀,调试用(比如 http://localhost:8081/cn/plugins)或加载定制插件用
domain?: string; // 上报域名。中国发布的应用:上报到中国大陆服务器,域名为https://apmplus.volces.com。海外发布的应用,上报到马来西亚柔佛服务器,域名为https://apmplus.ap-southeast-1.volces.com。如不配置,默认上报到中国大陆服务器。
}
示例
client('init', {
aid: 123456, // 你的 aid
token:'xxx-xxx', // 替换成你的token
env: 'boe',
release: '1.0.221'
})
更新配置
更改通用上下文,仅对更新后发送的事件生效。如果需要对所有事件生效,请确保在start之前调用。
client('config', c?: Partial) =>WebConfig
// config 可以改动的配置
interface UserConfig {
pid: string;
userId: string;
deviceId: string;
sessionId:string;
release: string;
env: string;
}
// config 获取的配置
interface WebConfig {
aid: number; // 项目唯一标识,必传
token: string; // 项目 token,必传
// 通用事件上下文
pid: string;
userId: string;
deviceId: string;
sessionId: string; // 区分不同会话
release: string;// 区分不同版本
env: string;// 区分不同环境
useLocalConfig: boolean; // 是否只使用本地配置,默认为关
storageExpires?: number | boolean; // 配置 storage 的过期时间,默认为 90 天
// 采样配置 和 插件配置 的具体配置可在详细配置中查看
sample: SampleConfig; // 采样配置
plugins: { ... }; // 插件配置
// 特殊配置
pluginBundle: {
name: string;
plugins: string[];
}; // 插件打包加载配置,非定制插件不需要配置
pluginPathPrefix:string; // 插件加载路径前缀,调试用(比如 http://localhost:8081/cn/plugins)或加载定制插件用
domain?: string; // 上报域名,Saas不需要配置, 私有化部署时需要配制成具体环境的上报域名
}
示例
// 更新配置
client('config', {
userId: 'test_user',
})
// 获取SDK当前配置,如果SDK还未init,则会返回undefined
const config = client('config')
开启上报
client('start')
设置全局上下文
设置自定义维度。context是一个全局维度的上下文,对所有事件生效。更新的context只对之后发生的事件生效。
client("context.set", "key", "value"); // 设置context中的单个key
client("context.merge", { key: "value" }); // 将context 和 传入的对象合并,生成新的context
client("context.delete", "key"); // 删除context中的某个key
client("context.clear"); // 清空context
  • 如果想要给一些初始化的上下文,需要在init之前设置context。因为init的时候会发送一些事件,例如pageview。
  • 如果需要在init之后设置context,又希望能对所有上报生效,可以使用refreshPreStartContext插件。
上报PV
上报一次PV,若pid与当前pid相同则会忽略此次PV。
client('sendPageview',pid: string) => void
示例
client('sendPageview', '/test/pageA')
上报自定义事件
上报一个自定义事件。注意格式,格式不符合的事件将会试图转换,无法转换的事件将会被忽略。具体消费方式可以查看自定义监控
client('sendEvent', data: CustomEventPayload) => void
interface CustomEventPayload {
/** 自定义事件名称 */
name: string;
/** metrics 上报的是可以被度量的值,也就是数值 */
metrics?: { [key: string]: number };
/** categories 上报的是分类,维度,用来做筛选,分组 */
categories?: { [key: string]: string };
}
示例
client('sendEvent', {
name: 'login_event',
metrics: {
login_count: 1,
login_api_duration: 1000,
server_timing: 3456,
login_level: 23,
},
categories: {
where: 'login_page',
},
})
上报自定义日志
上报一个自定义日志。注意格式,格式不符合的事件将会试图转换,无法转换的事件将会被忽略。
client('sendLog', data: CustomLogPayload) => void
interface CustomLogPayload {
/** 额外的附加信息, 在上报的时候 number会被分流到metric string会被分流到categories */
extra?: { [key: string]: string | number }; //
/** 自定义事件内容,任意字符串,可以是日志或者对象的 JSON 字符串等等 */
content: string;
/** 自定义事件级别,默认是 info, 可枚举项 debug | info | warn | error */
level?: "debug" | "info" | "warn" | "error";
}
示例
client('sendLog', {
level: 'error',
content: `user loggedin from ${prev}`,
extra: {
where: 'login_page',
},
})
上报JS错误
client('captureException', error: any, extra?: { [key: string]: string }, react?: ReactInfo) => void
export interface ReactInfo {
version: string;
componentStack: string;
}
示例
// 上报一个error
client('captureException', new Error('test error'))
// 上报一个错误信息
client('captureException', 'custom error')
// 上报一个error,同时附带一些错误的上下文
client('captureException', new Error('login error'), { loginId: 'xxxxx' })
上报性能指标
  • 如果是默认集成的指标,例如FP、FCP,可以在Performance插件中关闭上报,通过这种自定义上报的方式上报上去,平台自动消费。
  • 如果不是默认集成的指标,通过这种自定义上报的方式上报上去后,在性能指标管理中注册指标,即可在平台消费。
client('sendCustomPerfMetric', metric: PerformancePayload) => void
interface PerformancePayload {
/** 指标名称 */
name: string;
/** 当前值 */
value: number;
/** 性能指标类型, perf => 传统性能, spa => SPA 性能, mf => 微前端性能 */
type?: string = "perf";
/** 是否支持 */
isSupport?: boolean;
/** 是否是Polyfill */
isPolyfill?: boolean;
/** 是否跳出 */
isBounced?: boolean;
/** 是否自定义 */
isCustom?: boolean;
/** 指标的相关信息 */
extra?: { [key: string]: string };
}
示例
client('sendCustomPerfMetric', { name: 'fcp', value: 3500 }
销毁实例
调用此方法可以去掉所有监听和副作用,包括hook或者内存对象。当前实例本身还是可用的,所以手动调用API依然可以上报数据。
client('destroy')
上报任意事件
直接上报一个事件,具体格式见上报格式
client('report', ev: ReportEvent) => void
示例
client('report', {
ev_type: 'pageview',
payload: {
source: 'history',
pid: '/pageB'
}
})
自定义补充面包屑
面包屑主要在JS错误上报时会携带,如果业务想要自定义一些面包屑,可以使用下面的方式。
client('addBreadcrumb',breadcrumb: Breadcrumb) => void
export interface Breadcrumb {
/** dom | http */
type: string;
/** xpath, keyvalue | url */
message: string;
/** ui.click, ui.keypress | post,get */
category: string;
/** status: 400 for http */
data?: { [key: string]: string };
}
示例
client('addBreadcrumb', { type: 'custom', message: 'user login', category: 'webview' })
手动包装Fetch
client('wrapFetch', fetch: typeof window.fetch) => typeof window.fetch | undefined
如果需要手动包装,需要注意以下内容:
  • 需要在init之后执行。因为wrapFetch是动态挂载的,挂载的时机是在init时,所以需要在init后执行。
  • 需要使用npm的接入方式。script接入会先加载主脚本,在这之前所有的调用都只是缓存起来,并没有真正运行,所以提前运行拿到的返回值会是undefined。
  • 需要将fetch插件的autoWrap配置为false。既然选择手动包装,那么就要避免自动包装带来的其他无关请求的监控上报。
示例
import client from '@apmplus/web'
client('init', {
...
plugins: {
autoWrap: false,
},
...
})
const fetchAfterWrap = client('wrapFetch', window.fetch)
// then, use fetchAfterWrap to request
手动检测白屏
client('detectBlankScreen')
示例
import client from '@apmplus/web'
client('init', {
...
plugins: {
blankScreen: {
// 关闭自动检测,改为下方的手动检测
autoDetect: false
},
},
...
})
client('detectBlankScreen')
立即上报数据
默认情况下,在页面关闭时SDK会使用sendBeacon强制发送缓存队列的数据,但是如果在页面关闭时,用户再手动调用某些API上报数据,可能因为时机问题导致漏发,可以使用以下方式强制发送数据:
import client from '@apmplus/web'
// 写在回调里时为了确保SDK已经初始化完成,避免报错
onPageUnload(() => {
client('on', 'init', () => {
client.getSender().flush()
})
})
最近更新时间:2025.10.23 17:10:38
这个页面对您有帮助吗?
有用
有用
无用
无用