1'use strict'; 2 3const common = require('../common.js'); 4 5const { 6 PerformanceObserver, 7 performance, 8} = require('perf_hooks'); 9 10function createTimingInfo({ 11 startTime = 0, 12 redirectStartTime = 0, 13 redirectEndTime = 0, 14 postRedirectStartTime = 0, 15 finalServiceWorkerStartTime = 0, 16 finalNetworkRequestStartTime = 0, 17 finalNetworkResponseStartTime = 0, 18 endTime = 0, 19 encodedBodySize = 0, 20 decodedBodySize = 0, 21 finalConnectionTimingInfo = null, 22}) { 23 if (finalConnectionTimingInfo !== null) { 24 finalConnectionTimingInfo.domainLookupStartTime = 25 finalConnectionTimingInfo.domainLookupStartTime || 0; 26 finalConnectionTimingInfo.domainLookupEndTime = 27 finalConnectionTimingInfo.domainLookupEndTime || 0; 28 finalConnectionTimingInfo.connectionStartTime = 29 finalConnectionTimingInfo.connectionStartTime || 0; 30 finalConnectionTimingInfo.connectionEndTime = 31 finalConnectionTimingInfo.connectionEndTime || 0; 32 finalConnectionTimingInfo.secureConnectionStartTime = 33 finalConnectionTimingInfo.secureConnectionStartTime || 0; 34 finalConnectionTimingInfo.ALPNNegotiatedProtocol = 35 finalConnectionTimingInfo.ALPNNegotiatedProtocol || []; 36 } 37 return { 38 startTime, 39 redirectStartTime, 40 redirectEndTime, 41 postRedirectStartTime, 42 finalServiceWorkerStartTime, 43 finalNetworkRequestStartTime, 44 finalNetworkResponseStartTime, 45 endTime, 46 encodedBodySize, 47 decodedBodySize, 48 finalConnectionTimingInfo, 49 }; 50} 51 52const bench = common.createBenchmark(main, { 53 n: [1e5], 54 observe: ['resource'], 55}); 56 57function test() { 58 const timingInfo = createTimingInfo({ finalConnectionTimingInfo: {} }); 59 performance.markResourceTiming( 60 timingInfo, 61 'http://localhost:8080', 62 'fetch', 63 {}, 64 '', 65 ); 66} 67 68function main({ n, observe }) { 69 const obs = new PerformanceObserver(() => { 70 bench.end(n); 71 }); 72 obs.observe({ entryTypes: [observe], buffered: true }); 73 74 bench.start(); 75 for (let i = 0; i < 1e5; i++) 76 test(); 77} 78