UNPKG

qoe-pps

Version:

this is a qoe project of pps

82 lines (71 loc) 3.01 kB
import usertiming from 'usertiming' import {byName, byRegExp} from './entries' import {global} from './global' const FIRST_PAGE_MARK = 'firstPage' export function getUniversal (entries, firstPaint) { const _timing = usertiming.timing || {} const _navigation = usertiming.timing || {} const timing = byName(FIRST_PAGE_MARK)[0] const navigator = global.navigator || {} const connection = navigator.connection || navigator.mozConnection const browserVersion = navigator.appVersion.replace(/.*AppleWebKit\/([\w.]+).*\..*/, '$1') return { docLoad: _timing.responseEnd - _timing.navigationStart, // 内容加载时间 analysisStart: _timing.domLoading - _timing.navigationStart, // 开始解析dom树的时间 domComplete: _timing.domComplete - _timing.navigationStart, // 解析dom树的时间(包括资源就绪) responseStart: _timing.responseStart - _timing.navigationStart, // 读取页面第一个字节的时间 analysisEnd: _timing.domInteractive - _timing.navigationStart, // 完成解析dom树的时间(只解析dom树,并没有开始加载网页内的资源) syncJsAndCssOn1stPage: calculate(entries).duration, firstPaint: firstPaint, firstPage: timing ? timing.startTime : null, networkInfomation: connection ? connection.effectiveType : '', // 用户网络情况 browserVersion, lookupDomain: _timing.domainLookupEnd - _timing.domainLookupStart, // DNS查询时间 appcache: _timing.domainLookupStart - _timing.fetchStart, // DNS缓存时间,fetchStart:浏览器准备好使用 HTTP 请求抓取文档的时间 connect: _timing.connectEnd - _timing.connectStart, // TCP 建立连接完成握手的时间 accessType: _navigation.type // 访问页面的方式 0:正常进入页面,1: reload()刷新进入,2:浏览器的前进后退 3:非以上方式 } } export function getJS () { const HM_REGEXP = /\/\/hm\.baidu\.com\/hm\.js\?5df871ab99f94347b23ca224fc7d013f/ const IRT_REGEXP = /\/\/iqiyi\.irs01\.com\/irt/ const ADS_REGEXP = /\/\/static\.iqiyi\.com\/js\/common\/ares-/ const common = { hm: HM_REGEXP, irt: IRT_REGEXP, ads: ADS_REGEXP } for (let o in common) { common[o] = calculate(byRegExp(common[o])).duration } return common } export function getAjax (ajaxes) { let arr = [] let calc ajaxes.forEach(function (ajax) { arr = arr.concat(byRegExp(ajax)) }) calc = calculate(arr) return { ajaxConsuming: calc.duration, ajaxReady: calc.LastResponse } } export function calculate (timings) { const ret = { duration: -1, LastResponse: -1 } let arr = [] if (Object.prototype.toString.call(timings) === '[object Array]') { timings.forEach(function (timing) { timing.startTime > 0 && arr.push(timing.startTime) timing.responseEnd > 0 && arr.push(timing.responseEnd) }) const max = Math.max.apply(Math, arr) ret.duration = max - Math.min.apply(Math, arr) ret.LastResponse = max } return ret }