admin管理员组文章数量:1516870
页面崩溃
页面无法到达unload阶段
- 使用Web Worker检测和报告页面崩溃
- 实现心跳机制监控页面响应状态
- 将崩溃信息上报至配置的后端服务
WorkerCode
接受来自主线程的消息
onmessage=(event)=>{let{
type,pageTime: receivedPageTime,
pageUrl,
url,
id,
eventData,
state
}= event.data;if(url){
fetchUrl = url;// 接收主线程传递的配置}if(id){
userId = id;// 接收主线程传递的配置}
nowUrl = pageUrl;
crashState = state;
crashEventData = eventData;if(type ==='heartbeat-response'){
pageTime = receivedPageTime;}elseif(type ==='page-unload'){isCrash();const nowTime = performance.now();if(nowTime - pageTime >= setTimeoutTime *2&&!crash){reportError();}clearInterval(intervalId);close();}};
intervalId =setInterval(()=>{isCrash();sendHeartbeat();}, setTimeoutTime);主线程
functioncrashLoop():void{const workerBlob =newBlob([workerCode],{type:'application/javascript'})const workerUrl =URL.createObjectURL(workerBlob)const worker =newWorker(workerUrl)
worker.postMessage({id: userId, url })
worker.onmessage=(event: MessageEvent)=>{const{ type }= event.data
if(type ==='heartbeat'){const eventData =getRecordScreenData()const behavior =getBehaviour()const state = behavior?.breadcrumbs?.state ||[]
worker.postMessage({type:'heartbeat-response',pageTime: performance.now(),pageUrl: window.location.href,
eventData,
state
})}}// 页面卸载时通知Worker
window.addEventListener('beforeunload',()=>{
worker.postMessage({type:'page-unload'})})}版权声明:本文标题:Adobe Flash Player里的崩溃奥秘:构建高效性能监控策略 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/web/1771581957a3267153.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论