UNPKG

uxm

Version:

User experience metrics

2 lines (1 loc) 3.37 kB
!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(n.uxm={})}(this,function(n){var e="undefined"!=typeof window?window.performance:null;function t(){var n="undefined"!=typeof navigator?navigator.connection||navigator.mozConnection||navigator.webkitConnection:null;return n?n.effectiveType:null}function r(){if(!e||void 0===window.PerformancePaintTiming)return null;var n=e.getEntriesByType("paint").find(function(n){return"first-paint"===n.name});return n?Math.round(n.startTime):null}function i(){if(!e||void 0===window.PerformancePaintTiming)return null;var n=e.getEntriesByType("paint").find(function(n){return"first-contentful-paint"===n.name});return n?Math.round(n.startTime):null}function o(){if(!e)return null;var n=e.getEntriesByType("navigation");return n&&n[0]?Math.round(n[0].responseStart):null}function a(){if(!e)return null;var n=e.getEntriesByType("navigation");return n&&n[0]?Math.round(n[0].domContentLoadedEventEnd):null}function u(){if(!e)return null;var n=e.getEntriesByType("navigation");return n&&n[0]?Math.round(n[0].loadEventEnd):null}function d(n){void 0===n&&(n=s()),n=n.toLowerCase();var e=function(e){return-1!==n.indexOf(e)},t=e("windows"),r=t&&e("phone"),i=t&&e("touch")&&!r,o=!t&&e("iphone"),a=e("ipod"),u=e("ipad"),d=!t&&e("android"),f=d&&e("mobile"),l=d&&!e("mobile");return f||o||a||r?"phone":u||l||i?"tablet":"desktop"}function f(){return window.location.href}function s(){return window.navigator.userAgent}function l(){var n="undefined"!=typeof navigator?navigator.deviceMemory:void 0;return void 0===n?null:n>1?"full":"lite"}function c(){if(!e||"undefined"==typeof PerformanceMark)return null;var n=e.getEntriesByType("mark").map(function(n){return{type:"mark",name:n.name,startTime:Math.round(n.startTime)}}),t=e.getEntriesByType("measure").map(function(n){return{type:"measure",name:n.name,startTime:Math.round(n.startTime),duration:Math.round(n.duration)}});return n.concat(t)}function m(){return e&&"undefined"!=typeof PerformanceResourceTiming?e.getEntriesByType("navigation").concat(e.getEntriesByType("resource")).map(function(n){return{url:n.name,type:n.initiatorType,size:n.transferSize,startTime:Math.round(n.startTime),duration:Math.round(n.duration)}}):null}function g(){return void 0===window.__lt?null:window.__lt.e.map(function(n){return{startTime:Math.round(n.startTime),duration:Math.round(n.duration)}})}n.uxm=function n(e){void 0===e&&(e={});var p={deviceType:d(),effectiveConnectionType:t(),timeToFirstByte:o(),firstPaint:r(),firstContentfulPaint:i(),domContentLoaded:a(),onLoad:u()};return p.onLoad?((e.url||e.all)&&(p.url=f()),(e.userAgent||e.all)&&(p.userAgent=s()),(e.deviceMemory||e.all)&&(p.deviceMemory=l()),(e.userTiming||e.all)&&(p.userTiming=c()),(e.longTasks||e.all)&&(p.longTasks=g()),(e.resources||e.all)&&(p.resources=m()),Promise.resolve(p)):new Promise(function(n){return setTimeout(n,250)}).then(function(){return n(e)})},n.mark=function(n){e&&e.mark&&e.mark(n)},n.measure=function(n,t){if(e&&e.measure)try{e.measure(n,t)}catch(n){console.error(n)}},n.getEffectiveConnectionType=t,n.getFirstPaint=r,n.getFirstContentfulPaint=i,n.getTimeToFirstByte=o,n.getDomContentLoaded=a,n.getOnLoad=u,n.getDeviceType=d,n.getUrl=f,n.getUserAgent=s,n.getDeviceMemory=l,n.getUserTiming=c,n.getResources=m,n.getLongTasks=g});