spy-client 2.1.8 → 2.1.9

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.
Files changed (86) hide show
  1. package/README.md +54 -11
  2. package/dist/spy-client.esm.js +14 -9
  3. package/dist/spy-client.iife.js +14 -9
  4. package/dist/spy-client.iife.min.js +1 -1
  5. package/dist/spy-client.js +14 -9
  6. package/dist/spy-client.min.js +1 -1
  7. package/dist/spy-client.mjs +14 -9
  8. package/dist/spy-head.js +15 -10
  9. package/dist/spy-head.min.js +1 -1
  10. package/package.json +1 -1
  11. package/coverage/Chrome 92.0.4515.159 (Mac OS 10.15.7)/html/base.css +0 -224
  12. package/coverage/Chrome 92.0.4515.159 (Mac OS 10.15.7)/html/basicSpec.ts.html +0 -740
  13. package/coverage/Chrome 92.0.4515.159 (Mac OS 10.15.7)/html/block-navigation.js +0 -79
  14. package/coverage/Chrome 92.0.4515.159 (Mac OS 10.15.7)/html/checkSpec.ts.html +0 -479
  15. package/coverage/Chrome 92.0.4515.159 (Mac OS 10.15.7)/html/favicon.png +0 -0
  16. package/coverage/Chrome 92.0.4515.159 (Mac OS 10.15.7)/html/headSpec.ts.html +0 -695
  17. package/coverage/Chrome 92.0.4515.159 (Mac OS 10.15.7)/html/index.html +0 -171
  18. package/coverage/Chrome 92.0.4515.159 (Mac OS 10.15.7)/html/markSpec.ts.html +0 -284
  19. package/coverage/Chrome 92.0.4515.159 (Mac OS 10.15.7)/html/metricSpec.ts.html +0 -977
  20. package/coverage/Chrome 92.0.4515.159 (Mac OS 10.15.7)/html/prettify.css +0 -1
  21. package/coverage/Chrome 92.0.4515.159 (Mac OS 10.15.7)/html/prettify.js +0 -2
  22. package/coverage/Chrome 92.0.4515.159 (Mac OS 10.15.7)/html/sort-arrow-sprite.png +0 -0
  23. package/coverage/Chrome 92.0.4515.159 (Mac OS 10.15.7)/html/sorter.js +0 -170
  24. package/coverage/Chrome 95.0.4638.69 (Mac OS 10.15.7)/html/base.css +0 -224
  25. package/coverage/Chrome 95.0.4638.69 (Mac OS 10.15.7)/html/basicSpec.ts.html +0 -740
  26. package/coverage/Chrome 95.0.4638.69 (Mac OS 10.15.7)/html/block-navigation.js +0 -79
  27. package/coverage/Chrome 95.0.4638.69 (Mac OS 10.15.7)/html/checkSpec.ts.html +0 -479
  28. package/coverage/Chrome 95.0.4638.69 (Mac OS 10.15.7)/html/favicon.png +0 -0
  29. package/coverage/Chrome 95.0.4638.69 (Mac OS 10.15.7)/html/headSpec.ts.html +0 -695
  30. package/coverage/Chrome 95.0.4638.69 (Mac OS 10.15.7)/html/index.html +0 -171
  31. package/coverage/Chrome 95.0.4638.69 (Mac OS 10.15.7)/html/markSpec.ts.html +0 -284
  32. package/coverage/Chrome 95.0.4638.69 (Mac OS 10.15.7)/html/metricSpec.ts.html +0 -977
  33. package/coverage/Chrome 95.0.4638.69 (Mac OS 10.15.7)/html/prettify.css +0 -1
  34. package/coverage/Chrome 95.0.4638.69 (Mac OS 10.15.7)/html/prettify.js +0 -2
  35. package/coverage/Chrome 95.0.4638.69 (Mac OS 10.15.7)/html/sort-arrow-sprite.png +0 -0
  36. package/coverage/Chrome 95.0.4638.69 (Mac OS 10.15.7)/html/sorter.js +0 -170
  37. package/coverage/Chrome 96.0.4664.110 (Mac OS 10.15.7)/html/base.css +0 -224
  38. package/coverage/Chrome 96.0.4664.110 (Mac OS 10.15.7)/html/basicSpec.ts.html +0 -740
  39. package/coverage/Chrome 96.0.4664.110 (Mac OS 10.15.7)/html/block-navigation.js +0 -79
  40. package/coverage/Chrome 96.0.4664.110 (Mac OS 10.15.7)/html/checkSpec.ts.html +0 -479
  41. package/coverage/Chrome 96.0.4664.110 (Mac OS 10.15.7)/html/favicon.png +0 -0
  42. package/coverage/Chrome 96.0.4664.110 (Mac OS 10.15.7)/html/headSpec.ts.html +0 -695
  43. package/coverage/Chrome 96.0.4664.110 (Mac OS 10.15.7)/html/index.html +0 -171
  44. package/coverage/Chrome 96.0.4664.110 (Mac OS 10.15.7)/html/markSpec.ts.html +0 -284
  45. package/coverage/Chrome 96.0.4664.110 (Mac OS 10.15.7)/html/metricSpec.ts.html +0 -977
  46. package/coverage/Chrome 96.0.4664.110 (Mac OS 10.15.7)/html/prettify.css +0 -1
  47. package/coverage/Chrome 96.0.4664.110 (Mac OS 10.15.7)/html/prettify.js +0 -2
  48. package/coverage/Chrome 96.0.4664.110 (Mac OS 10.15.7)/html/sort-arrow-sprite.png +0 -0
  49. package/coverage/Chrome 96.0.4664.110 (Mac OS 10.15.7)/html/sorter.js +0 -170
  50. package/coverage/Chrome 96.0.4664.55 (Mac OS 10.15.7)/html/base.css +0 -224
  51. package/coverage/Chrome 96.0.4664.55 (Mac OS 10.15.7)/html/basicSpec.ts.html +0 -740
  52. package/coverage/Chrome 96.0.4664.55 (Mac OS 10.15.7)/html/block-navigation.js +0 -79
  53. package/coverage/Chrome 96.0.4664.55 (Mac OS 10.15.7)/html/checkSpec.ts.html +0 -479
  54. package/coverage/Chrome 96.0.4664.55 (Mac OS 10.15.7)/html/favicon.png +0 -0
  55. package/coverage/Chrome 96.0.4664.55 (Mac OS 10.15.7)/html/headSpec.ts.html +0 -695
  56. package/coverage/Chrome 96.0.4664.55 (Mac OS 10.15.7)/html/index.html +0 -171
  57. package/coverage/Chrome 96.0.4664.55 (Mac OS 10.15.7)/html/markSpec.ts.html +0 -284
  58. package/coverage/Chrome 96.0.4664.55 (Mac OS 10.15.7)/html/metricSpec.ts.html +0 -977
  59. package/coverage/Chrome 96.0.4664.55 (Mac OS 10.15.7)/html/prettify.css +0 -1
  60. package/coverage/Chrome 96.0.4664.55 (Mac OS 10.15.7)/html/prettify.js +0 -2
  61. package/coverage/Chrome 96.0.4664.55 (Mac OS 10.15.7)/html/sort-arrow-sprite.png +0 -0
  62. package/coverage/Chrome 96.0.4664.55 (Mac OS 10.15.7)/html/sorter.js +0 -170
  63. package/src/head/base.ts +0 -69
  64. package/src/head/error.ts +0 -118
  65. package/src/head/observer.ts +0 -40
  66. package/src/head/readme.md +0 -1
  67. package/src/head/whitescreen.ts +0 -105
  68. package/src/lib/data.ts +0 -14
  69. package/src/lib/huffman.ts +0 -307
  70. package/src/lib/interface.ts +0 -331
  71. package/src/lib/spyHeadInterface.ts +0 -40
  72. package/src/lib/util.ts +0 -101
  73. package/src/module/fid.ts +0 -56
  74. package/src/module/layoutShift.ts +0 -71
  75. package/src/module/lcp.ts +0 -63
  76. package/src/module/longtask.ts +0 -193
  77. package/src/module/memory.ts +0 -43
  78. package/src/module/navigatorInfo.ts +0 -61
  79. package/src/module/resource.ts +0 -433
  80. package/src/module/timing.ts +0 -75
  81. package/src/module/tti.ts +0 -139
  82. package/src/spy-client-basic.ts +0 -389
  83. package/src/spy-client.ts +0 -198
  84. package/src/spy-head.ts +0 -31
  85. package/src/spy-local-cache.ts +0 -478
  86. package/src/types/globals.d.ts +0 -93
package/README.md CHANGED
@@ -3,10 +3,12 @@
3
3
  ## 介绍
4
4
  日志采集模块,提供一系列方便的api供使用
5
5
 
6
- ## 安装
6
+ 1. 新版2.x部分API不再兼容1.x
7
+ 2. 从2.1.0版本开始,不再兼容IE8及以下IE浏览器
8
+ 3. 从2.1.8版本开始,兼容小程序环境(new Image类发送);通过继承类,覆盖request方法,可以支持Node.js/跨端框架/小程序环境
9
+
7
10
 
8
- 新版2.x部分API不再兼容1.x
9
- 从2.1.0版本开始,不再兼容IE8及以下IE浏览器
11
+ ## 安装
10
12
 
11
13
  ```
12
14
  npm install spy-client --save
@@ -18,13 +20,13 @@ CDN方式
18
20
 
19
21
  ```html
20
22
  <!--增强版SDK-->
21
- <script src="https://code.bdstatic.com/npm/spy-client@2.1.7/dist/spy-client.min.js" type="text/javascript"></script>
23
+ <script src="https://code.bdstatic.com/npm/spy-client@2.1.8/dist/spy-client.min.js" type="text/javascript"></script>
22
24
 
23
25
  <!--增强版SDK spy-head-->
24
- <script src="https://code.bdstatic.com/npm/spy-client@2.1.7/dist/spy-head.min.js" type="text/javascript"></script>
26
+ <script src="https://code.bdstatic.com/npm/spy-client@2.1.8/dist/spy-head.min.js" type="text/javascript"></script>
25
27
 
26
28
  <!--基础版SDK-->
27
- <script src="https://code.bdstatic.com/npm/spy-client@2.1.7/dist/spy-client-basic.min.js" type="text/javascript"></script>
29
+ <script src="https://code.bdstatic.com/npm/spy-client@2.1.8/dist/spy-client-basic.min.js" type="text/javascript"></script>
28
30
 
29
31
  ```
30
32
 
@@ -180,6 +182,42 @@ spy.clearAllMark(); // 清除所有mark的信息
180
182
 
181
183
  ```
182
184
 
185
+ 基础版可支持小程序/Node.js/跨端框架环境
186
+
187
+ 1 . 小程序
188
+ 不用做任何修改,就支持采用new Image发送日志。
189
+
190
+ 2 . Node.js/跨端框架环境
191
+
192
+ Node.js,跨端框架,以及小程序环境中若采用`spy.send(xxx, true)`方式,则需要继承SpyClient类,覆盖request方法.
193
+ 如果是Node.js,需要服务器有外网权限
194
+
195
+ ```javascript
196
+ const SpyClient = require('spy-client/dist/spy-client-basic');
197
+ // 若环境编译不支持umd,则可以导入es module
198
+ // const SpyClient = require('spy-client/dist/spy-client-basic.esm');
199
+
200
+ class SpyClientNode from SpyClient {
201
+ request(url: string, data?: any) {
202
+ axios({
203
+ method: data ? 'post' : 'get',
204
+ url,
205
+ data: data ? JSON.stringify(data) : data,
206
+ });
207
+ }
208
+ }
209
+
210
+ const spy = new SpyClientNode({
211
+ pid: '1_1000', // 必须
212
+ lid: '', // 可选,页面的logid
213
+ sample: 1 // 可选,默认为1, 全局抽样,取值:[0-1], 所有发送接口都受到该抽样,单个发送接口的sample配置会覆盖该抽样。
214
+ });
215
+ spy.sendPerf({
216
+ info: {
217
+ responseTime: 200
218
+ }
219
+ });
220
+ ```
183
221
 
184
222
  ## 增强版SDK
185
223
 
@@ -194,6 +232,8 @@ spy.clearAllMark(); // 清除所有mark的信息
194
232
  * 异常:包含大于150K的大图片采集、HTTPS环境下HTTP资源采集
195
233
  * 辅助方式: mark系列辅助方法
196
234
 
235
+ > 增强版SDK仅支持浏览器环境
236
+
197
237
  ### spy-head使用
198
238
 
199
239
  spy-head JS可以视情况通过script内联或嵌入其他JS里
@@ -885,13 +925,16 @@ npm run build
885
925
  # development编译,产出到dist
886
926
  npm run dev
887
927
 
888
- # 发布npm包
928
+ # 发布
929
+ # 1. 构建测试
889
930
  npm run release_pre
890
-
891
- git add . && git commit -m "xx"
892
-
931
+ # 2. 提交代码
932
+ git add . && git commit -m "升级/Fix"
933
+ # 3. 发布npm包,增加tag
893
934
  npm run release
894
935
 
895
- # 修改文档等,把代码push
936
+ # 4. 修改Readme文档里版本号
937
+ git add . && git commit -m "修改文档版本"
938
+ # 5. 把代码push到远程
896
939
  npm run release_post
