Web resource loading monitoring, js error listener, callback, reporting, etc.
前端监控资源加载上报,js错误捕获
If a long resource loading time triggers a callback, you can call HTTP to report the resource file with a long loading time.
如果资源加载长会触发回调,此时可以调用http上报长加载时长的资源文件
Bugs or features can be raised here:
有问题或者扩展功能可以讨论:
github: https://github.com/zhuyue6/web-resource-monitor.git/issues
npm i web-resource-monitor| match type | value |
|---|---|
| audio | wav mp3 wma midi acc cda ape ra |
| video | mp4 mpeg avi 3gp rm wmv flv bd mkv |
| img | jpg jpeg png gif bmp tiff webp |
| css | css ttf |
| script | js vue ts |
| type | timeout |
|---|---|
| audio | 5000 |
| video | 10000 |
| img | 500 |
| css | 100 |
| script | 100 |
if you want to custom
// get default config
const {
fileMatcherDefault,
resourceTimeoutConfigDefault
} = getResourceConfigDefault()
// use a new media attr, will replace default,
// if you set fileMatcher: {
// media: ['mp4'],
// video: ['mp4']
// }
// load aa.mp4 will get twice
createResourceListener({
resourceTimeoutConfig: {
...resourceTimeoutConfigDefault,
media: 1000
},
fileMatcher: {
...fileMatcherDefault,
media: ['mp4', 'mp3', 'jpg']
}
})
// reset a script, will replace default
createResourceListener({
resourceTimeoutConfig: {
script: 1000
},
fileMatcher: {
script: ['mp4', 'mp3', 'jpg']
}
})
import { createResourceListener } from 'web-resource-monitor'
import axios from 'axios'
interface Collection {
name: string
fileType: string,
resourceType: string
initiatorType?: string
duration: number
}
const resourceListener = createResourceListener()
resourceListener.start()
// listen all loaded event
resourceListener.on('loaded', (collect: Collection, entry: PerformanceEntry) => {
// After sending an HTTP request, the database exists and can be analyzed using a BI chart
// if you need more attrs, use entry
axios.post('xxxxx', collect)
})
// or only listen loadedTimeout event
resourceListener.on('loadedTimeout', (collect: Collection, entry: PerformanceEntry) => {
console.log(collect)
// After sending an HTTP request, the database exists and can be analyzed using a BI chart
// if you need more attrs, use entry
axios.post('xxxxx', collect)
})
// destroy listener
resourceListener.destroy() import { createErrorListener } from 'web-resource-monitor'
interface Collection {
url: string,
lineno: number,
colno: number,
message: string
stack: string
browser: string
}
const errorListener = createErrorListener()
errorListener.start()
errorListener.on('error', (collect: Collection, error: ErrorEvent) => {
// After sending an HTTP request, the database exists and can be analyzed using a BI chart
// if you need more attrs, use error
axios.post('xxxxx', collect)
})
// destroy listener
errorListener.destroy() import { createMonitor } from 'web-resource-monitor'
interface CreateMonitorParams {
resourceListenerConfig: ResourceReportConfig
}
const createMonitorParams: CreateMonitorParams | undefined
const monitor = createMonitor(createMonitorParams)
monitor.start()
monitor.resourceListener.on('loadedTimeout', (collect: Collection, entry: PerformanceEntry)=>{
//Same as above
})
monitor.errorListener.on('error', (collect: Collection, error: ErrorEvent)=>{
//Same as above
})
// destroy monitor
monitor.destroy()use umd and perload can capture more information
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="/index.min.js" rel="perload" async>
const monitor = window.webResourceMonitor.createMonitor()
monitor.start()
monitor.resourceListener.on('loadedTimeout', (a, b)=>{
console.log(a, b)
})
monitor.errorListener.on('error', (a, b)=>{
console.log(a, b)
})
</script>
</head>
<body></body>
</html>Copyright (c) zhuyue