UNPKG

browsertime

Version:

Get performance metrics from your web page using Browsertime.

54 lines (51 loc) 1.98 kB
(function() { // https://gist.github.com/karlgroves/7544592 function getDomPath(el) { const stack = []; while ( el.parentNode != null ) { let sibCount = 0; let sibIndex = 0; for ( let i = 0; i < el.parentNode.childNodes.length; i++ ) { let sib = el.parentNode.childNodes[i]; if ( sib.nodeName == el.nodeName ) { if ( sib === el ) { sibIndex = sibCount; } sibCount++; } } if ( el.hasAttribute && el.hasAttribute('id') && el.id != '' ) { stack.unshift(el.nodeName.toLowerCase() + '#' + el.id); } else if ( sibCount > 1 ) { stack.unshift(el.nodeName.toLowerCase() + ':eq(' + sibIndex + ')'); } else { stack.unshift(el.nodeName.toLowerCase()); } el = el.parentNode; } return stack.slice(1); } const supported = PerformanceObserver.supportedEntryTypes; if (!supported || supported.indexOf('largest-contentful-paint') === -1) { return; } const observer = new PerformanceObserver(list => {}); observer.observe({ type: 'largest-contentful-paint', buffered: true }); const entries = observer.takeRecords(); if (entries.length > 0) { const largestEntry = entries[entries.length - 1]; return { duration: largestEntry.duration, id: largestEntry.id, url: largestEntry.url, loadTime: Number(largestEntry.loadTime.toFixed(0)), renderTime: Number(Math.max(largestEntry.renderTime,largestEntry.loadTime).toFixed(0)), size: largestEntry.size, startTime: Number(largestEntry.startTime.toFixed(0)), tagName: largestEntry.element ? largestEntry.element.tagName : '', className :largestEntry.element ? largestEntry.element.className : '', domPath: largestEntry.element ? (getDomPath(largestEntry.element)).join( ' > ') : '', tag: largestEntry.element ? (largestEntry.element.cloneNode(false)).outerHTML : '' }; } else return; })();