897
940
  ```
@@ -62,15 +62,20 @@ function assign() {
62
62
  return __assign.apply(this, args);
63
63
  }
64
64
  function getUrlInfoFromURL(url) {
65
- if (URL) {
66
- var obj = new URL(url);
67
- if (obj.host !== undefined) {
68
- return {
69
- protocol: obj.protocol,
70
- host: obj.host,
71
- pathname: obj.pathname,
72
- ext: '',
73
- };
65
+ if (URL && url) {
66
+ try {
67
+ var obj = new URL(url);
68
+ if (obj.host !== undefined) {
69
+ return {
70
+ protocol: obj.protocol,
71
+ host: obj.host,
72
+ pathname: obj.pathname,
73
+ ext: '',
74
+ };
75
+ }
76
+ }
77
+ catch (e) {
78
+ console.error(e);
74
79
  }
75
80
  }
76
81
  return;
@@ -65,15 +65,20 @@ var SpyClient = (function () {
65
65
  return __assign.apply(this, args);
66
66
  }
67
67
  function getUrlInfoFromURL(url) {
68
- if (URL) {
69
- var obj = new URL(url);
70
- if (obj.host !== undefined) {
71
- return {
72
- protocol: obj.protocol,
73
- host: obj.host,
74
- pathname: obj.pathname,
75
- ext: '',
76
- };
68
+ if (URL && url) {
69
+ try {
70
+ var obj = new URL(url);
71
+ if (obj.host !== undefined) {
72
+ return {
73
+ protocol: obj.protocol,
74
+ host: obj.host,
75
+ pathname: obj.pathname,
76
+ ext: '',
77
+ };
78
+ }
79
+ }
80
+ catch (e) {
81
+ console.error(e);
77
82
  }
78
83
  }
79
84
  return;
@@ -1 +1 @@
1
- var SpyClient=function(){"use strict";var i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)};var u=function(){return(u=Object.assign||function(t){for(var e,i=1,o=arguments.length;i<o;i++)for(var n in e=arguments[i])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}).apply(this,arguments)};function o(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return(Object.assign||function(t){for(var e=void 0,i=1,o=arguments.length;i<o;i++)for(var n in e=arguments[i])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}).apply(this,t)}function r(t){var e=function(t){if(URL){var e=new URL(t);if(void 0!==e.host)return{protocol:e.protocol,host:e.host,pathname:e.pathname,ext:""}}}(t);if(!e){var i=document.createElement("a");i.href=t,e={protocol:i.protocol,host:i.host||location.host,pathname:i.pathname,ext:""}}var o=e.pathname.split(".");return e.ext=o[o.length-1],e}function f(t){return+t.toFixed(1)}function d(t){if(!t)return{xpath:""};for(var e=[];t&&1===t.nodeType&&t!==t.parentNode;){var i=t.tagName.toLowerCase();if(t.getAttribute("id")?i+="[#"+t.getAttribute("id")+"]":t.classList&&t.classList.length&&(i+="[."+t.classList[t.classList.length-1]+"]"),e.push(i),t===document.body)break;t=t.parentNode}return{xpath:e.join("<")}}var t=navigator&&navigator.userAgent?navigator.userAgent.toLowerCase().match(/cpu iphone os (.*?)_/):"",n=t&&t[2]&&+t[2]<14;function l(t){console.error("[SpyClient_log]"+t)}function a(i){return Object.keys(i).map(function(t){var e=i[t];return void 0===e?e="":"string"!=typeof e&&(e=JSON.stringify(e)),encodeURIComponent(t)+"="+encodeURIComponent(e)}).join("&")}function c(t){return"[object Array]"===Object.prototype.toString.call(t)}var e=(s.prototype.handle=function(t){if(this.check(t)){if(t=o({pid:this.option.pid,lid:this.option.lid,ts:Date.now(),group:"common"},t),this.option.localCache&&this.option.localCache.addLog(t),"number"==typeof t.sample){if(Math.random()>t.sample)return}else if("number"==typeof this.option.sample&&Math.random()>this.option.sample)return;return delete t.sample,t}},s.prototype.send=function(t,e){void 0===e&&(e=!1);for(var i=[],o=0,n=c(t)?t:[t];o<n.length;o++){var r=n[o];if((r=this.handle(r))&&(i.push(r),!e)){var s=this.option.logServer+a(r);this.request(s)}}e&&this.sendPost(i)},s.prototype.check=function(t){if(!this.option.check)return!0;var e=["perf","except","dist","count"];if(-1===e.indexOf(t.type))return l("type only is one of "+e.join(", ")),!1;if(t.group&&30<t.group.length)return l("group length execeeds 30"),!1;var i=/^[a-zA-Z0-9-_]{0,30}$/;if("except"===t.type){if("string"!=typeof t.info.msg||!t.info.msg.length)return l("info.msg field must be not empty and is String"),!1}else for(var o=0,n=Object.keys(t.info);o<n.length;o++){var r=n[o];if(!i.test(r))return l("info."+r+" is unexpected. Length must be not more than 30. Supported chars: a-zA-Z0-9-_"),!1;var s=t.info[r];if("dist"===t.type){if(30<s.length)return l("info."+r+" value length execeeds 30 when type == 'dist'"),!1}else if("number"!=typeof s)return l("info."+r+" value must be number"),!1}if(t.dim)for(var a=0,c=Object.keys(t.dim);a<c.length;a++){var h=c[a];if(!i.test(h))return l("dim key ["+h+"] is unexpected. Length must be not more than 30. Supported chars: a-zA-Z0-9-_"),!1;var p=t.dim[h];if(!/^[a-zA-Z0-9\-_\*\.\s\/#\+@\&\u4e00-\u9fa5]{0,30}$/.test(p))return l("dim."+h+" value ["+p+"] is unexpected. Length must be not more than 30. Supported chars: a-zA-Z0-9-_*. /#+@& and Chinese"),!1}return!0},s.prototype.sendPerf=function(t){this.send(o({type:"perf"},t))},s.prototype.sendExcept=function(t){this.send(o({type:"except"},t))},s.prototype.sendDist=function(t){this.send(o({type:"dist"},t))},s.prototype.sendCount=function(t){this.send(o({type:"count"},t))},s.prototype.sendExceptForError=function(t,e){var i=o({},e);i.info=o({},e.info||{},{msg:t.message,stack:t.stack}),this.sendExcept(i)},s.prototype.startMark=function(t){this.markCache[t]={start:Date.now()}},s.prototype.endMark=function(t){return this.markCache[t]?(this.markCache[t].total=Date.now()-this.markCache[t].start,this.markCache[t].total):0},s.prototype.clearMark=function(t){this.markCache[t]&&delete this.markCache[t]},s.prototype.getAllMark=function(){for(var t={},e=0,i=Object.keys(this.markCache);e<i.length;e++){var o=i[e];t[o]=this.markCache[o].total}return t},s.prototype.clearAllMark=function(){this.markCache={}},s.prototype.sendPost=function(t){var e=(c(t)?t:[t])[0],i={pid:e.pid,type:e.type,group:e.group},o=this.option.logServer+a(i);this.request(o,t)},s.prototype.request=function(t,e){!n&&navigator&&navigator.sendBeacon&&navigator.sendBeacon(t,e?JSON.stringify(e):void 0)||(e?this.fetch(t,e):(new Image).src=t)},s.prototype.fetch=function(t,e){fetch?fetch(t,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}):l("Global fetch method doesn't exist")},s);function s(t){if(this.sample={},this.markCache={},!t.pid)throw new Error("pid is required");this.option={pid:t.pid,lid:t.lid,check:!1!==t.check,sample:t.sample,localCache:t.localCache,logServer:t.logServer||"https://sp1.baidu.com/5b1ZeDe5KgQFm2e88IuM_a/mwb2.gif?"}}var h=window.__spyHead,p="first-input",g=(m.prototype.listenFID=function(t){this.cb=t,this.callCB()},m.prototype.callCB=function(){void 0!==this.finalValue&&this.cb&&this.cb({fid:this.finalValue})},m.prototype.destroy=function(){this.observer&&this.observer.disconnect(),this.observer=null},m.prototype.handle=function(t){var e=t.pop();e&&(this.finalValue=e.duration,this.callCB(),this.destroy())},m);function m(){var e=this;if(this.observer=null,window.PerformanceObserver){h&&h.entryMap&&h.entryMap[p]&&this.handle(h.entryMap[p]);try{this.observer=new PerformanceObserver(function(t){e.handle(t.getEntries())}),this.observer.observe({entryTypes:[p]})}catch(t){}}}var v=window.__spyHead,y="layout-shift",b=(k.prototype.listenLayoutShift=function(t){this.cb=t},k.prototype.leave=function(){this.onceLeave||(this.onceLeave=!0,this.observer&&this.observer.takeRecords&&this.observer.takeRecords(),this.finalValue=this.value,this.callCB(),this.destroy())},k.prototype.callCB=function(){void 0!==this.finalValue&&this.cb&&this.cb({layoutShift:this.finalValue})},k.prototype.destroy=function(){this.observer&&this.observer.disconnect(),this.observer=null},k.prototype.handle=function(t){var e=this;t.map(function(t){t.hadRecentInput||(e.value=(e.value||0)+(t.value||0))})},k);function k(){var e=this;if(this.observer=null,this.onceLeave=!1,window.PerformanceObserver){v&&v.entryMap&&v.entryMap[y]&&this.handle(v.entryMap[y]);try{this.observer=new PerformanceObserver(function(t){e.handle(t.getEntries())}),this.observer.observe({entryTypes:[y]})}catch(t){}}}var L={};function S(t){return L[t]}var w=window.__spyHead,T="largest-contentful-paint",C=(O.prototype.listenLCP=function(t){this.cb=t,this.callCB()},O.prototype.callCB=function(){this.finalValue&&this.cb&&this.cb({lcp:this.finalValue})},O.prototype.load=function(){this.observer&&this.observer.takeRecords&&this.observer.takeRecords(),this.finalValue=this.value,function(t,e){L[t]=e}("lcp",this.value),this.callCB(),this.destroy()},O.prototype.destroy=function(){this.observer&&this.observer.disconnect(),this.observer=null},O.prototype.handle=function(t){var e=this;t.map(function(t){e.value=t.renderTime||t.loadTime})},O);function O(){var e=this;if(this.observer=null,window.PerformanceObserver){w&&w.entryMap&&w.entryMap[T]&&this.handle(w.entryMap[T]);try{this.observer=new PerformanceObserver(function(t){e.handle(t.getEntries())}),this.observer.observe({entryTypes:[T]})}catch(t){}}}function B(t){return t.name.indexOf(".gif?")<0}var R=(I.prototype.check=function(){return window.PerformanceObserver&&performance&&performance.timing&&performance.timing.navigationStart},I.prototype.listenTTI=function(t,e){this.check()&&(this.observeLongtask(2e4),this.cb=t,(e=e||{}).interval&&(this.interval=e.interval),e.filterRequest&&(this.filterRequest=e.filterRequest))},I.prototype.load=function(){this.check()&&(this.ttiTimer=setInterval(this.ttiCheck,this.interval))},I.prototype.ttiCheck=function(){if(this.cb){var t=performance.now();if(!(t-this.lastLongTask<this.interval)){var e=this.getNetworkSilenceAt();if(!1!==e&&!(t-e<this.interval)){clearTimeout(this.ttiTimer);var i=this.lastLongTask;i=i||performance.timing.domContentLoadedEventEnd-performance.timing.navigationStart,this.stopObserveLongTask(),this.cb({tti:i})}}}},I.prototype.observerCallback=function(t){var e=t.getEntries(),i=e[e.length-1];this.lastLongTask=i.startTime+i.duration},I.prototype.stopObserveLongTask=function(){this.observer&&(this.observer.disconnect(),this.observer=null),this.stopLongTaskTimeoutId&&clearTimeout(this.stopLongTaskTimeoutId)},I.prototype.getNetworkSilenceAt=function(){for(var t=0,e=0,i=performance.getEntriesByType("resource").filter(this.filterRequest);e<i.length;e++){var o=i[e];if(!o.responseEnd)return!1;o.responseEnd>t&&(t=o.responseEnd)}return t},I.prototype.observeLongtask=function(t){this.stopObserveLongTask();try{this.observer=new PerformanceObserver(this.observerCallback),this.observer.observe({entryTypes:["longtask"]}),this.stopLongTaskTimeoutId=setTimeout(this.stopObserveLongTask,t)}catch(t){}},I);function I(){this.lastLongTask=0,this.observer=null,this.interval=5e3,this.filterRequest=B,this.observerCallback=this.observerCallback.bind(this),this.ttiCheck=this.ttiCheck.bind(this)}var z,E,P,j,x=(H.prototype.listenTiming=function(t){window.performance&&window.performance.timing&&(this.cb=t)},H.prototype.load=function(){var t=this;setTimeout(function(){t.cb&&t.cb(t.getMetric())},500)},H.prototype.getMetric=function(){var r={},t=window.performance.timing,e=t.navigationStart;if(r.dns=t.domainLookupEnd-t.domainLookupStart,r.tcp=t.connectEnd-t.connectStart,r.request=t.responseStart-t.requestStart,r.response=t.responseEnd-t.responseStart,r.parseHtml=t.domInteractive-t.domLoading,r.domReady=t.domContentLoadedEventEnd-e,r.loadEventHandle=t.loadEventEnd-t.loadEventStart,r.load=t.loadEventEnd-e,performance.getEntriesByType){var i=performance.getEntriesByType("paint");i&&i.length&&i.forEach(function(t){var e=t.name,i=t.duration,o=t.startTime,n=Math.ceil(i+o);"first-paint"===e&&(r.fp=n),"first-contentful-paint"===e&&(r.fcp=n)})}return t.domFirstPaint&&(r.t7FirstPaint=t.domFirstPaint-e),t.domFirstScreenPaint&&(r.t7FirstScreen=t.domFirstScreenPaint-e),r},H);function H(){}(E=z=z||{}).JS="js",E.CSS="css",E.IMG="img",E.FONT="font",(j=P=P||{})[j.ttf=0]="ttf",j[j.eot=1]="eot",j[j.woff=2]="woff",j[j.woff2=3]="woff2";var M=["/mwb2.gif"];function N(t,e){for(var i=0,o=e;i<o.length;i++){var n=o[i];if(-1<t.indexOf(n))return!0}return!1}function _(t){return+t.toFixed(1)}var q=(F.prototype.check=function(){return performance&&performance.getEntriesByType},F.prototype.listenResource=function(t,e){void 0===e&&(e={}),this.check()&&(this.resOption=o(this.resOption,e),this.trigger=this.resOption.trigger,this.cb=t)},F.prototype.listenBigImg=function(t,e){void 0===e&&(e={}),this.check()&&(this.bigImgOption=o(this.bigImgOption,e),this.trigger=this.bigImgOption.trigger,this.bigImgCB=t)},F.prototype.listenHttpResource=function(t,e){void 0===e&&(e={}),this.check()&&(this.httpResOption=o(this.httpResOption,e),this.trigger=this.httpResOption.trigger,this.httpResCB=t)},F.prototype.listenSlowResource=function(t,e){void 0===e&&(e={}),this.check()&&(this.slowOption=o(this.slowOption,e),this.trigger=this.slowOption.trigger,this.slowResCB=t)},F.prototype.report=function(){var l=this,t=this.getMetric();if(t){var e=t.metric,i=t.hostMetric;this.cb&&this.cb(e,i)}this.bigImgCB&&"function"==typeof window.requestIdleCallback&&Object.keys(this.bigImgList).length&&window.requestIdleCallback(function(){for(var t=0,e=Object.keys(l.bigImgList);t<e.length;t++)for(var i=e[t],o=0,n=l.bigImgList[i];o<n.length;o++){var r=n[o],s=r.timing,a=r.type;try{var c=document.body.querySelector('img[src="'+s.name+'"]');l.bigImgCB({msg:s.name,dur:s.duration,xpath:d(c).xpath,host:i,type:a})}catch(t){console.error(t)}}}),this.httpResCB&&"function"==typeof window.requestIdleCallback&&Object.keys(this.httpResList).length&&window.requestIdleCallback(function(){for(var t=0,e=Object.keys(l.httpResList);t<e.length;t++)for(var i=e[t],o=0,n=l.httpResList[i];o<n.length;o++){var r=n[o],s=r.timing,a=r.type;try{var c=document.body.querySelector('[src="'+s.name+'"]');l.httpResCB({msg:s.name,dur:s.duration,xpath:d(c).xpath,host:i,type:a})}catch(t){console.error(t)}}}),this.slowResCB&&"function"==typeof window.requestIdleCallback&&Object.keys(this.slowList).length&&window.requestIdleCallback(function(){for(var t=0,e=Object.keys(l.slowList);t<e.length;t++)for(var i=e[t],o=0,n=l.slowList[i];o<n.length;o++){var r=n[o],s=r.timing,a=r.type;try{var c=document.body.querySelector('[src="'+s.name+'"]'),h={wait:f((p=s).domainLookupStart-(p.navigationStart||p.fetchStart||p.startTime)),dns:f(p.domainLookupEnd-p.domainLookupStart),connect:f(p.connectEnd-p.connectStart),req:f(p.responseStart-p.requestStart),res:f(p.responseEnd-p.responseStart)};l.slowResCB(u(u({},h),{dur:s.duration,msg:s.name,xpath:d(c).xpath,host:i,type:a}))}catch(t){console.error(t)}}var p})},F.prototype.load=function(){var t=this;"load"===this.trigger&&this.check()&&setTimeout(function(){t.report()},500)},F.prototype.leave=function(){"leave"===this.trigger&&this.report()},F.prototype.push=function(t,e,i,o){N(o.pathname,this.resOption.ignorePaths||[])||(e.push(i),this.pushWithHost(t,this.hostList,i,o)),N(o.pathname,this.slowOption.ignorePaths||[])||i.duration>this.slowOption.threshold&&this.pushWithHost(t,this.slowList,i,o)},F.prototype.pushWithHost=function(t,e,i,o){var n=o.host;e[n]||(e[n]=[]),e[n].push({timing:i,type:t})},F.prototype.collectHttpResInHttps=function(t,e,i){"https:"!==location.protocol||0!==e.name.indexOf("http://")||N(i.pathname,this.httpResOption.ignorePaths||[])||this.pushWithHost(t,this.httpResList,e,i)},F.prototype.addScript=function(t,e){"js"===e.ext&&0!==t.decodedBodySize&&this.push("js",this.jsList,t,e)},F.prototype.addResFromCss=function(t,e){e.ext&&P.hasOwnProperty(e.ext)?this.push("font",this.fontList,t,e):this.addImg(t,e)},F.prototype.addLink=function(t,e){"css"===e.ext?this.push("css",this.cssList,t,e):"js"===e.ext&&this.push("js",this.jsList,t,e)},F.prototype.addImg=function(t,e){this.push("img",this.imgList,t,e),t.decodedBodySize>(this.bigImgOption.maxSize||0)&&!N(e.pathname,this.bigImgOption.ignorePaths||[])&&this.pushWithHost("img",this.bigImgList,t,e)},F.prototype.handleTimings=function(t){for(var e=t.length,i=0;i<e;i++){var o=t[i],n=r(o.name);if(!N(n.pathname,M))switch(t[i].initiatorType){case"script":this.addScript(o,n);break;case"css":this.addResFromCss(o,n);break;case"img":this.addImg(o,n);break;case"link":this.addLink(o,n);break;case"audio":this.collectHttpResInHttps("audio",o,n);break;case"video":this.collectHttpResInHttps("video",o,n)}}},F.prototype.getNumAndSize=function(t,e){var i={},o=t+"Num",n=t+"Size",r=t+"TransferSize",s=t+"CacheRate",a=t+"Duration";i[o]=0,i[n]=0;var c=i[r]=0;if(e.forEach(function(t){i[o]++,i[n]+=t.decodedBodySize/1024,i[r]+=t.transferSize/1024,c+=t.duration}),i[a]=_(0<i[o]?c/i[o]:0),i[n]){var h=i[n]-i[r];i[s]=_(0<=h?100*h/i[n]:0)}return i[n]=_(i[n]),i[r]=_(i[r]),i},F.prototype.getMetric=function(){var t=performance.getEntriesByType("navigation")[0],e=performance.getEntriesByType("resource");if(t&&e&&e.length){this.handleTimings(e);var i=u(u(u(u({},this.getNumAndSize(z.JS,this.jsList)),this.getNumAndSize(z.CSS,this.cssList)),this.getNumAndSize(z.IMG,this.imgList)),this.getNumAndSize(z.FONT,this.fontList)),o=t;i.docSize=_(o.decodedBodySize/1024),i.docTransferSize=_(o.transferSize/1024),i.headerSize=_((o.transferSize-o.encodedBodySize||0)/1024),i.allSize=_(i.docSize+i.jsSize+i.cssSize+i.imgSize+i.fontSize),i.allTransferSize=_(i.docTransferSize+i.jsTransferSize+i.cssTransferSize+i.imgTransferSize+i.fontTransferSize);for(var n={},r=0,s=Object.keys(this.hostList);r<s.length;r++){var a=s[r],c=this.hostList[a].map(function(t){return t.timing});n[a]=this.getNumAndSize("host",c)}return{metric:i,hostMetric:n}}},F);function F(){this.trigger="load",this.jsList=[],this.cssList=[],this.imgList=[],this.fontList=[],this.hostList={},this.bigImgList={},this.httpResList={},this.slowList={},this.resOption={ignorePaths:[],trigger:"load"},this.bigImgOption={ignorePaths:[],maxSize:153600,trigger:"load"},this.httpResOption={ignorePaths:[],trigger:"load"},this.slowOption={ignorePaths:[],trigger:"load",threshold:1e3}}var A=null;window.performance&&window.performance.memory&&(A=window.performance.memory);var D=(J.prototype.listenMemory=function(t){this.cb=t},J.prototype.leave=function(){if(!this.onceLeave&&A){this.onceLeave=!0;var t=window.performance.memory;if(t.usedJSHeapSize===A.usedJSHeapSize&&t.totalJSHeapSize===A.totalJSHeapSize)return;var e=window.performance.memory;this.cb&&this.cb({usedJSHeapSize:e.usedJSHeapSize/1024,totalJSHeapSize:e.totalJSHeapSize/1024,jsHeapSizeLimit:e.jsHeapSizeLimit/1024,usedJSHeapRate:100*e.usedJSHeapSize/e.totalJSHeapSize})}},J);function J(){this.onceLeave=!1}var V=(Z.prototype.getNavigatorInfo=function(){var t={},e=navigator.connection;return"object"==typeof e&&(t={downlink:e.downlink,effectiveType:e.effectiveType,rtt:e.rtt,saveData:!!e.saveData}),navigator.deviceMemory&&(t.deviceMemory=navigator.deviceMemory),navigator.hardwareConcurrency&&(t.hardwareConcurrency=navigator.deviceMemory),t},Z.prototype.load=function(){},Z);function Z(){}var W,U,G,$=window.__spyHead,K="longtask",Q=(X.prototype.check=function(){return window.PerformanceObserver&&performance&&performance.timing&&performance.timing.navigationStart},X.prototype.listenFSPLongTask=function(t){this.check()&&(this.fspCB=t)},X.prototype.listenLCPLongTask=function(t){this.check()&&(this.lcpCB=t)},X.prototype.listenLoadLongTask=function(t){this.check()&&(this.loadCB=t)},X.prototype.listenPageLongTask=function(t){this.check()&&(this.pageCB=t)},X.prototype.load=function(){var i=this;if(this.check()){var o=this.getStatData(Date.now());setTimeout(function(){if(i.loadCB&&i.loadCB({loadLongtaskTime:o.time,loadTBT:o.tbt,loadTotalTime:o.totalTime,loadLongtaskRate:o.rate,loadLongtaskNum:o.num}),performance.timing&&performance.timing.domFirstScreenPaint){var t=i.getStatData(performance.timing.domFirstScreenPaint);i.fspCB&&i.fspCB({fspLongtaskTime:t.time,fspTBT:t.tbt,fspTotalTime:t.totalTime,fspLongtaskRate:t.rate,fspLongtaskNum:t.num})}if(S("lcp")){var e=i.getStatData(performance.timing.navigationStart+S("lcp"));i.lcpCB&&i.lcpCB({lcpLongtaskTime:e.time,lcpTBT:e.tbt,lcpTotalTime:e.totalTime,lcpLongtaskRate:e.rate,lcpLongtaskNum:e.num})}},200)}},X.prototype.leave=function(){if(!this.onceLeave){this.onceLeave=!0;var t=this.getStatData(Date.now());this.pageCB&&this.pageCB({pageLongtaskTime:t.time,pageTBT:t.tbt,pageTotalTime:t.totalTime,pageLongtaskRate:t.rate,pageLongtaskNum:t.num,pageIframeLongtaskTime:t.iframeTime,pageIframeLongtaskRate:t.iframeRate,pageIframeLongtaskNum:t.iframeNum})}},X.prototype.destroy=function(){this.lts=[],this.observer&&this.observer.disconnect(),this.observer=null},X.prototype.getStatData=function(t){for(var e=performance.timing.navigationStart,i=0,o=0,n=0,r=0,s=0,a={},c=0;c<this.lts.length;c++){var h=this.lts[c],p=h.duration;if(e+h.startTime+p<t&&(i+=p,o+=0<p-50?p-50:0,n++,h.attribution&&h.attribution[0])){var l=h.attribution[0].containerSrc;l&&l!==location.href&&(a[l]||(a[l]=[]),a[l].push(p),r+=p,s++)}}var u=t-e;return{num:n,time:i,tbt:o,totalTime:u,rate:100*i/u,iframeTime:r,iframeNum:s,iframeRate:100*r/u,iframeLongtasks:a}},X);function X(){var e=this;this.lts=[],this.observer=null,this.onceLeave=!1,$&&$.entryMap&&$.entryMap[K]&&(this.lts=this.lts.concat($.entryMap[K]));try{this.observer=new PerformanceObserver(function(t){e.lts=e.lts.concat(t.getEntries())}),this.observer.observe({entryTypes:[K]})}catch(t){}}function Y(){this.constructor=W}function tt(t){var e=G.call(this,t)||this;return e.modules=[],e.register(new g),e.register(new C),e.register(new b),e.register(new R),e.register(new x),e.register(new q),e.register(new D),e.register(new V),e.register(new Q),e.visibilitychangeCB=e.visibilitychangeCB.bind(e),e.load=e.load.bind(e),e.leave=e.leave.bind(e),"complete"===document.readyState?e.load():window.addEventListener("load",e.load),document.addEventListener("visibilitychange",e.visibilitychangeCB),window.addEventListener("beforeunload",e.leave,!1),window.addEventListener("unload",e.leave,!1),e.handleHead(),e}return i(W=tt,U=G=e),void(W.prototype=null===U?Object.create(U):(Y.prototype=U.prototype,new Y)),tt.prototype.handleHead=function(){var e=this;if(this.option.localCache){var t=window.__spyHead;if(t&&t.winerrors){for(var i=0;i<t.winerrors.length;i++){var o=t.winerrors[i];this.option.localCache.addLog(o)}t.interceptor=function(t){e.option.localCache.addLog(t)}}}},tt.prototype.listenFID=function(t){this.invoke("listenFID",t)},tt.prototype.listenLayoutShift=function(t){this.invoke("listenLayoutShift",t)},tt.prototype.listenLCP=function(t){this.invoke("listenLCP",t)},tt.prototype.listenFSPLongTask=function(t){this.invoke("listenFSPLongTask",t)},tt.prototype.listenLCPLongTask=function(t){this.invoke("listenLCPLongTask",t)},tt.prototype.listenLoadLongTask=function(t){this.invoke("listenLoadLongTask",t)},tt.prototype.listenPageLongTask=function(t){this.invoke("listenPageLongTask",t)},tt.prototype.listenMemory=function(t){this.invoke("listenMemory",t)},tt.prototype.getNavigatorInfo=function(){return this.invoke("getNavigatorInfo")},tt.prototype.listenResource=function(t,e){this.invoke("listenResource",t,e)},tt.prototype.listenBigImg=function(t,e){this.invoke("listenBigImg",t,e)},tt.prototype.listenHttpResource=function(t,e){this.invoke("listenHttpResource",t,e)},tt.prototype.listenSlowResource=function(t,e){this.invoke("listenSlowResource",t,e)},tt.prototype.listenTiming=function(t){this.invoke("listenTiming",t)},tt.prototype.listenTTI=function(t,e){this.invoke("listenTTI",t,e)},tt.prototype.invoke=function(t,e,i){for(var o=0;o<this.modules.length;o++){var n=this.modules[o];if("function"==typeof n[t])return n[t].apply(n,[e,i])}console.error("no method",t)},tt.prototype.register=function(t){this.modules.push(t)},tt.prototype.load=function(){for(var t=0;t<this.modules.length;t++){var e=this.modules[t];e.load&&e.load()}},tt.prototype.leave=function(){for(var t=0;t<this.modules.length;t++){var e=this.modules[t];e.leave&&e.leave()}},tt.prototype.destroy=function(){for(var t=0;t<this.modules.length;t++){var e=this.modules[t];e.destroy&&e.destroy()}document.removeEventListener("visibilitychange",this.visibilitychangeCB),window.removeEventListener("load",this.load),window.removeEventListener("beforeunload",this.leave),window.removeEventListener("unload",this.destroy)},tt.prototype.visibilitychangeCB=function(){"hidden"===document.visibilityState&&this.leave()},tt}();
1
+ var SpyClient=function(){"use strict";var i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)};var u=function(){return(u=Object.assign||function(t){for(var e,i=1,o=arguments.length;i<o;i++)for(var n in e=arguments[i])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}).apply(this,arguments)};function o(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return(Object.assign||function(t){for(var e=void 0,i=1,o=arguments.length;i<o;i++)for(var n in e=arguments[i])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}).apply(this,t)}function r(t){var e=function(t){if(URL&&t)try{var e=new URL(t);if(void 0!==e.host)return{protocol:e.protocol,host:e.host,pathname:e.pathname,ext:""}}catch(t){console.error(t)}}(t);if(!e){var i=document.createElement("a");i.href=t,e={protocol:i.protocol,host:i.host||location.host,pathname:i.pathname,ext:""}}var o=e.pathname.split(".");return e.ext=o[o.length-1],e}function f(t){return+t.toFixed(1)}function d(t){if(!t)return{xpath:""};for(var e=[];t&&1===t.nodeType&&t!==t.parentNode;){var i=t.tagName.toLowerCase();if(t.getAttribute("id")?i+="[#"+t.getAttribute("id")+"]":t.classList&&t.classList.length&&(i+="[."+t.classList[t.classList.length-1]+"]"),e.push(i),t===document.body)break;t=t.parentNode}return{xpath:e.join("<")}}var t=navigator&&navigator.userAgent?navigator.userAgent.toLowerCase().match(/cpu iphone os (.*?)_/):"",n=t&&t[2]&&+t[2]<14;function l(t){console.error("[SpyClient_log]"+t)}function a(i){return Object.keys(i).map(function(t){var e=i[t];return void 0===e?e="":"string"!=typeof e&&(e=JSON.stringify(e)),encodeURIComponent(t)+"="+encodeURIComponent(e)}).join("&")}function c(t){return"[object Array]"===Object.prototype.toString.call(t)}var e=(s.prototype.handle=function(t){if(this.check(t)){if(t=o({pid:this.option.pid,lid:this.option.lid,ts:Date.now(),group:"common"},t),this.option.localCache&&this.option.localCache.addLog(t),"number"==typeof t.sample){if(Math.random()>t.sample)return}else if("number"==typeof this.option.sample&&Math.random()>this.option.sample)return;return delete t.sample,t}},s.prototype.send=function(t,e){void 0===e&&(e=!1);for(var i=[],o=0,n=c(t)?t:[t];o<n.length;o++){var r=n[o];if((r=this.handle(r))&&(i.push(r),!e)){var s=this.option.logServer+a(r);this.request(s)}}e&&this.sendPost(i)},s.prototype.check=function(t){if(!this.option.check)return!0;var e=["perf","except","dist","count"];if(-1===e.indexOf(t.type))return l("type only is one of "+e.join(", ")),!1;if(t.group&&30<t.group.length)return l("group length execeeds 30"),!1;var i=/^[a-zA-Z0-9-_]{0,30}$/;if("except"===t.type){if("string"!=typeof t.info.msg||!t.info.msg.length)return l("info.msg field must be not empty and is String"),!1}else for(var o=0,n=Object.keys(t.info);o<n.length;o++){var r=n[o];if(!i.test(r))return l("info."+r+" is unexpected. Length must be not more than 30. Supported chars: a-zA-Z0-9-_"),!1;var s=t.info[r];if("dist"===t.type){if(30<s.length)return l("info."+r+" value length execeeds 30 when type == 'dist'"),!1}else if("number"!=typeof s)return l("info."+r+" value must be number"),!1}if(t.dim)for(var a=0,c=Object.keys(t.dim);a<c.length;a++){var h=c[a];if(!i.test(h))return l("dim key ["+h+"] is unexpected. Length must be not more than 30. Supported chars: a-zA-Z0-9-_"),!1;var p=t.dim[h];if(!/^[a-zA-Z0-9\-_\*\.\s\/#\+@\&\u4e00-\u9fa5]{0,30}$/.test(p))return l("dim."+h+" value ["+p+"] is unexpected. Length must be not more than 30. Supported chars: a-zA-Z0-9-_*. /#+@& and Chinese"),!1}return!0},s.prototype.sendPerf=function(t){this.send(o({type:"perf"},t))},s.prototype.sendExcept=function(t){this.send(o({type:"except"},t))},s.prototype.sendDist=function(t){this.send(o({type:"dist"},t))},s.prototype.sendCount=function(t){this.send(o({type:"count"},t))},s.prototype.sendExceptForError=function(t,e){var i=o({},e);i.info=o({},e.info||{},{msg:t.message,stack:t.stack}),this.sendExcept(i)},s.prototype.startMark=function(t){this.markCache[t]={start:Date.now()}},s.prototype.endMark=function(t){return this.markCache[t]?(this.markCache[t].total=Date.now()-this.markCache[t].start,this.markCache[t].total):0},s.prototype.clearMark=function(t){this.markCache[t]&&delete this.markCache[t]},s.prototype.getAllMark=function(){for(var t={},e=0,i=Object.keys(this.markCache);e<i.length;e++){var o=i[e];t[o]=this.markCache[o].total}return t},s.prototype.clearAllMark=function(){this.markCache={}},s.prototype.sendPost=function(t){var e=(c(t)?t:[t])[0],i={pid:e.pid,type:e.type,group:e.group},o=this.option.logServer+a(i);this.request(o,t)},s.prototype.request=function(t,e){!n&&navigator&&navigator.sendBeacon&&navigator.sendBeacon(t,e?JSON.stringify(e):void 0)||(e?this.fetch(t,e):(new Image).src=t)},s.prototype.fetch=function(t,e){fetch?fetch(t,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}):l("Global fetch method doesn't exist")},s);function s(t){if(this.sample={},this.markCache={},!t.pid)throw new Error("pid is required");this.option={pid:t.pid,lid:t.lid,check:!1!==t.check,sample:t.sample,localCache:t.localCache,logServer:t.logServer||"https://sp1.baidu.com/5b1ZeDe5KgQFm2e88IuM_a/mwb2.gif?"}}var h=window.__spyHead,p="first-input",g=(m.prototype.listenFID=function(t){this.cb=t,this.callCB()},m.prototype.callCB=function(){void 0!==this.finalValue&&this.cb&&this.cb({fid:this.finalValue})},m.prototype.destroy=function(){this.observer&&this.observer.disconnect(),this.observer=null},m.prototype.handle=function(t){var e=t.pop();e&&(this.finalValue=e.duration,this.callCB(),this.destroy())},m);function m(){var e=this;if(this.observer=null,window.PerformanceObserver){h&&h.entryMap&&h.entryMap[p]&&this.handle(h.entryMap[p]);try{this.observer=new PerformanceObserver(function(t){e.handle(t.getEntries())}),this.observer.observe({entryTypes:[p]})}catch(t){}}}var v=window.__spyHead,y="layout-shift",b=(k.prototype.listenLayoutShift=function(t){this.cb=t},k.prototype.leave=function(){this.onceLeave||(this.onceLeave=!0,this.observer&&this.observer.takeRecords&&this.observer.takeRecords(),this.finalValue=this.value,this.callCB(),this.destroy())},k.prototype.callCB=function(){void 0!==this.finalValue&&this.cb&&this.cb({layoutShift:this.finalValue})},k.prototype.destroy=function(){this.observer&&this.observer.disconnect(),this.observer=null},k.prototype.handle=function(t){var e=this;t.map(function(t){t.hadRecentInput||(e.value=(e.value||0)+(t.value||0))})},k);function k(){var e=this;if(this.observer=null,this.onceLeave=!1,window.PerformanceObserver){v&&v.entryMap&&v.entryMap[y]&&this.handle(v.entryMap[y]);try{this.observer=new PerformanceObserver(function(t){e.handle(t.getEntries())}),this.observer.observe({entryTypes:[y]})}catch(t){}}}var L={};function S(t){return L[t]}var w=window.__spyHead,T="largest-contentful-paint",C=(O.prototype.listenLCP=function(t){this.cb=t,this.callCB()},O.prototype.callCB=function(){this.finalValue&&this.cb&&this.cb({lcp:this.finalValue})},O.prototype.load=function(){this.observer&&this.observer.takeRecords&&this.observer.takeRecords(),this.finalValue=this.value,function(t,e){L[t]=e}("lcp",this.value),this.callCB(),this.destroy()},O.prototype.destroy=function(){this.observer&&this.observer.disconnect(),this.observer=null},O.prototype.handle=function(t){var e=this;t.map(function(t){e.value=t.renderTime||t.loadTime})},O);function O(){var e=this;if(this.observer=null,window.PerformanceObserver){w&&w.entryMap&&w.entryMap[T]&&this.handle(w.entryMap[T]);try{this.observer=new PerformanceObserver(function(t){e.handle(t.getEntries())}),this.observer.observe({entryTypes:[T]})}catch(t){}}}function B(t){return t.name.indexOf(".gif?")<0}var R=(I.prototype.check=function(){return window.PerformanceObserver&&performance&&performance.timing&&performance.timing.navigationStart},I.prototype.listenTTI=function(t,e){this.check()&&(this.observeLongtask(2e4),this.cb=t,(e=e||{}).interval&&(this.interval=e.interval),e.filterRequest&&(this.filterRequest=e.filterRequest))},I.prototype.load=function(){this.check()&&(this.ttiTimer=setInterval(this.ttiCheck,this.interval))},I.prototype.ttiCheck=function(){if(this.cb){var t=performance.now();if(!(t-this.lastLongTask<this.interval)){var e=this.getNetworkSilenceAt();if(!1!==e&&!(t-e<this.interval)){clearTimeout(this.ttiTimer);var i=this.lastLongTask;i=i||performance.timing.domContentLoadedEventEnd-performance.timing.navigationStart,this.stopObserveLongTask(),this.cb({tti:i})}}}},I.prototype.observerCallback=function(t){var e=t.getEntries(),i=e[e.length-1];this.lastLongTask=i.startTime+i.duration},I.prototype.stopObserveLongTask=function(){this.observer&&(this.observer.disconnect(),this.observer=null),this.stopLongTaskTimeoutId&&clearTimeout(this.stopLongTaskTimeoutId)},I.prototype.getNetworkSilenceAt=function(){for(var t=0,e=0,i=performance.getEntriesByType("resource").filter(this.filterRequest);e<i.length;e++){var o=i[e];if(!o.responseEnd)return!1;o.responseEnd>t&&(t=o.responseEnd)}return t},I.prototype.observeLongtask=function(t){this.stopObserveLongTask();try{this.observer=new PerformanceObserver(this.observerCallback),this.observer.observe({entryTypes:["longtask"]}),this.stopLongTaskTimeoutId=setTimeout(this.stopObserveLongTask,t)}catch(t){}},I);function I(){this.lastLongTask=0,this.observer=null,this.interval=5e3,this.filterRequest=B,this.observerCallback=this.observerCallback.bind(this),this.ttiCheck=this.ttiCheck.bind(this)}var z,E,P,j,x=(H.prototype.listenTiming=function(t){window.performance&&window.performance.timing&&(this.cb=t)},H.prototype.load=function(){var t=this;setTimeout(function(){t.cb&&t.cb(t.getMetric())},500)},H.prototype.getMetric=function(){var r={},t=window.performance.timing,e=t.navigationStart;if(r.dns=t.domainLookupEnd-t.domainLookupStart,r.tcp=t.connectEnd-t.connectStart,r.request=t.responseStart-t.requestStart,r.response=t.responseEnd-t.responseStart,r.parseHtml=t.domInteractive-t.domLoading,r.domReady=t.domContentLoadedEventEnd-e,r.loadEventHandle=t.loadEventEnd-t.loadEventStart,r.load=t.loadEventEnd-e,performance.getEntriesByType){var i=performance.getEntriesByType("paint");i&&i.length&&i.forEach(function(t){var e=t.name,i=t.duration,o=t.startTime,n=Math.ceil(i+o);"first-paint"===e&&(r.fp=n),"first-contentful-paint"===e&&(r.fcp=n)})}return t.domFirstPaint&&(r.t7FirstPaint=t.domFirstPaint-e),t.domFirstScreenPaint&&(r.t7FirstScreen=t.domFirstScreenPaint-e),r},H);function H(){}(E=z=z||{}).JS="js",E.CSS="css",E.IMG="img",E.FONT="font",(j=P=P||{})[j.ttf=0]="ttf",j[j.eot=1]="eot",j[j.woff=2]="woff",j[j.woff2=3]="woff2";var M=["/mwb2.gif"];function N(t,e){for(var i=0,o=e;i<o.length;i++){var n=o[i];if(-1<t.indexOf(n))return!0}return!1}function _(t){return+t.toFixed(1)}var q=(F.prototype.check=function(){return performance&&performance.getEntriesByType},F.prototype.listenResource=function(t,e){void 0===e&&(e={}),this.check()&&(this.resOption=o(this.resOption,e),this.trigger=this.resOption.trigger,this.cb=t)},F.prototype.listenBigImg=function(t,e){void 0===e&&(e={}),this.check()&&(this.bigImgOption=o(this.bigImgOption,e),this.trigger=this.bigImgOption.trigger,this.bigImgCB=t)},F.prototype.listenHttpResource=function(t,e){void 0===e&&(e={}),this.check()&&(this.httpResOption=o(this.httpResOption,e),this.trigger=this.httpResOption.trigger,this.httpResCB=t)},F.prototype.listenSlowResource=function(t,e){void 0===e&&(e={}),this.check()&&(this.slowOption=o(this.slowOption,e),this.trigger=this.slowOption.trigger,this.slowResCB=t)},F.prototype.report=function(){var l=this,t=this.getMetric();if(t){var e=t.metric,i=t.hostMetric;this.cb&&this.cb(e,i)}this.bigImgCB&&"function"==typeof window.requestIdleCallback&&Object.keys(this.bigImgList).length&&window.requestIdleCallback(function(){for(var t=0,e=Object.keys(l.bigImgList);t<e.length;t++)for(var i=e[t],o=0,n=l.bigImgList[i];o<n.length;o++){var r=n[o],s=r.timing,a=r.type;try{var c=document.body.querySelector('img[src="'+s.name+'"]');l.bigImgCB({msg:s.name,dur:s.duration,xpath:d(c).xpath,host:i,type:a})}catch(t){console.error(t)}}}),this.httpResCB&&"function"==typeof window.requestIdleCallback&&Object.keys(this.httpResList).length&&window.requestIdleCallback(function(){for(var t=0,e=Object.keys(l.httpResList);t<e.length;t++)for(var i=e[t],o=0,n=l.httpResList[i];o<n.length;o++){var r=n[o],s=r.timing,a=r.type;try{var c=document.body.querySelector('[src="'+s.name+'"]');l.httpResCB({msg:s.name,dur:s.duration,xpath:d(c).xpath,host:i,type:a})}catch(t){console.error(t)}}}),this.slowResCB&&"function"==typeof window.requestIdleCallback&&Object.keys(this.slowList).length&&window.requestIdleCallback(function(){for(var t=0,e=Object.keys(l.slowList);t<e.length;t++)for(var i=e[t],o=0,n=l.slowList[i];o<n.length;o++){var r=n[o],s=r.timing,a=r.type;try{var c=document.body.querySelector('[src="'+s.name+'"]'),h={wait:f((p=s).domainLookupStart-(p.navigationStart||p.fetchStart||p.startTime)),dns:f(p.domainLookupEnd-p.domainLookupStart),connect:f(p.connectEnd-p.connectStart),req:f(p.responseStart-p.requestStart),res:f(p.responseEnd-p.responseStart)};l.slowResCB(u(u({},h),{dur:s.duration,msg:s.name,xpath:d(c).xpath,host:i,type:a}))}catch(t){console.error(t)}}var p})},F.prototype.load=function(){var t=this;"load"===this.trigger&&this.check()&&setTimeout(function(){t.report()},500)},F.prototype.leave=function(){"leave"===this.trigger&&this.report()},F.prototype.push=function(t,e,i,o){N(o.pathname,this.resOption.ignorePaths||[])||(e.push(i),this.pushWithHost(t,this.hostList,i,o)),N(o.pathname,this.slowOption.ignorePaths||[])||i.duration>this.slowOption.threshold&&this.pushWithHost(t,this.slowList,i,o)},F.prototype.pushWithHost=function(t,e,i,o){var n=o.host;e[n]||(e[n]=[]),e[n].push({timing:i,type:t})},F.prototype.collectHttpResInHttps=function(t,e,i){"https:"!==location.protocol||0!==e.name.indexOf("http://")||N(i.pathname,this.httpResOption.ignorePaths||[])||this.pushWithHost(t,this.httpResList,e,i)},F.prototype.addScript=function(t,e){"js"===e.ext&&0!==t.decodedBodySize&&this.push("js",this.jsList,t,e)},F.prototype.addResFromCss=function(t,e){e.ext&&P.hasOwnProperty(e.ext)?this.push("font",this.fontList,t,e):this.addImg(t,e)},F.prototype.addLink=function(t,e){"css"===e.ext?this.push("css",this.cssList,t,e):"js"===e.ext&&this.push("js",this.jsList,t,e)},F.prototype.addImg=function(t,e){this.push("img",this.imgList,t,e),t.decodedBodySize>(this.bigImgOption.maxSize||0)&&!N(e.pathname,this.bigImgOption.ignorePaths||[])&&this.pushWithHost("img",this.bigImgList,t,e)},F.prototype.handleTimings=function(t){for(var e=t.length,i=0;i<e;i++){var o=t[i],n=r(o.name);if(!N(n.pathname,M))switch(t[i].initiatorType){case"script":this.addScript(o,n);break;case"css":this.addResFromCss(o,n);break;case"img":this.addImg(o,n);break;case"link":this.addLink(o,n);break;case"audio":this.collectHttpResInHttps("audio",o,n);break;case"video":this.collectHttpResInHttps("video",o,n)}}},F.prototype.getNumAndSize=function(t,e){var i={},o=t+"Num",n=t+"Size",r=t+"TransferSize",s=t+"CacheRate",a=t+"Duration";i[o]=0,i[n]=0;var c=i[r]=0;if(e.forEach(function(t){i[o]++,i[n]+=t.decodedBodySize/1024,i[r]+=t.transferSize/1024,c+=t.duration}),i[a]=_(0<i[o]?c/i[o]:0),i[n]){var h=i[n]-i[r];i[s]=_(0<=h?100*h/i[n]:0)}return i[n]=_(i[n]),i[r]=_(i[r]),i},F.prototype.getMetric=function(){var t=performance.getEntriesByType("navigation")[0],e=performance.getEntriesByType("resource");if(t&&e&&e.length){this.handleTimings(e);var i=u(u(u(u({},this.getNumAndSize(z.JS,this.jsList)),this.getNumAndSize(z.CSS,this.cssList)),this.getNumAndSize(z.IMG,this.imgList)),this.getNumAndSize(z.FONT,this.fontList)),o=t;i.docSize=_(o.decodedBodySize/1024),i.docTransferSize=_(o.transferSize/1024),i.headerSize=_((o.transferSize-o.encodedBodySize||0)/1024),i.allSize=_(i.docSize+i.jsSize+i.cssSize+i.imgSize+i.fontSize),i.allTransferSize=_(i.docTransferSize+i.jsTransferSize+i.cssTransferSize+i.imgTransferSize+i.fontTransferSize);for(var n={},r=0,s=Object.keys(this.hostList);r<s.length;r++){var a=s[r],c=this.hostList[a].map(function(t){return t.timing});n[a]=this.getNumAndSize("host",c)}return{metric:i,hostMetric:n}}},F);function F(){this.trigger="load",this.jsList=[],this.cssList=[],this.imgList=[],this.fontList=[],this.hostList={},this.bigImgList={},this.httpResList={},this.slowList={},this.resOption={ignorePaths:[],trigger:"load"},this.bigImgOption={ignorePaths:[],maxSize:153600,trigger:"load"},this.httpResOption={ignorePaths:[],trigger:"load"},this.slowOption={ignorePaths:[],trigger:"load",threshold:1e3}}var A=null;window.performance&&window.performance.memory&&(A=window.performance.memory);var D=(J.prototype.listenMemory=function(t){this.cb=t},J.prototype.leave=function(){if(!this.onceLeave&&A){this.onceLeave=!0;var t=window.performance.memory;if(t.usedJSHeapSize===A.usedJSHeapSize&&t.totalJSHeapSize===A.totalJSHeapSize)return;var e=window.performance.memory;this.cb&&this.cb({usedJSHeapSize:e.usedJSHeapSize/1024,totalJSHeapSize:e.totalJSHeapSize/1024,jsHeapSizeLimit:e.jsHeapSizeLimit/1024,usedJSHeapRate:100*e.usedJSHeapSize/e.totalJSHeapSize})}},J);function J(){this.onceLeave=!1}var V=(Z.prototype.getNavigatorInfo=function(){var t={},e=navigator.connection;return"object"==typeof e&&(t={downlink:e.downlink,effectiveType:e.effectiveType,rtt:e.rtt,saveData:!!e.saveData}),navigator.deviceMemory&&(t.deviceMemory=navigator.deviceMemory),navigator.hardwareConcurrency&&(t.hardwareConcurrency=navigator.deviceMemory),t},Z.prototype.load=function(){},Z);function Z(){}var W,U,G,$=window.__spyHead,K="longtask",Q=(X.prototype.check=function(){return window.PerformanceObserver&&performance&&performance.timing&&performance.timing.navigationStart},X.prototype.listenFSPLongTask=function(t){this.check()&&(this.fspCB=t)},X.prototype.listenLCPLongTask=function(t){this.check()&&(this.lcpCB=t)},X.prototype.listenLoadLongTask=function(t){this.check()&&(this.loadCB=t)},X.prototype.listenPageLongTask=function(t){this.check()&&(this.pageCB=t)},X.prototype.load=function(){var i=this;if(this.check()){var o=this.getStatData(Date.now());setTimeout(function(){if(i.loadCB&&i.loadCB({loadLongtaskTime:o.time,loadTBT:o.tbt,loadTotalTime:o.totalTime,loadLongtaskRate:o.rate,loadLongtaskNum:o.num}),performance.timing&&performance.timing.domFirstScreenPaint){var t=i.getStatData(performance.timing.domFirstScreenPaint);i.fspCB&&i.fspCB({fspLongtaskTime:t.time,fspTBT:t.tbt,fspTotalTime:t.totalTime,fspLongtaskRate:t.rate,fspLongtaskNum:t.num})}if(S("lcp")){var e=i.getStatData(performance.timing.navigationStart+S("lcp"));i.lcpCB&&i.lcpCB({lcpLongtaskTime:e.time,lcpTBT:e.tbt,lcpTotalTime:e.totalTime,lcpLongtaskRate:e.rate,lcpLongtaskNum:e.num})}},200)}},X.prototype.leave=function(){if(!this.onceLeave){this.onceLeave=!0;var t=this.getStatData(Date.now());this.pageCB&&this.pageCB({pageLongtaskTime:t.time,pageTBT:t.tbt,pageTotalTime:t.totalTime,pageLongtaskRate:t.rate,pageLongtaskNum:t.num,pageIframeLongtaskTime:t.iframeTime,pageIframeLongtaskRate:t.iframeRate,pageIframeLongtaskNum:t.iframeNum})}},X.prototype.destroy=function(){this.lts=[],this.observer&&this.observer.disconnect(),this.observer=null},X.prototype.getStatData=function(t){for(var e=performance.timing.navigationStart,i=0,o=0,n=0,r=0,s=0,a={},c=0;c<this.lts.length;c++){var h=this.lts[c],p=h.duration;if(e+h.startTime+p<t&&(i+=p,o+=0<p-50?p-50:0,n++,h.attribution&&h.attribution[0])){var l=h.attribution[0].containerSrc;l&&l!==location.href&&(a[l]||(a[l]=[]),a[l].push(p),r+=p,s++)}}var u=t-e;return{num:n,time:i,tbt:o,totalTime:u,rate:100*i/u,iframeTime:r,iframeNum:s,iframeRate:100*r/u,iframeLongtasks:a}},X);function X(){var e=this;this.lts=[],this.observer=null,this.onceLeave=!1,$&&$.entryMap&&$.entryMap[K]&&(this.lts=this.lts.concat($.entryMap[K]));try{this.observer=new PerformanceObserver(function(t){e.lts=e.lts.concat(t.getEntries())}),this.observer.observe({entryTypes:[K]})}catch(t){}}function Y(){this.constructor=W}function tt(t){var e=G.call(this,t)||this;return e.modules=[],e.register(new g),e.register(new C),e.register(new b),e.register(new R),e.register(new x),e.register(new q),e.register(new D),e.register(new V),e.register(new Q),e.visibilitychangeCB=e.visibilitychangeCB.bind(e),e.load=e.load.bind(e),e.leave=e.leave.bind(e),"complete"===document.readyState?e.load():window.addEventListener("load",e.load),document.addEventListener("visibilitychange",e.visibilitychangeCB),window.addEventListener("beforeunload",e.leave,!1),window.addEventListener("unload",e.leave,!1),e.handleHead(),e}return i(W=tt,U=G=e),void(W.prototype=null===U?Object.create(U):(Y.prototype=U.prototype,new Y)),tt.prototype.handleHead=function(){var e=this;if(this.option.localCache){var t=window.__spyHead;if(t&&t.winerrors){for(var i=0;i<t.winerrors.length;i++){var o=t.winerrors[i];this.option.localCache.addLog(o)}t.interceptor=function(t){e.option.localCache.addLog(t)}}}},tt.prototype.listenFID=function(t){this.invoke("listenFID",t)},tt.prototype.listenLayoutShift=function(t){this.invoke("listenLayoutShift",t)},tt.prototype.listenLCP=function(t){this.invoke("listenLCP",t)},tt.prototype.listenFSPLongTask=function(t){this.invoke("listenFSPLongTask",t)},tt.prototype.listenLCPLongTask=function(t){this.invoke("listenLCPLongTask",t)},tt.prototype.listenLoadLongTask=function(t){this.invoke("listenLoadLongTask",t)},tt.prototype.listenPageLongTask=function(t){this.invoke("listenPageLongTask",t)},tt.prototype.listenMemory=function(t){this.invoke("listenMemory",t)},tt.prototype.getNavigatorInfo=function(){return this.invoke("getNavigatorInfo")},tt.prototype.listenResource=function(t,e){this.invoke("listenResource",t,e)},tt.prototype.listenBigImg=function(t,e){this.invoke("listenBigImg",t,e)},tt.prototype.listenHttpResource=function(t,e){this.invoke("listenHttpResource",t,e)},tt.prototype.listenSlowResource=function(t,e){this.invoke("listenSlowResource",t,e)},tt.prototype.listenTiming=function(t){this.invoke("listenTiming",t)},tt.prototype.listenTTI=function(t,e){this.invoke("listenTTI",t,e)},tt.prototype.invoke=function(t,e,i){for(var o=0;o<this.modules.length;o++){var n=this.modules[o];if("function"==typeof n[t])return n[t].apply(n,[e,i])}console.error("no method",t)},tt.prototype.register=function(t){this.modules.push(t)},tt.prototype.load=function(){for(var t=0;t<this.modules.length;t++){var e=this.modules[t];e.load&&e.load()}},tt.prototype.leave=function(){for(var t=0;t<this.modules.length;t++){var e=this.modules[t];e.leave&&e.leave()}},tt.prototype.destroy=function(){for(var t=0;t<this.modules.length;t++){var e=this.modules[t];e.destroy&&e.destroy()}document.removeEventListener("visibilitychange",this.visibilitychangeCB),window.removeEventListener("load",this.load),window.removeEventListener("beforeunload",this.leave),window.removeEventListener("unload",this.destroy)},tt.prototype.visibilitychangeCB=function(){"hidden"===document.visibilityState&&this.leave()},tt}();
@@ -68,15 +68,20 @@
68
68
  return __assign.apply(this, args);
69
69
  }
70
70
  function getUrlInfoFromURL(url) {
71
- if (URL) {
72
- var obj = new URL(url);
73
- if (obj.host !== undefined) {
74
- return {
75
- protocol: obj.protocol,
76
- host: obj.host,
77
- pathname: obj.pathname,
78
- ext: '',
79
- };
71
+ if (URL && url) {
72
+ try {
73
+ var obj = new URL(url);
74
+ if (obj.host !== undefined) {
75
+ return {
76
+ protocol: obj.protocol,
77
+ host: obj.host,
78
+ pathname: obj.pathname,
79
+ ext: '',
80
+ };
81
+ }
82
+ }
83
+ catch (e) {
84
+ console.error(e);
80
85
  }
81
86
  }
82
87
  return;
@@ -1 +1 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).SpyClient=e()}(this,function(){"use strict";var i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)};var u=function(){return(u=Object.assign||function(t){for(var e,i=1,o=arguments.length;i<o;i++)for(var n in e=arguments[i])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}).apply(this,arguments)};function o(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return(Object.assign||function(t){for(var e=void 0,i=1,o=arguments.length;i<o;i++)for(var n in e=arguments[i])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}).apply(this,t)}function r(t){var e=function(t){if(URL){var e=new URL(t);if(void 0!==e.host)return{protocol:e.protocol,host:e.host,pathname:e.pathname,ext:""}}}(t);if(!e){var i=document.createElement("a");i.href=t,e={protocol:i.protocol,host:i.host||location.host,pathname:i.pathname,ext:""}}var o=e.pathname.split(".");return e.ext=o[o.length-1],e}function f(t){return+t.toFixed(1)}function d(t){if(!t)return{xpath:""};for(var e=[];t&&1===t.nodeType&&t!==t.parentNode;){var i=t.tagName.toLowerCase();if(t.getAttribute("id")?i+="[#"+t.getAttribute("id")+"]":t.classList&&t.classList.length&&(i+="[."+t.classList[t.classList.length-1]+"]"),e.push(i),t===document.body)break;t=t.parentNode}return{xpath:e.join("<")}}var t=navigator&&navigator.userAgent?navigator.userAgent.toLowerCase().match(/cpu iphone os (.*?)_/):"",n=t&&t[2]&&+t[2]<14;function l(t){console.error("[SpyClient_log]"+t)}function a(i){return Object.keys(i).map(function(t){var e=i[t];return void 0===e?e="":"string"!=typeof e&&(e=JSON.stringify(e)),encodeURIComponent(t)+"="+encodeURIComponent(e)}).join("&")}function c(t){return"[object Array]"===Object.prototype.toString.call(t)}var e=(s.prototype.handle=function(t){if(this.check(t)){if(t=o({pid:this.option.pid,lid:this.option.lid,ts:Date.now(),group:"common"},t),this.option.localCache&&this.option.localCache.addLog(t),"number"==typeof t.sample){if(Math.random()>t.sample)return}else if("number"==typeof this.option.sample&&Math.random()>this.option.sample)return;return delete t.sample,t}},s.prototype.send=function(t,e){void 0===e&&(e=!1);for(var i=[],o=0,n=c(t)?t:[t];o<n.length;o++){var r=n[o];if((r=this.handle(r))&&(i.push(r),!e)){var s=this.option.logServer+a(r);this.request(s)}}e&&this.sendPost(i)},s.prototype.check=function(t){if(!this.option.check)return!0;var e=["perf","except","dist","count"];if(-1===e.indexOf(t.type))return l("type only is one of "+e.join(", ")),!1;if(t.group&&30<t.group.length)return l("group length execeeds 30"),!1;var i=/^[a-zA-Z0-9-_]{0,30}$/;if("except"===t.type){if("string"!=typeof t.info.msg||!t.info.msg.length)return l("info.msg field must be not empty and is String"),!1}else for(var o=0,n=Object.keys(t.info);o<n.length;o++){var r=n[o];if(!i.test(r))return l("info."+r+" is unexpected. Length must be not more than 30. Supported chars: a-zA-Z0-9-_"),!1;var s=t.info[r];if("dist"===t.type){if(30<s.length)return l("info."+r+" value length execeeds 30 when type == 'dist'"),!1}else if("number"!=typeof s)return l("info."+r+" value must be number"),!1}if(t.dim)for(var a=0,c=Object.keys(t.dim);a<c.length;a++){var h=c[a];if(!i.test(h))return l("dim key ["+h+"] is unexpected. Length must be not more than 30. Supported chars: a-zA-Z0-9-_"),!1;var p=t.dim[h];if(!/^[a-zA-Z0-9\-_\*\.\s\/#\+@\&\u4e00-\u9fa5]{0,30}$/.test(p))return l("dim."+h+" value ["+p+"] is unexpected. Length must be not more than 30. Supported chars: a-zA-Z0-9-_*. /#+@& and Chinese"),!1}return!0},s.prototype.sendPerf=function(t){this.send(o({type:"perf"},t))},s.prototype.sendExcept=function(t){this.send(o({type:"except"},t))},s.prototype.sendDist=function(t){this.send(o({type:"dist"},t))},s.prototype.sendCount=function(t){this.send(o({type:"count"},t))},s.prototype.sendExceptForError=function(t,e){var i=o({},e);i.info=o({},e.info||{},{msg:t.message,stack:t.stack}),this.sendExcept(i)},s.prototype.startMark=function(t){this.markCache[t]={start:Date.now()}},s.prototype.endMark=function(t){return this.markCache[t]?(this.markCache[t].total=Date.now()-this.markCache[t].start,this.markCache[t].total):0},s.prototype.clearMark=function(t){this.markCache[t]&&delete this.markCache[t]},s.prototype.getAllMark=function(){for(var t={},e=0,i=Object.keys(this.markCache);e<i.length;e++){var o=i[e];t[o]=this.markCache[o].total}return t},s.prototype.clearAllMark=function(){this.markCache={}},s.prototype.sendPost=function(t){var e=(c(t)?t:[t])[0],i={pid:e.pid,type:e.type,group:e.group},o=this.option.logServer+a(i);this.request(o,t)},s.prototype.request=function(t,e){!n&&navigator&&navigator.sendBeacon&&navigator.sendBeacon(t,e?JSON.stringify(e):void 0)||(e?this.fetch(t,e):(new Image).src=t)},s.prototype.fetch=function(t,e){fetch?fetch(t,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}):l("Global fetch method doesn't exist")},s);function s(t){if(this.sample={},this.markCache={},!t.pid)throw new Error("pid is required");this.option={pid:t.pid,lid:t.lid,check:!1!==t.check,sample:t.sample,localCache:t.localCache,logServer:t.logServer||"https://sp1.baidu.com/5b1ZeDe5KgQFm2e88IuM_a/mwb2.gif?"}}var h=window.__spyHead,p="first-input",g=(m.prototype.listenFID=function(t){this.cb=t,this.callCB()},m.prototype.callCB=function(){void 0!==this.finalValue&&this.cb&&this.cb({fid:this.finalValue})},m.prototype.destroy=function(){this.observer&&this.observer.disconnect(),this.observer=null},m.prototype.handle=function(t){var e=t.pop();e&&(this.finalValue=e.duration,this.callCB(),this.destroy())},m);function m(){var e=this;if(this.observer=null,window.PerformanceObserver){h&&h.entryMap&&h.entryMap[p]&&this.handle(h.entryMap[p]);try{this.observer=new PerformanceObserver(function(t){e.handle(t.getEntries())}),this.observer.observe({entryTypes:[p]})}catch(t){}}}var v=window.__spyHead,y="layout-shift",b=(k.prototype.listenLayoutShift=function(t){this.cb=t},k.prototype.leave=function(){this.onceLeave||(this.onceLeave=!0,this.observer&&this.observer.takeRecords&&this.observer.takeRecords(),this.finalValue=this.value,this.callCB(),this.destroy())},k.prototype.callCB=function(){void 0!==this.finalValue&&this.cb&&this.cb({layoutShift:this.finalValue})},k.prototype.destroy=function(){this.observer&&this.observer.disconnect(),this.observer=null},k.prototype.handle=function(t){var e=this;t.map(function(t){t.hadRecentInput||(e.value=(e.value||0)+(t.value||0))})},k);function k(){var e=this;if(this.observer=null,this.onceLeave=!1,window.PerformanceObserver){v&&v.entryMap&&v.entryMap[y]&&this.handle(v.entryMap[y]);try{this.observer=new PerformanceObserver(function(t){e.handle(t.getEntries())}),this.observer.observe({entryTypes:[y]})}catch(t){}}}var L={};function S(t){return L[t]}var w=window.__spyHead,T="largest-contentful-paint",C=(O.prototype.listenLCP=function(t){this.cb=t,this.callCB()},O.prototype.callCB=function(){this.finalValue&&this.cb&&this.cb({lcp:this.finalValue})},O.prototype.load=function(){this.observer&&this.observer.takeRecords&&this.observer.takeRecords(),this.finalValue=this.value,function(t,e){L[t]=e}("lcp",this.value),this.callCB(),this.destroy()},O.prototype.destroy=function(){this.observer&&this.observer.disconnect(),this.observer=null},O.prototype.handle=function(t){var e=this;t.map(function(t){e.value=t.renderTime||t.loadTime})},O);function O(){var e=this;if(this.observer=null,window.PerformanceObserver){w&&w.entryMap&&w.entryMap[T]&&this.handle(w.entryMap[T]);try{this.observer=new PerformanceObserver(function(t){e.handle(t.getEntries())}),this.observer.observe({entryTypes:[T]})}catch(t){}}}function B(t){return t.name.indexOf(".gif?")<0}var R=(I.prototype.check=function(){return window.PerformanceObserver&&performance&&performance.timing&&performance.timing.navigationStart},I.prototype.listenTTI=function(t,e){this.check()&&(this.observeLongtask(2e4),this.cb=t,(e=e||{}).interval&&(this.interval=e.interval),e.filterRequest&&(this.filterRequest=e.filterRequest))},I.prototype.load=function(){this.check()&&(this.ttiTimer=setInterval(this.ttiCheck,this.interval))},I.prototype.ttiCheck=function(){if(this.cb){var t=performance.now();if(!(t-this.lastLongTask<this.interval)){var e=this.getNetworkSilenceAt();if(!1!==e&&!(t-e<this.interval)){clearTimeout(this.ttiTimer);var i=this.lastLongTask;i=i||performance.timing.domContentLoadedEventEnd-performance.timing.navigationStart,this.stopObserveLongTask(),this.cb({tti:i})}}}},I.prototype.observerCallback=function(t){var e=t.getEntries(),i=e[e.length-1];this.lastLongTask=i.startTime+i.duration},I.prototype.stopObserveLongTask=function(){this.observer&&(this.observer.disconnect(),this.observer=null),this.stopLongTaskTimeoutId&&clearTimeout(this.stopLongTaskTimeoutId)},I.prototype.getNetworkSilenceAt=function(){for(var t=0,e=0,i=performance.getEntriesByType("resource").filter(this.filterRequest);e<i.length;e++){var o=i[e];if(!o.responseEnd)return!1;o.responseEnd>t&&(t=o.responseEnd)}return t},I.prototype.observeLongtask=function(t){this.stopObserveLongTask();try{this.observer=new PerformanceObserver(this.observerCallback),this.observer.observe({entryTypes:["longtask"]}),this.stopLongTaskTimeoutId=setTimeout(this.stopObserveLongTask,t)}catch(t){}},I);function I(){this.lastLongTask=0,this.observer=null,this.interval=5e3,this.filterRequest=B,this.observerCallback=this.observerCallback.bind(this),this.ttiCheck=this.ttiCheck.bind(this)}var z,E,P,j,x=(H.prototype.listenTiming=function(t){window.performance&&window.performance.timing&&(this.cb=t)},H.prototype.load=function(){var t=this;setTimeout(function(){t.cb&&t.cb(t.getMetric())},500)},H.prototype.getMetric=function(){var r={},t=window.performance.timing,e=t.navigationStart;if(r.dns=t.domainLookupEnd-t.domainLookupStart,r.tcp=t.connectEnd-t.connectStart,r.request=t.responseStart-t.requestStart,r.response=t.responseEnd-t.responseStart,r.parseHtml=t.domInteractive-t.domLoading,r.domReady=t.domContentLoadedEventEnd-e,r.loadEventHandle=t.loadEventEnd-t.loadEventStart,r.load=t.loadEventEnd-e,performance.getEntriesByType){var i=performance.getEntriesByType("paint");i&&i.length&&i.forEach(function(t){var e=t.name,i=t.duration,o=t.startTime,n=Math.ceil(i+o);"first-paint"===e&&(r.fp=n),"first-contentful-paint"===e&&(r.fcp=n)})}return t.domFirstPaint&&(r.t7FirstPaint=t.domFirstPaint-e),t.domFirstScreenPaint&&(r.t7FirstScreen=t.domFirstScreenPaint-e),r},H);function H(){}(E=z=z||{}).JS="js",E.CSS="css",E.IMG="img",E.FONT="font",(j=P=P||{})[j.ttf=0]="ttf",j[j.eot=1]="eot",j[j.woff=2]="woff",j[j.woff2=3]="woff2";var M=["/mwb2.gif"];function N(t,e){for(var i=0,o=e;i<o.length;i++){var n=o[i];if(-1<t.indexOf(n))return!0}return!1}function _(t){return+t.toFixed(1)}var q=(F.prototype.check=function(){return performance&&performance.getEntriesByType},F.prototype.listenResource=function(t,e){void 0===e&&(e={}),this.check()&&(this.resOption=o(this.resOption,e),this.trigger=this.resOption.trigger,this.cb=t)},F.prototype.listenBigImg=function(t,e){void 0===e&&(e={}),this.check()&&(this.bigImgOption=o(this.bigImgOption,e),this.trigger=this.bigImgOption.trigger,this.bigImgCB=t)},F.prototype.listenHttpResource=function(t,e){void 0===e&&(e={}),this.check()&&(this.httpResOption=o(this.httpResOption,e),this.trigger=this.httpResOption.trigger,this.httpResCB=t)},F.prototype.listenSlowResource=function(t,e){void 0===e&&(e={}),this.check()&&(this.slowOption=o(this.slowOption,e),this.trigger=this.slowOption.trigger,this.slowResCB=t)},F.prototype.report=function(){var l=this,t=this.getMetric();if(t){var e=t.metric,i=t.hostMetric;this.cb&&this.cb(e,i)}this.bigImgCB&&"function"==typeof window.requestIdleCallback&&Object.keys(this.bigImgList).length&&window.requestIdleCallback(function(){for(var t=0,e=Object.keys(l.bigImgList);t<e.length;t++)for(var i=e[t],o=0,n=l.bigImgList[i];o<n.length;o++){var r=n[o],s=r.timing,a=r.type;try{var c=document.body.querySelector('img[src="'+s.name+'"]');l.bigImgCB({msg:s.name,dur:s.duration,xpath:d(c).xpath,host:i,type:a})}catch(t){console.error(t)}}}),this.httpResCB&&"function"==typeof window.requestIdleCallback&&Object.keys(this.httpResList).length&&window.requestIdleCallback(function(){for(var t=0,e=Object.keys(l.httpResList);t<e.length;t++)for(var i=e[t],o=0,n=l.httpResList[i];o<n.length;o++){var r=n[o],s=r.timing,a=r.type;try{var c=document.body.querySelector('[src="'+s.name+'"]');l.httpResCB({msg:s.name,dur:s.duration,xpath:d(c).xpath,host:i,type:a})}catch(t){console.error(t)}}}),this.slowResCB&&"function"==typeof window.requestIdleCallback&&Object.keys(this.slowList).length&&window.requestIdleCallback(function(){for(var t=0,e=Object.keys(l.slowList);t<e.length;t++)for(var i=e[t],o=0,n=l.slowList[i];o<n.length;o++){var r=n[o],s=r.timing,a=r.type;try{var c=document.body.querySelector('[src="'+s.name+'"]'),h={wait:f((p=s).domainLookupStart-(p.navigationStart||p.fetchStart||p.startTime)),dns:f(p.domainLookupEnd-p.domainLookupStart),connect:f(p.connectEnd-p.connectStart),req:f(p.responseStart-p.requestStart),res:f(p.responseEnd-p.responseStart)};l.slowResCB(u(u({},h),{dur:s.duration,msg:s.name,xpath:d(c).xpath,host:i,type:a}))}catch(t){console.error(t)}}var p})},F.prototype.load=function(){var t=this;"load"===this.trigger&&this.check()&&setTimeout(function(){t.report()},500)},F.prototype.leave=function(){"leave"===this.trigger&&this.report()},F.prototype.push=function(t,e,i,o){N(o.pathname,this.resOption.ignorePaths||[])||(e.push(i),this.pushWithHost(t,this.hostList,i,o)),N(o.pathname,this.slowOption.ignorePaths||[])||i.duration>this.slowOption.threshold&&this.pushWithHost(t,this.slowList,i,o)},F.prototype.pushWithHost=function(t,e,i,o){var n=o.host;e[n]||(e[n]=[]),e[n].push({timing:i,type:t})},F.prototype.collectHttpResInHttps=function(t,e,i){"https:"!==location.protocol||0!==e.name.indexOf("http://")||N(i.pathname,this.httpResOption.ignorePaths||[])||this.pushWithHost(t,this.httpResList,e,i)},F.prototype.addScript=function(t,e){"js"===e.ext&&0!==t.decodedBodySize&&this.push("js",this.jsList,t,e)},F.prototype.addResFromCss=function(t,e){e.ext&&P.hasOwnProperty(e.ext)?this.push("font",this.fontList,t,e):this.addImg(t,e)},F.prototype.addLink=function(t,e){"css"===e.ext?this.push("css",this.cssList,t,e):"js"===e.ext&&this.push("js",this.jsList,t,e)},F.prototype.addImg=function(t,e){this.push("img",this.imgList,t,e),t.decodedBodySize>(this.bigImgOption.maxSize||0)&&!N(e.pathname,this.bigImgOption.ignorePaths||[])&&this.pushWithHost("img",this.bigImgList,t,e)},F.prototype.handleTimings=function(t){for(var e=t.length,i=0;i<e;i++){var o=t[i],n=r(o.name);if(!N(n.pathname,M))switch(t[i].initiatorType){case"script":this.addScript(o,n);break;case"css":this.addResFromCss(o,n);break;case"img":this.addImg(o,n);break;case"link":this.addLink(o,n);break;case"audio":this.collectHttpResInHttps("audio",o,n);break;case"video":this.collectHttpResInHttps("video",o,n)}}},F.prototype.getNumAndSize=function(t,e){var i={},o=t+"Num",n=t+"Size",r=t+"TransferSize",s=t+"CacheRate",a=t+"Duration";i[o]=0,i[n]=0;var c=i[r]=0;if(e.forEach(function(t){i[o]++,i[n]+=t.decodedBodySize/1024,i[r]+=t.transferSize/1024,c+=t.duration}),i[a]=_(0<i[o]?c/i[o]:0),i[n]){var h=i[n]-i[r];i[s]=_(0<=h?100*h/i[n]:0)}return i[n]=_(i[n]),i[r]=_(i[r]),i},F.prototype.getMetric=function(){var t=performance.getEntriesByType("navigation")[0],e=performance.getEntriesByType("resource");if(t&&e&&e.length){this.handleTimings(e);var i=u(u(u(u({},this.getNumAndSize(z.JS,this.jsList)),this.getNumAndSize(z.CSS,this.cssList)),this.getNumAndSize(z.IMG,this.imgList)),this.getNumAndSize(z.FONT,this.fontList)),o=t;i.docSize=_(o.decodedBodySize/1024),i.docTransferSize=_(o.transferSize/1024),i.headerSize=_((o.transferSize-o.encodedBodySize||0)/1024),i.allSize=_(i.docSize+i.jsSize+i.cssSize+i.imgSize+i.fontSize),i.allTransferSize=_(i.docTransferSize+i.jsTransferSize+i.cssTransferSize+i.imgTransferSize+i.fontTransferSize);for(var n={},r=0,s=Object.keys(this.hostList);r<s.length;r++){var a=s[r],c=this.hostList[a].map(function(t){return t.timing});n[a]=this.getNumAndSize("host",c)}return{metric:i,hostMetric:n}}},F);function F(){this.trigger="load",this.jsList=[],this.cssList=[],this.imgList=[],this.fontList=[],this.hostList={},this.bigImgList={},this.httpResList={},this.slowList={},this.resOption={ignorePaths:[],trigger:"load"},this.bigImgOption={ignorePaths:[],maxSize:153600,trigger:"load"},this.httpResOption={ignorePaths:[],trigger:"load"},this.slowOption={ignorePaths:[],trigger:"load",threshold:1e3}}var A=null;window.performance&&window.performance.memory&&(A=window.performance.memory);var D=(J.prototype.listenMemory=function(t){this.cb=t},J.prototype.leave=function(){if(!this.onceLeave&&A){this.onceLeave=!0;var t=window.performance.memory;if(t.usedJSHeapSize===A.usedJSHeapSize&&t.totalJSHeapSize===A.totalJSHeapSize)return;var e=window.performance.memory;this.cb&&this.cb({usedJSHeapSize:e.usedJSHeapSize/1024,totalJSHeapSize:e.totalJSHeapSize/1024,jsHeapSizeLimit:e.jsHeapSizeLimit/1024,usedJSHeapRate:100*e.usedJSHeapSize/e.totalJSHeapSize})}},J);function J(){this.onceLeave=!1}var V=(Z.prototype.getNavigatorInfo=function(){var t={},e=navigator.connection;return"object"==typeof e&&(t={downlink:e.downlink,effectiveType:e.effectiveType,rtt:e.rtt,saveData:!!e.saveData}),navigator.deviceMemory&&(t.deviceMemory=navigator.deviceMemory),navigator.hardwareConcurrency&&(t.hardwareConcurrency=navigator.deviceMemory),t},Z.prototype.load=function(){},Z);function Z(){}var W,U,G,$=window.__spyHead,K="longtask",Q=(X.prototype.check=function(){return window.PerformanceObserver&&performance&&performance.timing&&performance.timing.navigationStart},X.prototype.listenFSPLongTask=function(t){this.check()&&(this.fspCB=t)},X.prototype.listenLCPLongTask=function(t){this.check()&&(this.lcpCB=t)},X.prototype.listenLoadLongTask=function(t){this.check()&&(this.loadCB=t)},X.prototype.listenPageLongTask=function(t){this.check()&&(this.pageCB=t)},X.prototype.load=function(){var i=this;if(this.check()){var o=this.getStatData(Date.now());setTimeout(function(){if(i.loadCB&&i.loadCB({loadLongtaskTime:o.time,loadTBT:o.tbt,loadTotalTime:o.totalTime,loadLongtaskRate:o.rate,loadLongtaskNum:o.num}),performance.timing&&performance.timing.domFirstScreenPaint){var t=i.getStatData(performance.timing.domFirstScreenPaint);i.fspCB&&i.fspCB({fspLongtaskTime:t.time,fspTBT:t.tbt,fspTotalTime:t.totalTime,fspLongtaskRate:t.rate,fspLongtaskNum:t.num})}if(S("lcp")){var e=i.getStatData(performance.timing.navigationStart+S("lcp"));i.lcpCB&&i.lcpCB({lcpLongtaskTime:e.time,lcpTBT:e.tbt,lcpTotalTime:e.totalTime,lcpLongtaskRate:e.rate,lcpLongtaskNum:e.num})}},200)}},X.prototype.leave=function(){if(!this.onceLeave){this.onceLeave=!0;var t=this.getStatData(Date.now());this.pageCB&&this.pageCB({pageLongtaskTime:t.time,pageTBT:t.tbt,pageTotalTime:t.totalTime,pageLongtaskRate:t.rate,pageLongtaskNum:t.num,pageIframeLongtaskTime:t.iframeTime,pageIframeLongtaskRate:t.iframeRate,pageIframeLongtaskNum:t.iframeNum})}},X.prototype.destroy=function(){this.lts=[],this.observer&&this.observer.disconnect(),this.observer=null},X.prototype.getStatData=function(t){for(var e=performance.timing.navigationStart,i=0,o=0,n=0,r=0,s=0,a={},c=0;c<this.lts.length;c++){var h=this.lts[c],p=h.duration;if(e+h.startTime+p<t&&(i+=p,o+=0<p-50?p-50:0,n++,h.attribution&&h.attribution[0])){var l=h.attribution[0].containerSrc;l&&l!==location.href&&(a[l]||(a[l]=[]),a[l].push(p),r+=p,s++)}}var u=t-e;return{num:n,time:i,tbt:o,totalTime:u,rate:100*i/u,iframeTime:r,iframeNum:s,iframeRate:100*r/u,iframeLongtasks:a}},X);function X(){var e=this;this.lts=[],this.observer=null,this.onceLeave=!1,$&&$.entryMap&&$.entryMap[K]&&(this.lts=this.lts.concat($.entryMap[K]));try{this.observer=new PerformanceObserver(function(t){e.lts=e.lts.concat(t.getEntries())}),this.observer.observe({entryTypes:[K]})}catch(t){}}function Y(){this.constructor=W}function tt(t){var e=G.call(this,t)||this;return e.modules=[],e.register(new g),e.register(new C),e.register(new b),e.register(new R),e.register(new x),e.register(new q),e.register(new D),e.register(new V),e.register(new Q),e.visibilitychangeCB=e.visibilitychangeCB.bind(e),e.load=e.load.bind(e),e.leave=e.leave.bind(e),"complete"===document.readyState?e.load():window.addEventListener("load",e.load),document.addEventListener("visibilitychange",e.visibilitychangeCB),window.addEventListener("beforeunload",e.leave,!1),window.addEventListener("unload",e.leave,!1),e.handleHead(),e}return i(W=tt,U=G=e),void(W.prototype=null===U?Object.create(U):(Y.prototype=U.prototype,new Y)),tt.prototype.handleHead=function(){var e=this;if(this.option.localCache){var t=window.__spyHead;if(t&&t.winerrors){for(var i=0;i<t.winerrors.length;i++){var o=t.winerrors[i];this.option.localCache.addLog(o)}t.interceptor=function(t){e.option.localCache.addLog(t)}}}},tt.prototype.listenFID=function(t){this.invoke("listenFID",t)},tt.prototype.listenLayoutShift=function(t){this.invoke("listenLayoutShift",t)},tt.prototype.listenLCP=function(t){this.invoke("listenLCP",t)},tt.prototype.listenFSPLongTask=function(t){this.invoke("listenFSPLongTask",t)},tt.prototype.listenLCPLongTask=function(t){this.invoke("listenLCPLongTask",t)},tt.prototype.listenLoadLongTask=function(t){this.invoke("listenLoadLongTask",t)},tt.prototype.listenPageLongTask=function(t){this.invoke("listenPageLongTask",t)},tt.prototype.listenMemory=function(t){this.invoke("listenMemory",t)},tt.prototype.getNavigatorInfo=function(){return this.invoke("getNavigatorInfo")},tt.prototype.listenResource=function(t,e){this.invoke("listenResource",t,e)},tt.prototype.listenBigImg=function(t,e){this.invoke("listenBigImg",t,e)},tt.prototype.listenHttpResource=function(t,e){this.invoke("listenHttpResource",t,e)},tt.prototype.listenSlowResource=function(t,e){this.invoke("listenSlowResource",t,e)},tt.prototype.listenTiming=function(t){this.invoke("listenTiming",t)},tt.prototype.listenTTI=function(t,e){this.invoke("listenTTI",t,e)},tt.prototype.invoke=function(t,e,i){for(var o=0;o<this.modules.length;o++){var n=this.modules[o];if("function"==typeof n[t])return n[t].apply(n,[e,i])}console.error("no method",t)},tt.prototype.register=function(t){this.modules.push(t)},tt.prototype.load=function(){for(var t=0;t<this.modules.length;t++){var e=this.modules[t];e.load&&e.load()}},tt.prototype.leave=function(){for(var t=0;t<this.modules.length;t++){var e=this.modules[t];e.leave&&e.leave()}},tt.prototype.destroy=function(){for(var t=0;t<this.modules.length;t++){var e=this.modules[t];e.destroy&&e.destroy()}document.removeEventListener("visibilitychange",this.visibilitychangeCB),window.removeEventListener("load",this.load),window.removeEventListener("beforeunload",this.leave),window.removeEventListener("unload",this.destroy)},tt.prototype.visibilitychangeCB=function(){"hidden"===document.visibilityState&&this.leave()},tt});
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).SpyClient=e()}(this,function(){"use strict";var i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)};var u=function(){return(u=Object.assign||function(t){for(var e,i=1,o=arguments.length;i<o;i++)for(var n in e=arguments[i])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}).apply(this,arguments)};function o(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return(Object.assign||function(t){for(var e=void 0,i=1,o=arguments.length;i<o;i++)for(var n in e=arguments[i])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}).apply(this,t)}function r(t){var e=function(t){if(URL&&t)try{var e=new URL(t);if(void 0!==e.host)return{protocol:e.protocol,host:e.host,pathname:e.pathname,ext:""}}catch(t){console.error(t)}}(t);if(!e){var i=document.createElement("a");i.href=t,e={protocol:i.protocol,host:i.host||location.host,pathname:i.pathname,ext:""}}var o=e.pathname.split(".");return e.ext=o[o.length-1],e}function f(t){return+t.toFixed(1)}function d(t){if(!t)return{xpath:""};for(var e=[];t&&1===t.nodeType&&t!==t.parentNode;){var i=t.tagName.toLowerCase();if(t.getAttribute("id")?i+="[#"+t.getAttribute("id")+"]":t.classList&&t.classList.length&&(i+="[."+t.classList[t.classList.length-1]+"]"),e.push(i),t===document.body)break;t=t.parentNode}return{xpath:e.join("<")}}var t=navigator&&navigator.userAgent?navigator.userAgent.toLowerCase().match(/cpu iphone os (.*?)_/):"",n=t&&t[2]&&+t[2]<14;function l(t){console.error("[SpyClient_log]"+t)}function a(i){return Object.keys(i).map(function(t){var e=i[t];return void 0===e?e="":"string"!=typeof e&&(e=JSON.stringify(e)),encodeURIComponent(t)+"="+encodeURIComponent(e)}).join("&")}function c(t){return"[object Array]"===Object.prototype.toString.call(t)}var e=(s.prototype.handle=function(t){if(this.check(t)){if(t=o({pid:this.option.pid,lid:this.option.lid,ts:Date.now(),group:"common"},t),this.option.localCache&&this.option.localCache.addLog(t),"number"==typeof t.sample){if(Math.random()>t.sample)return}else if("number"==typeof this.option.sample&&Math.random()>this.option.sample)return;return delete t.sample,t}},s.prototype.send=function(t,e){void 0===e&&(e=!1);for(var i=[],o=0,n=c(t)?t:[t];o<n.length;o++){var r=n[o];if((r=this.handle(r))&&(i.push(r),!e)){var s=this.option.logServer+a(r);this.request(s)}}e&&this.sendPost(i)},s.prototype.check=function(t){if(!this.option.check)return!0;var e=["perf","except","dist","count"];if(-1===e.indexOf(t.type))return l("type only is one of "+e.join(", ")),!1;if(t.group&&30<t.group.length)return l("group length execeeds 30"),!1;var i=/^[a-zA-Z0-9-_]{0,30}$/;if("except"===t.type){if("string"!=typeof t.info.msg||!t.info.msg.length)return l("info.msg field must be not empty and is String"),!1}else for(var o=0,n=Object.keys(t.info);o<n.length;o++){var r=n[o];if(!i.test(r))return l("info."+r+" is unexpected. Length must be not more than 30. Supported chars: a-zA-Z0-9-_"),!1;var s=t.info[r];if("dist"===t.type){if(30<s.length)return l("info."+r+" value length execeeds 30 when type == 'dist'"),!1}else if("number"!=typeof s)return l("info."+r+" value must be number"),!1}if(t.dim)for(var a=0,c=Object.keys(t.dim);a<c.length;a++){var h=c[a];if(!i.test(h))return l("dim key ["+h+"] is unexpected. Length must be not more than 30. Supported chars: a-zA-Z0-9-_"),!1;var p=t.dim[h];if(!/^[a-zA-Z0-9\-_\*\.\s\/#\+@\&\u4e00-\u9fa5]{0,30}$/.test(p))return l("dim."+h+" value ["+p+"] is unexpected. Length must be not more than 30. Supported chars: a-zA-Z0-9-_*. /#+@& and Chinese"),!1}return!0},s.prototype.sendPerf=function(t){this.send(o({type:"perf"},t))},s.prototype.sendExcept=function(t){this.send(o({type:"except"},t))},s.prototype.sendDist=function(t){this.send(o({type:"dist"},t))},s.prototype.sendCount=function(t){this.send(o({type:"count"},t))},s.prototype.sendExceptForError=function(t,e){var i=o({},e);i.info=o({},e.info||{},{msg:t.message,stack:t.stack}),this.sendExcept(i)},s.prototype.startMark=function(t){this.markCache[t]={start:Date.now()}},s.prototype.endMark=function(t){return this.markCache[t]?(this.markCache[t].total=Date.now()-this.markCache[t].start,this.markCache[t].total):0},s.prototype.clearMark=function(t){this.markCache[t]&&delete this.markCache[t]},s.prototype.getAllMark=function(){for(var t={},e=0,i=Object.keys(this.markCache);e<i.length;e++){var o=i[e];t[o]=this.markCache[o].total}return t},s.prototype.clearAllMark=function(){this.markCache={}},s.prototype.sendPost=function(t){var e=(c(t)?t:[t])[0],i={pid:e.pid,type:e.type,group:e.group},o=this.option.logServer+a(i);this.request(o,t)},s.prototype.request=function(t,e){!n&&navigator&&navigator.sendBeacon&&navigator.sendBeacon(t,e?JSON.stringify(e):void 0)||(e?this.fetch(t,e):(new Image).src=t)},s.prototype.fetch=function(t,e){fetch?fetch(t,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}):l("Global fetch method doesn't exist")},s);function s(t){if(this.sample={},this.markCache={},!t.pid)throw new Error("pid is required");this.option={pid:t.pid,lid:t.lid,check:!1!==t.check,sample:t.sample,localCache:t.localCache,logServer:t.logServer||"https://sp1.baidu.com/5b1ZeDe5KgQFm2e88IuM_a/mwb2.gif?"}}var h=window.__spyHead,p="first-input",g=(m.prototype.listenFID=function(t){this.cb=t,this.callCB()},m.prototype.callCB=function(){void 0!==this.finalValue&&this.cb&&this.cb({fid:this.finalValue})},m.prototype.destroy=function(){this.observer&&this.observer.disconnect(),this.observer=null},m.prototype.handle=function(t){var e=t.pop();e&&(this.finalValue=e.duration,this.callCB(),this.destroy())},m);function m(){var e=this;if(this.observer=null,window.PerformanceObserver){h&&h.entryMap&&h.entryMap[p]&&this.handle(h.entryMap[p]);try{this.observer=new PerformanceObserver(function(t){e.handle(t.getEntries())}),this.observer.observe({entryTypes:[p]})}catch(t){}}}var v=window.__spyHead,y="layout-shift",b=(k.prototype.listenLayoutShift=function(t){this.cb=t},k.prototype.leave=function(){this.onceLeave||(this.onceLeave=!0,this.observer&&this.observer.takeRecords&&this.observer.takeRecords(),this.finalValue=this.value,this.callCB(),this.destroy())},k.prototype.callCB=function(){void 0!==this.finalValue&&this.cb&&this.cb({layoutShift:this.finalValue})},k.prototype.destroy=function(){this.observer&&this.observer.disconnect(),this.observer=null},k.prototype.handle=function(t){var e=this;t.map(function(t){t.hadRecentInput||(e.value=(e.value||0)+(t.value||0))})},k);function k(){var e=this;if(this.observer=null,this.onceLeave=!1,window.PerformanceObserver){v&&v.entryMap&&v.entryMap[y]&&this.handle(v.entryMap[y]);try{this.observer=new PerformanceObserver(function(t){e.handle(t.getEntries())}),this.observer.observe({entryTypes:[y]})}catch(t){}}}var L={};function S(t){return L[t]}var w=window.__spyHead,T="largest-contentful-paint",C=(O.prototype.listenLCP=function(t){this.cb=t,this.callCB()},O.prototype.callCB=function(){this.finalValue&&this.cb&&this.cb({lcp:this.finalValue})},O.prototype.load=function(){this.observer&&this.observer.takeRecords&&this.observer.takeRecords(),this.finalValue=this.value,function(t,e){L[t]=e}("lcp",this.value),this.callCB(),this.destroy()},O.prototype.destroy=function(){this.observer&&this.observer.disconnect(),this.observer=null},O.prototype.handle=function(t){var e=this;t.map(function(t){e.value=t.renderTime||t.loadTime})},O);function O(){var e=this;if(this.observer=null,window.PerformanceObserver){w&&w.entryMap&&w.entryMap[T]&&this.handle(w.entryMap[T]);try{this.observer=new PerformanceObserver(function(t){e.handle(t.getEntries())}),this.observer.observe({entryTypes:[T]})}catch(t){}}}function B(t){return t.name.indexOf(".gif?")<0}var R=(I.prototype.check=function(){return window.PerformanceObserver&&performance&&performance.timing&&performance.timing.navigationStart},I.prototype.listenTTI=function(t,e){this.check()&&(this.observeLongtask(2e4),this.cb=t,(e=e||{}).interval&&(this.interval=e.interval),e.filterRequest&&(this.filterRequest=e.filterRequest))},I.prototype.load=function(){this.check()&&(this.ttiTimer=setInterval(this.ttiCheck,this.interval))},I.prototype.ttiCheck=function(){if(this.cb){var t=performance.now();if(!(t-this.lastLongTask<this.interval)){var e=this.getNetworkSilenceAt();if(!1!==e&&!(t-e<this.interval)){clearTimeout(this.ttiTimer);var i=this.lastLongTask;i=i||performance.timing.domContentLoadedEventEnd-performance.timing.navigationStart,this.stopObserveLongTask(),this.cb({tti:i})}}}},I.prototype.observerCallback=function(t){var e=t.getEntries(),i=e[e.length-1];this.lastLongTask=i.startTime+i.duration},I.prototype.stopObserveLongTask=function(){this.observer&&(this.observer.disconnect(),this.observer=null),this.stopLongTaskTimeoutId&&clearTimeout(this.stopLongTaskTimeoutId)},I.prototype.getNetworkSilenceAt=function(){for(var t=0,e=0,i=performance.getEntriesByType("resource").filter(this.filterRequest);e<i.length;e++){var o=i[e];if(!o.responseEnd)return!1;o.responseEnd>t&&(t=o.responseEnd)}return t},I.prototype.observeLongtask=function(t){this.stopObserveLongTask();try{this.observer=new PerformanceObserver(this.observerCallback),this.observer.observe({entryTypes:["longtask"]}),this.stopLongTaskTimeoutId=setTimeout(this.stopObserveLongTask,t)}catch(t){}},I);function I(){this.lastLongTask=0,this.observer=null,this.interval=5e3,this.filterRequest=B,this.observerCallback=this.observerCallback.bind(this),this.ttiCheck=this.ttiCheck.bind(this)}var z,E,P,j,x=(H.prototype.listenTiming=function(t){window.performance&&window.performance.timing&&(this.cb=t)},H.prototype.load=function(){var t=this;setTimeout(function(){t.cb&&t.cb(t.getMetric())},500)},H.prototype.getMetric=function(){var r={},t=window.performance.timing,e=t.navigationStart;if(r.dns=t.domainLookupEnd-t.domainLookupStart,r.tcp=t.connectEnd-t.connectStart,r.request=t.responseStart-t.requestStart,r.response=t.responseEnd-t.responseStart,r.parseHtml=t.domInteractive-t.domLoading,r.domReady=t.domContentLoadedEventEnd-e,r.loadEventHandle=t.loadEventEnd-t.loadEventStart,r.load=t.loadEventEnd-e,performance.getEntriesByType){var i=performance.getEntriesByType("paint");i&&i.length&&i.forEach(function(t){var e=t.name,i=t.duration,o=t.startTime,n=Math.ceil(i+o);"first-paint"===e&&(r.fp=n),"first-contentful-paint"===e&&(r.fcp=n)})}return t.domFirstPaint&&(r.t7FirstPaint=t.domFirstPaint-e),t.domFirstScreenPaint&&(r.t7FirstScreen=t.domFirstScreenPaint-e),r},H);function H(){}(E=z=z||{}).JS="js",E.CSS="css",E.IMG="img",E.FONT="font",(j=P=P||{})[j.ttf=0]="ttf",j[j.eot=1]="eot",j[j.woff=2]="woff",j[j.woff2=3]="woff2";var M=["/mwb2.gif"];function N(t,e){for(var i=0,o=e;i<o.length;i++){var n=o[i];if(-1<t.indexOf(n))return!0}return!1}function _(t){return+t.toFixed(1)}var q=(F.prototype.check=function(){return performance&&performance.getEntriesByType},F.prototype.listenResource=function(t,e){void 0===e&&(e={}),this.check()&&(this.resOption=o(this.resOption,e),this.trigger=this.resOption.trigger,this.cb=t)},F.prototype.listenBigImg=function(t,e){void 0===e&&(e={}),this.check()&&(this.bigImgOption=o(this.bigImgOption,e),this.trigger=this.bigImgOption.trigger,this.bigImgCB=t)},F.prototype.listenHttpResource=function(t,e){void 0===e&&(e={}),this.check()&&(this.httpResOption=o(this.httpResOption,e),this.trigger=this.httpResOption.trigger,this.httpResCB=t)},F.prototype.listenSlowResource=function(t,e){void 0===e&&(e={}),this.check()&&(this.slowOption=o(this.slowOption,e),this.trigger=this.slowOption.trigger,this.slowResCB=t)},F.prototype.report=function(){var l=this,t=this.getMetric();if(t){var e=t.metric,i=t.hostMetric;this.cb&&this.cb(e,i)}this.bigImgCB&&"function"==typeof window.requestIdleCallback&&Object.keys(this.bigImgList).length&&window.requestIdleCallback(function(){for(var t=0,e=Object.keys(l.bigImgList);t<e.length;t++)for(var i=e[t],o=0,n=l.bigImgList[i];o<n.length;o++){var r=n[o],s=r.timing,a=r.type;try{var c=document.body.querySelector('img[src="'+s.name+'"]');l.bigImgCB({msg:s.name,dur:s.duration,xpath:d(c).xpath,host:i,type:a})}catch(t){console.error(t)}}}),this.httpResCB&&"function"==typeof window.requestIdleCallback&&Object.keys(this.httpResList).length&&window.requestIdleCallback(function(){for(var t=0,e=Object.keys(l.httpResList);t<e.length;t++)for(var i=e[t],o=0,n=l.httpResList[i];o<n.length;o++){var r=n[o],s=r.timing,a=r.type;try{var c=document.body.querySelector('[src="'+s.name+'"]');l.httpResCB({msg:s.name,dur:s.duration,xpath:d(c).xpath,host:i,type:a})}catch(t){console.error(t)}}}),this.slowResCB&&"function"==typeof window.requestIdleCallback&&Object.keys(this.slowList).length&&window.requestIdleCallback(function(){for(var t=0,e=Object.keys(l.slowList);t<e.length;t++)for(var i=e[t],o=0,n=l.slowList[i];o<n.length;o++){var r=n[o],s=r.timing,a=r.type;try{var c=document.body.querySelector('[src="'+s.name+'"]'),h={wait:f((p=s).domainLookupStart-(p.navigationStart||p.fetchStart||p.startTime)),dns:f(p.domainLookupEnd-p.domainLookupStart),connect:f(p.connectEnd-p.connectStart),req:f(p.responseStart-p.requestStart),res:f(p.responseEnd-p.responseStart)};l.slowResCB(u(u({},h),{dur:s.duration,msg:s.name,xpath:d(c).xpath,host:i,type:a}))}catch(t){console.error(t)}}var p})},F.prototype.load=function(){var t=this;"load"===this.trigger&&this.check()&&setTimeout(function(){t.report()},500)},F.prototype.leave=function(){"leave"===this.trigger&&this.report()},F.prototype.push=function(t,e,i,o){N(o.pathname,this.resOption.ignorePaths||[])||(e.push(i),this.pushWithHost(t,this.hostList,i,o)),N(o.pathname,this.slowOption.ignorePaths||[])||i.duration>this.slowOption.threshold&&this.pushWithHost(t,this.slowList,i,o)},F.prototype.pushWithHost=function(t,e,i,o){var n=o.host;e[n]||(e[n]=[]),e[n].push({timing:i,type:t})},F.prototype.collectHttpResInHttps=function(t,e,i){"https:"!==location.protocol||0!==e.name.indexOf("http://")||N(i.pathname,this.httpResOption.ignorePaths||[])||this.pushWithHost(t,this.httpResList,e,i)},F.prototype.addScript=function(t,e){"js"===e.ext&&0!==t.decodedBodySize&&this.push("js",this.jsList,t,e)},F.prototype.addResFromCss=function(t,e){e.ext&&P.hasOwnProperty(e.ext)?this.push("font",this.fontList,t,e):this.addImg(t,e)},F.prototype.addLink=function(t,e){"css"===e.ext?this.push("css",this.cssList,t,e):"js"===e.ext&&this.push("js",this.jsList,t,e)},F.prototype.addImg=function(t,e){this.push("img",this.imgList,t,e),t.decodedBodySize>(this.bigImgOption.maxSize||0)&&!N(e.pathname,this.bigImgOption.ignorePaths||[])&&this.pushWithHost("img",this.bigImgList,t,e)},F.prototype.handleTimings=function(t){for(var e=t.length,i=0;i<e;i++){var o=t[i],n=r(o.name);if(!N(n.pathname,M))switch(t[i].initiatorType){case"script":this.addScript(o,n);break;case"css":this.addResFromCss(o,n);break;case"img":this.addImg(o,n);break;case"link":this.addLink(o,n);break;case"audio":this.collectHttpResInHttps("audio",o,n);break;case"video":this.collectHttpResInHttps("video",o,n)}}},F.prototype.getNumAndSize=function(t,e){var i={},o=t+"Num",n=t+"Size",r=t+"TransferSize",s=t+"CacheRate",a=t+"Duration";i[o]=0,i[n]=0;var c=i[r]=0;if(e.forEach(function(t){i[o]++,i[n]+=t.decodedBodySize/1024,i[r]+=t.transferSize/1024,c+=t.duration}),i[a]=_(0<i[o]?c/i[o]:0),i[n]){var h=i[n]-i[r];i[s]=_(0<=h?100*h/i[n]:0)}return i[n]=_(i[n]),i[r]=_(i[r]),i},F.prototype.getMetric=function(){var t=performance.getEntriesByType("navigation")[0],e=performance.getEntriesByType("resource");if(t&&e&&e.length){this.handleTimings(e);var i=u(u(u(u({},this.getNumAndSize(z.JS,this.jsList)),this.getNumAndSize(z.CSS,this.cssList)),this.getNumAndSize(z.IMG,this.imgList)),this.getNumAndSize(z.FONT,this.fontList)),o=t;i.docSize=_(o.decodedBodySize/1024),i.docTransferSize=_(o.transferSize/1024),i.headerSize=_((o.transferSize-o.encodedBodySize||0)/1024),i.allSize=_(i.docSize+i.jsSize+i.cssSize+i.imgSize+i.fontSize),i.allTransferSize=_(i.docTransferSize+i.jsTransferSize+i.cssTransferSize+i.imgTransferSize+i.fontTransferSize);for(var n={},r=0,s=Object.keys(this.hostList);r<s.length;r++){var a=s[r],c=this.hostList[a].map(function(t){return t.timing});n[a]=this.getNumAndSize("host",c)}return{metric:i,hostMetric:n}}},F);function F(){this.trigger="load",this.jsList=[],this.cssList=[],this.imgList=[],this.fontList=[],this.hostList={},this.bigImgList={},this.httpResList={},this.slowList={},this.resOption={ignorePaths:[],trigger:"load"},this.bigImgOption={ignorePaths:[],maxSize:153600,trigger:"load"},this.httpResOption={ignorePaths:[],trigger:"load"},this.slowOption={ignorePaths:[],trigger:"load",threshold:1e3}}var A=null;window.performance&&window.performance.memory&&(A=window.performance.memory);var D=(J.prototype.listenMemory=function(t){this.cb=t},J.prototype.leave=function(){if(!this.onceLeave&&A){this.onceLeave=!0;var t=window.performance.memory;if(t.usedJSHeapSize===A.usedJSHeapSize&&t.totalJSHeapSize===A.totalJSHeapSize)return;var e=window.performance.memory;this.cb&&this.cb({usedJSHeapSize:e.usedJSHeapSize/1024,totalJSHeapSize:e.totalJSHeapSize/1024,jsHeapSizeLimit:e.jsHeapSizeLimit/1024,usedJSHeapRate:100*e.usedJSHeapSize/e.totalJSHeapSize})}},J);function J(){this.onceLeave=!1}var V=(Z.prototype.getNavigatorInfo=function(){var t={},e=navigator.connection;return"object"==typeof e&&(t={downlink:e.downlink,effectiveType:e.effectiveType,rtt:e.rtt,saveData:!!e.saveData}),navigator.deviceMemory&&(t.deviceMemory=navigator.deviceMemory),navigator.hardwareConcurrency&&(t.hardwareConcurrency=navigator.deviceMemory),t},Z.prototype.load=function(){},Z);function Z(){}var W,U,G,$=window.__spyHead,K="longtask",Q=(X.prototype.check=function(){return window.PerformanceObserver&&performance&&performance.timing&&performance.timing.navigationStart},X.prototype.listenFSPLongTask=function(t){this.check()&&(this.fspCB=t)},X.prototype.listenLCPLongTask=function(t){this.check()&&(this.lcpCB=t)},X.prototype.listenLoadLongTask=function(t){this.check()&&(this.loadCB=t)},X.prototype.listenPageLongTask=function(t){this.check()&&(this.pageCB=t)},X.prototype.load=function(){var i=this;if(this.check()){var o=this.getStatData(Date.now());setTimeout(function(){if(i.loadCB&&i.loadCB({loadLongtaskTime:o.time,loadTBT:o.tbt,loadTotalTime:o.totalTime,loadLongtaskRate:o.rate,loadLongtaskNum:o.num}),performance.timing&&performance.timing.domFirstScreenPaint){var t=i.getStatData(performance.timing.domFirstScreenPaint);i.fspCB&&i.fspCB({fspLongtaskTime:t.time,fspTBT:t.tbt,fspTotalTime:t.totalTime,fspLongtaskRate:t.rate,fspLongtaskNum:t.num})}if(S("lcp")){var e=i.getStatData(performance.timing.navigationStart+S("lcp"));i.lcpCB&&i.lcpCB({lcpLongtaskTime:e.time,lcpTBT:e.tbt,lcpTotalTime:e.totalTime,lcpLongtaskRate:e.rate,lcpLongtaskNum:e.num})}},200)}},X.prototype.leave=function(){if(!this.onceLeave){this.onceLeave=!0;var t=this.getStatData(Date.now());this.pageCB&&this.pageCB({pageLongtaskTime:t.time,pageTBT:t.tbt,pageTotalTime:t.totalTime,pageLongtaskRate:t.rate,pageLongtaskNum:t.num,pageIframeLongtaskTime:t.iframeTime,pageIframeLongtaskRate:t.iframeRate,pageIframeLongtaskNum:t.iframeNum})}},X.prototype.destroy=function(){this.lts=[],this.observer&&this.observer.disconnect(),this.observer=null},X.prototype.getStatData=function(t){for(var e=performance.timing.navigationStart,i=0,o=0,n=0,r=0,s=0,a={},c=0;c<this.lts.length;c++){var h=this.lts[c],p=h.duration;if(e+h.startTime+p<t&&(i+=p,o+=0<p-50?p-50:0,n++,h.attribution&&h.attribution[0])){var l=h.attribution[0].containerSrc;l&&l!==location.href&&(a[l]||(a[l]=[]),a[l].push(p),r+=p,s++)}}var u=t-e;return{num:n,time:i,tbt:o,totalTime:u,rate:100*i/u,iframeTime:r,iframeNum:s,iframeRate:100*r/u,iframeLongtasks:a}},X);function X(){var e=this;this.lts=[],this.observer=null,this.onceLeave=!1,$&&$.entryMap&&$.entryMap[K]&&(this.lts=this.lts.concat($.entryMap[K]));try{this.observer=new PerformanceObserver(function(t){e.lts=e.lts.concat(t.getEntries())}),this.observer.observe({entryTypes:[K]})}catch(t){}}function Y(){this.constructor=W}function tt(t){var e=G.call(this,t)||this;return e.modules=[],e.register(new g),e.register(new C),e.register(new b),e.register(new R),e.register(new x),e.register(new q),e.register(new D),e.register(new V),e.register(new Q),e.visibilitychangeCB=e.visibilitychangeCB.bind(e),e.load=e.load.bind(e),e.leave=e.leave.bind(e),"complete"===document.readyState?e.load():window.addEventListener("load",e.load),document.addEventListener("visibilitychange",e.visibilitychangeCB),window.addEventListener("beforeunload",e.leave,!1),window.addEventListener("unload",e.leave,!1),e.handleHead(),e}return i(W=tt,U=G=e),void(W.prototype=null===U?Object.create(U):(Y.prototype=U.prototype,new Y)),tt.prototype.handleHead=function(){var e=this;if(this.option.localCache){var t=window.__spyHead;if(t&&t.winerrors){for(var i=0;i<t.winerrors.length;i++){var o=t.winerrors[i];this.option.localCache.addLog(o)}t.interceptor=function(t){e.option.localCache.addLog(t)}}}},tt.prototype.listenFID=function(t){this.invoke("listenFID",t)},tt.prototype.listenLayoutShift=function(t){this.invoke("listenLayoutShift",t)},tt.prototype.listenLCP=function(t){this.invoke("listenLCP",t)},tt.prototype.listenFSPLongTask=function(t){this.invoke("listenFSPLongTask",t)},tt.prototype.listenLCPLongTask=function(t){this.invoke("listenLCPLongTask",t)},tt.prototype.listenLoadLongTask=function(t){this.invoke("listenLoadLongTask",t)},tt.prototype.listenPageLongTask=function(t){this.invoke("listenPageLongTask",t)},tt.prototype.listenMemory=function(t){this.invoke("listenMemory",t)},tt.prototype.getNavigatorInfo=function(){return this.invoke("getNavigatorInfo")},tt.prototype.listenResource=function(t,e){this.invoke("listenResource",t,e)},tt.prototype.listenBigImg=function(t,e){this.invoke("listenBigImg",t,e)},tt.prototype.listenHttpResource=function(t,e){this.invoke("listenHttpResource",t,e)},tt.prototype.listenSlowResource=function(t,e){this.invoke("listenSlowResource",t,e)},tt.prototype.listenTiming=function(t){this.invoke("listenTiming",t)},tt.prototype.listenTTI=function(t,e){this.invoke("listenTTI",t,e)},tt.prototype.invoke=function(t,e,i){for(var o=0;o<this.modules.length;o++){var n=this.modules[o];if("function"==typeof n[t])return n[t].apply(n,[e,i])}console.error("no method",t)},tt.prototype.register=function(t){this.modules.push(t)},tt.prototype.load=function(){for(var t=0;t<this.modules.length;t++){var e=this.modules[t];e.load&&e.load()}},tt.prototype.leave=function(){for(var t=0;t<this.modules.length;t++){var e=this.modules[t];e.leave&&e.leave()}},tt.prototype.destroy=function(){for(var t=0;t<this.modules.length;t++){var e=this.modules[t];e.destroy&&e.destroy()}document.removeEventListener("visibilitychange",this.visibilitychangeCB),window.removeEventListener("load",this.load),window.removeEventListener("beforeunload",this.leave),window.removeEventListener("unload",this.destroy)},tt.prototype.visibilitychangeCB=function(){"hidden"===document.visibilityState&&this.leave()},tt});
@@ -62,15 +62,20 @@ function assign() {
62
62
  return __assign.apply(this, args);
63
63
  }
64
64
  function getUrlInfoFromURL(url) {
65
- if (URL) {
66
- var obj = new URL(url);
67
- if (obj.host !== undefined) {
68
- return {
69
- protocol: obj.protocol,
70
- host: obj.host,
71
- pathname: obj.pathname,
72
- ext: '',
73
- };
65
+ if (URL && url) {
66
+ try {
67
+ var obj = new URL(url);
68
+ if (obj.host !== undefined) {
69
+ return {
70
+ protocol: obj.protocol,
71
+ host: obj.host,
72
+ pathname: obj.pathname,
73
+ ext: '',
74
+ };
75
+ }
76
+ }
77
+ catch (e) {
78
+ console.error(e);
74
79
  }
75
80
  }
76
81
  return;
package/dist/spy-head.js CHANGED
@@ -9,15 +9,20 @@
9
9
  * @author kaivean
10
10
  */
11
11
  function getUrlInfoFromURL(url) {
12
- if (URL) {
13
- var obj = new URL(url);
14
- if (obj.host !== undefined) {
15
- return {
16
- protocol: obj.protocol,
17
- host: obj.host,
18
- pathname: obj.pathname,
19
- ext: '',
20
- };
12
+ if (URL && url) {
13
+ try {
14
+ var obj = new URL(url);
15
+ if (obj.host !== undefined) {
16
+ return {
17
+ protocol: obj.protocol,
18
+ host: obj.host,
19
+ pathname: obj.pathname,
20
+ ext: '',
21
+ };
22
+ }
23
+ }
24
+ catch (e) {
25
+ console.error(e);
21
26
  }
22
27
  }
23
28
  return;
@@ -186,7 +191,7 @@
186
191
  else {
187
192
  obj.group = resourceError.group;
188
193
  obj.dim.type = srcElement.tagName.toLowerCase();
189
- var url = srcElement.src || srcElement.href;
194
+ var url = srcElement.src || srcElement.href || '';
190
195
  info.msg = url || 'unknown load eror';
191
196
  obj.dim.host = getUrlInfo(url).host;
192
197
  if (el && el.tagName === 'IMG') {
@@ -1 +1 @@
1
- !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(e="undefined"!=typeof globalThis?globalThis:e||self).__spyHead=r()}(this,function(){"use strict";function E(e){var r=function(e){if(URL){var r=new URL(e);if(void 0!==r.host)return{protocol:r.protocol,host:r.host,pathname:r.pathname,ext:""}}}(e);if(!r){var n=document.createElement("a");n.href=e,r={protocol:n.protocol,host:n.host||location.host,pathname:n.pathname,ext:""}}var t=r.pathname.split(".");return r.ext=t[t.length-1],r}function c(e){return+e.toFixed(1)}var T={conf:{},winerrors:[],errorDestroy:function(){},observerDestroy:function(){},entryMap:{},init:function(e){this.conf=e},addError:function(e){if(0<this.winerrors.length){var r=this.winerrors[this.winerrors.length-1];if(e.info.msg===r.info.msg)return void(r.info.count+=r.info.count||0)}this.winerrors.length<1e3&&this.winerrors.push(e)},send:function(e,r,n){var t=this.conf;if(e.type=e.type||"except",e.pid=t.pid,e.lid=t.lid,e.ts=Date.now(),this.addError(e),this.interceptor&&this.interceptor(e),!1!==r){var o=(n=n||t.logServer)+"?pid="+e.pid+"&lid="+e.lid+"&ts="+e.ts+"&type="+e.type+"&group="+e.group+"&info="+encodeURIComponent(JSON.stringify(e.info));e.dim&&(o+="&dim="+encodeURIComponent(JSON.stringify(e.dim)));var i=new Image;i.src=o,i.onload=i.onerror=function(){i=null}}}};function r(e){var h=e.resourceError||{},m=e.jsError||{},g=Math.random()<(m.sample?m.sample:0),v=Math.random()<(h.sample?h.sample:0),w=T.winerrors,y=0;function r(e){try{var r=e.target,n={info:{},dim:{},group:""},t=n.info,o=e.srcElement,i=navigator.connection||{};if(t.downlink=i.downlink,t.effectiveType=i.effectiveType,t.rtt=i.rtt,t.deviceMemory=navigator.deviceMemory||0,t.hardwareConcurrency=navigator.hardwareConcurrency||0,o===window){n.group=m.group;var a=e.error||{};if(t.msg=e.message,t.file=e.filename,t.ln=e.lineno,t.col=e.colno,t.stack=(a.stack||"").split("\n").slice(0,3).join("\n"),-1!==t.msg.indexOf("MODULE_TIMEOUT")){var s=t.msg.match(/^.*Hang:(.*); Miss:(.*)/);s&&s[2]&&(t.msg="MODULE_TIMEOUT for miss:"+s[2])}for(var c=[],f=0;f<w.length;f++){var d=w[f],u=1<d.info.count?"("+d.info.count+")":"";c.push(u+d.info.msg)}t.hisErrors=c.join("----");var p=!0;m.handler&&(p=m.handler(n)),!1!==p&&T.send(n,g)}else{n.group=h.group,n.dim.type=o.tagName.toLowerCase();var l=o.src||o.href;t.msg=l||"unknown load eror",n.dim.host=E(l).host,r&&"IMG"===r.tagName&&(t.xpath=function(e){if(!e)return{xpath:""};for(var r=[];e&&1===e.nodeType&&e!==e.parentNode;){var n=e.tagName.toLowerCase();if(e.getAttribute("id")?n+="[#"+e.getAttribute("id")+"]":e.classList&&e.classList.length&&(n+="[."+e.classList[e.classList.length-1]+"]"),r.push(n),e===document.body)break;e=e.parentNode}return{xpath:r.join("<")}}(r).xpath),y&&(t.hisErrCount=y);p=!0;h.handler&&(p=h.handler(n)),!1!==p&&T.send(n,v),y++}}catch(e){console.error(e)}}window.addEventListener("error",r,!0),T.errorDestroy=function(){window.removeEventListener("error",r,!0),T.winerrors=[]}}function n(e){var n=e.whiteScreenError||{},t=n.handler,o=n.selector,i=n.subSelector,r=n.timeout||6e3,a=Math.random()<(n.sample?n.sample:0);function s(){if(!window.performance)return!1;var e=function(e){return{wait:c(e.domainLookupStart-(e.navigationStart||e.fetchStart||e.startTime)),dns:c(e.domainLookupEnd-e.domainLookupStart),connect:c(e.connectEnd-e.connectStart),req:c(e.responseStart-e.requestStart),res:c(e.responseEnd-e.responseStart)}}(window.performance.timing);return"&wait="+e.wait+"&dns="+e.dns+"&connect="+e.connect+"&requestTime="+e.req+"&resoneTime="+e.res}o&&setTimeout(function(){if(function(){var e=document.querySelector(o);return!e||(!e.querySelector(i)||e.clientHeight<2*window.innerHeight/3)}()){var e={group:n.group,info:{msg:"",netTime:s(),hisErrors:function(){if(!T.winerrors)return!1;for(var e=T.winerrors,r=[],n=0;n<e.length;n++){var t=(e[n].info.stack||"").split("\n")[0];r.push("("+n+")"+(t||e[n].info.msg))}return r.join(";;")}(),deviceInfo:function(){var e={},r=navigator.connection||{};return e.downlink=r.downlink,e.effectiveType=r.effectiveType,e.rtt=r.rtt,e.deviceMemory=navigator.deviceMemory||0,e.hardwareConcurrency=navigator.hardwareConcurrency||0,e}()}};e.info.msg="WhiteScren Error";var r=!0;t&&(r=t(e)),!1!==r&&e.info.msg&&T&&T.send(e,a)}},r)}return T.init=function(e){e.logServer||(e.logServer="https://sp1.baidu.com/5b1ZeDe5KgQFm2e88IuM_a/mwb2.gif"),r(this.conf=e),function(){if(window.PerformanceObserver){var e=new window.PerformanceObserver(function(e){for(var r=T.entryMap,n=e.getEntries(),t=0;t<n.length;t++){var o=n[t];r[o.entryType]||(r[o.entryType]=[]),r[o.entryType].push(o)}});T.observerDestroy=function(){e.disconnect()};try{e.observe({entryTypes:["longtask","layout-shift","first-input","largest-contentful-paint"]})}catch(e){}}}(),n(e)},window.__spyclientConf&&T.init(window.__spyclientConf),T});
1
+ !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(e="undefined"!=typeof globalThis?globalThis:e||self).__spyHead=r()}(this,function(){"use strict";function E(e){var r=function(e){if(URL&&e)try{var r=new URL(e);if(void 0!==r.host)return{protocol:r.protocol,host:r.host,pathname:r.pathname,ext:""}}catch(e){console.error(e)}}(e);if(!r){var n=document.createElement("a");n.href=e,r={protocol:n.protocol,host:n.host||location.host,pathname:n.pathname,ext:""}}var t=r.pathname.split(".");return r.ext=t[t.length-1],r}function c(e){return+e.toFixed(1)}var T={conf:{},winerrors:[],errorDestroy:function(){},observerDestroy:function(){},entryMap:{},init:function(e){this.conf=e},addError:function(e){if(0<this.winerrors.length){var r=this.winerrors[this.winerrors.length-1];if(e.info.msg===r.info.msg)return void(r.info.count+=r.info.count||0)}this.winerrors.length<1e3&&this.winerrors.push(e)},send:function(e,r,n){var t=this.conf;if(e.type=e.type||"except",e.pid=t.pid,e.lid=t.lid,e.ts=Date.now(),this.addError(e),this.interceptor&&this.interceptor(e),!1!==r){var o=(n=n||t.logServer)+"?pid="+e.pid+"&lid="+e.lid+"&ts="+e.ts+"&type="+e.type+"&group="+e.group+"&info="+encodeURIComponent(JSON.stringify(e.info));e.dim&&(o+="&dim="+encodeURIComponent(JSON.stringify(e.dim)));var i=new Image;i.src=o,i.onload=i.onerror=function(){i=null}}}};function r(e){var h=e.resourceError||{},m=e.jsError||{},g=Math.random()<(m.sample?m.sample:0),v=Math.random()<(h.sample?h.sample:0),w=T.winerrors,y=0;function r(e){try{var r=e.target,n={info:{},dim:{},group:""},t=n.info,o=e.srcElement,i=navigator.connection||{};if(t.downlink=i.downlink,t.effectiveType=i.effectiveType,t.rtt=i.rtt,t.deviceMemory=navigator.deviceMemory||0,t.hardwareConcurrency=navigator.hardwareConcurrency||0,o===window){n.group=m.group;var a=e.error||{};if(t.msg=e.message,t.file=e.filename,t.ln=e.lineno,t.col=e.colno,t.stack=(a.stack||"").split("\n").slice(0,3).join("\n"),-1!==t.msg.indexOf("MODULE_TIMEOUT")){var s=t.msg.match(/^.*Hang:(.*); Miss:(.*)/);s&&s[2]&&(t.msg="MODULE_TIMEOUT for miss:"+s[2])}for(var c=[],f=0;f<w.length;f++){var d=w[f],u=1<d.info.count?"("+d.info.count+")":"";c.push(u+d.info.msg)}t.hisErrors=c.join("----");var p=!0;m.handler&&(p=m.handler(n)),!1!==p&&T.send(n,g)}else{n.group=h.group,n.dim.type=o.tagName.toLowerCase();var l=o.src||o.href||"";t.msg=l||"unknown load eror",n.dim.host=E(l).host,r&&"IMG"===r.tagName&&(t.xpath=function(e){if(!e)return{xpath:""};for(var r=[];e&&1===e.nodeType&&e!==e.parentNode;){var n=e.tagName.toLowerCase();if(e.getAttribute("id")?n+="[#"+e.getAttribute("id")+"]":e.classList&&e.classList.length&&(n+="[."+e.classList[e.classList.length-1]+"]"),r.push(n),e===document.body)break;e=e.parentNode}return{xpath:r.join("<")}}(r).xpath),y&&(t.hisErrCount=y);p=!0;h.handler&&(p=h.handler(n)),!1!==p&&T.send(n,v),y++}}catch(e){console.error(e)}}window.addEventListener("error",r,!0),T.errorDestroy=function(){window.removeEventListener("error",r,!0),T.winerrors=[]}}function n(e){var n=e.whiteScreenError||{},t=n.handler,o=n.selector,i=n.subSelector,r=n.timeout||6e3,a=Math.random()<(n.sample?n.sample:0);function s(){if(!window.performance)return!1;var e=function(e){return{wait:c(e.domainLookupStart-(e.navigationStart||e.fetchStart||e.startTime)),dns:c(e.domainLookupEnd-e.domainLookupStart),connect:c(e.connectEnd-e.connectStart),req:c(e.responseStart-e.requestStart),res:c(e.responseEnd-e.responseStart)}}(window.performance.timing);return"&wait="+e.wait+"&dns="+e.dns+"&connect="+e.connect+"&requestTime="+e.req+"&resoneTime="+e.res}o&&setTimeout(function(){if(function(){var e=document.querySelector(o);return!e||(!e.querySelector(i)||e.clientHeight<2*window.innerHeight/3)}()){var e={group:n.group,info:{msg:"",netTime:s(),hisErrors:function(){if(!T.winerrors)return!1;for(var e=T.winerrors,r=[],n=0;n<e.length;n++){var t=(e[n].info.stack||"").split("\n")[0];r.push("("+n+")"+(t||e[n].info.msg))}return r.join(";;")}(),deviceInfo:function(){var e={},r=navigator.connection||{};return e.downlink=r.downlink,e.effectiveType=r.effectiveType,e.rtt=r.rtt,e.deviceMemory=navigator.deviceMemory||0,e.hardwareConcurrency=navigator.hardwareConcurrency||0,e}()}};e.info.msg="WhiteScren Error";var r=!0;t&&(r=t(e)),!1!==r&&e.info.msg&&T&&T.send(e,a)}},r)}return T.init=function(e){e.logServer||(e.logServer="https://sp1.baidu.com/5b1ZeDe5KgQFm2e88IuM_a/mwb2.gif"),r(this.conf=e),function(){if(window.PerformanceObserver){var e=new window.PerformanceObserver(function(e){for(var r=T.entryMap,n=e.getEntries(),t=0;t<n.length;t++){var o=n[t];r[o.entryType]||(r[o.entryType]=[]),r[o.entryType].push(o)}});T.observerDestroy=function(){e.disconnect()};try{e.observe({entryTypes:["longtask","layout-shift","first-input","largest-contentful-paint"]})}catch(e){}}}(),n(e)},window.__spyclientConf&&T.init(window.__spyclientConf),T});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spy-client",
3
- "version": "2.1.8",
3
+ "version": "2.1.9",
4
4
  "description": "spy client",
5
5
  "main": "dist/spy-client.js",
6
6
  "module": "dist/spy-client.esm.js",