sitespeed.io 28.0.0-beta.1 → 28.0.0-beta.2
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.
- package/lib/plugins/html/templates/url/cpu/index.pug +166 -163
- package/lib/plugins/html/templates/url/metrics/index.pug +28 -26
- package/lib/plugins/html/templates/url/metrics/visualProgress.pug +1 -1
- package/lib/plugins/html/templates/url/summary/index.pug +1 -1
- package/lib/plugins/html/templates/url/summary/summaryBox.pug +12 -11
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
|
@@ -1,186 +1,189 @@
|
|
|
1
1
|
- const browsertime = medianRun ? (pageInfo.data.browsertime ? pageInfo.data.browsertime.pageSummary.browserScripts[medianRun.runIndex - 1]: undefined) : pageInfo.data.browsertime.run
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
||
|
|
5
|
-
if browsertime && browsertime.cpu && browsertime.cpu.longTasks
|
|
6
|
-
a(href='#long-tasks') CPU Long Tasks
|
|
7
|
-
| |
|
|
8
|
-
if browsertime && browsertime.timings && browsertime.timings.firstInput !== undefined
|
|
9
|
-
a(href='#first-input-delay') First Input Delay
|
|
10
|
-
| |
|
|
11
|
-
if browsertime && browsertime.cpu && browsertime.cpu.categories
|
|
12
|
-
a(href='#cpu-time-spent') CPU Time Spent
|
|
13
|
-
| |
|
|
14
|
-
if browsertime && browsertime.cpu && browsertime.cpu.urls && browsertime.cpu.urls.length > 0
|
|
15
|
-
a(href='#cpu-time-spent-per-request') CPU Time Spent Per Request
|
|
16
|
-
| |
|
|
17
|
-
if pageInfo.data.thirdparty
|
|
18
|
-
a(href='#cpu-time-per-tool') CPU Time Per Tool/Domain
|
|
19
|
-
| |
|
|
3
|
+
- const cpu = medianRun ? (pageInfo.data.browsertime ? pageInfo.data.browsertime.pageSummary.cpu[medianRun.runIndex - 1]: undefined) : pageInfo.data.browsertime.run.cpu
|
|
20
4
|
|
|
21
|
-
|
|
22
|
-
|
|
5
|
+
if cpu
|
|
6
|
+
small
|
|
7
|
+
||
|
|
8
|
+
if cpu.longTasks
|
|
9
|
+
a(href='#long-tasks') CPU Long Tasks
|
|
10
|
+
| |
|
|
11
|
+
if browsertime && browsertime.timings && browsertime.timings.firstInput !== undefined
|
|
12
|
+
a(href='#first-input-delay') First Input Delay
|
|
13
|
+
| |
|
|
14
|
+
if cpu.categories
|
|
15
|
+
a(href='#cpu-time-spent') CPU Time Spent
|
|
16
|
+
| |
|
|
17
|
+
if cpu.urls && cpu.urls.length > 0
|
|
18
|
+
a(href='#cpu-time-spent-per-request') CPU Time Spent Per Request
|
|
19
|
+
| |
|
|
20
|
+
if pageInfo.data.thirdparty
|
|
21
|
+
a(href='#cpu-time-per-tool') CPU Time Per Tool/Domain
|
|
22
|
+
| |
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
.downloads
|
|
27
|
-
if options.browsertime.chrome && options.browsertime.chrome.timeline
|
|
28
|
-
- const tracePath = 'data/trace-' + (runNumber? runNumber : 1) + '.json.gz'
|
|
29
|
-
a.button.button-download(href=tracePath, download=downloadName + '-timeline.json.gz') Download trace log
|
|
24
|
+
a#cpu
|
|
25
|
+
h2 CPU
|
|
30
26
|
|
|
31
|
-
if
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
27
|
+
if cpu.events && !options.browsertime.enableProfileRun
|
|
28
|
+
p Download the Chrome trace log and drag and drop it into Developer Tools / Performance in Chrome.
|
|
29
|
+
.downloads
|
|
30
|
+
if options.browsertime.chrome && options.browsertime.chrome.timeline
|
|
31
|
+
- const tracePath = 'data/trace-' + (runNumber? runNumber : 1) + '.json.gz'
|
|
32
|
+
a.button.button-download(href=tracePath, download=downloadName + '-timeline.json.gz') Download trace log
|
|
37
33
|
|
|
38
|
-
if options.browsertime && options.browsertime.enableProfileRun
|
|
39
|
-
if options.browser === 'firefox'
|
|
34
|
+
if options.browsertime && options.browsertime.firefox && options.browsertime.firefox.geckoProfiler && options.browser === 'firefox' && !options.browsertime.enableProfileRun
|
|
40
35
|
p Download the Firefox Geckoprofiler trace and drag and drop it into
|
|
41
|
-
|
|
36
|
+
a(href='https://profiler.firefox.com') https://profiler.firefox.com
|
|
42
37
|
.downloads
|
|
43
|
-
- const tracePath = 'data/geckoProfile-1
|
|
44
|
-
a.button.button-download(href=tracePath, download=downloadName + '-geckoProfile.json.gz') Download
|
|
45
|
-
else if options.browser === 'chrome'
|
|
46
|
-
p Download the Chrome trace log and drag and drop it into Developer Tools / Performance in Chrome.
|
|
47
|
-
- const tracePath = 'data/trace-1-extra-run.json.gz'
|
|
48
|
-
a.button.button-download(href=tracePath, download=downloadName + '-timeline.json.gz') Download extra run trace log
|
|
38
|
+
- const tracePath = 'data/geckoProfile-' + (runNumber? runNumber : 1) + '.json.gz'
|
|
39
|
+
a.button.button-download(href=tracePath, download=downloadName + '-geckoProfile.json.gz') Download trace
|
|
49
40
|
|
|
50
|
-
if browsertime &&
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
td Total Blocking Time
|
|
62
|
-
td
|
|
63
|
-
td #{browsertime.cpu.longTasks.totalBlockingTime}
|
|
64
|
-
tr
|
|
65
|
-
td Max Potential First Input Delay
|
|
66
|
-
td
|
|
67
|
-
td #{browsertime.cpu.longTasks.maxPotentialFid}
|
|
41
|
+
if options.browsertime && options.browsertime.enableProfileRun
|
|
42
|
+
if options.browser === 'firefox'
|
|
43
|
+
p Download the Firefox Geckoprofiler trace and drag and drop it into
|
|
44
|
+
a(href='https://profiler.firefox.com') https://profiler.firefox.com
|
|
45
|
+
.downloads
|
|
46
|
+
- const tracePath = 'data/geckoProfile-1-extra.json.gz'
|
|
47
|
+
a.button.button-download(href=tracePath, download=downloadName + '-geckoProfile.json.gz') Download extra run trace log
|
|
48
|
+
else if options.browser === 'chrome'
|
|
49
|
+
p Download the Chrome trace log and drag and drop it into Developer Tools / Performance in Chrome.
|
|
50
|
+
- const tracePath = 'data/trace-1-extra-run.json.gz'
|
|
51
|
+
a.button.button-download(href=tracePath, download=downloadName + '-timeline.json.gz') Download extra run trace log
|
|
68
52
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
td #{browsertime.cpu.longTasks.beforeFirstContentfulPaint.tasks}
|
|
76
|
-
td #{browsertime.cpu.longTasks.beforeFirstContentfulPaint.totalDuration.toFixed(0)}
|
|
77
|
-
tr
|
|
78
|
-
td Long Tasks before Largest Contentful Paint
|
|
79
|
-
td #{browsertime.cpu.longTasks.beforeLargestContentfulPaint.tasks}
|
|
80
|
-
td #{browsertime.cpu.longTasks.beforeLargestContentfulPaint.totalDuration.toFixed(0)}
|
|
81
|
-
tr
|
|
82
|
-
td Long Tasks after Load Event End
|
|
83
|
-
td #{browsertime.cpu.longTasks.afterLoadEventEnd.tasks}
|
|
84
|
-
td #{browsertime.cpu.longTasks.afterLoadEventEnd.totalDuration.toFixed(0)}
|
|
85
|
-
tr
|
|
86
|
-
td Total Long Tasks
|
|
87
|
-
td #{browsertime.cpu.longTasks.tasks}
|
|
88
|
-
td #{browsertime.cpu.longTasks.totalDuration.toFixed(0)}
|
|
89
|
-
p CPU last long task happened at #{h.time.ms(browsertime.cpu.longTasks.lastLongTask)}
|
|
90
|
-
h4 Individual Long Tasks
|
|
91
|
-
table
|
|
92
|
-
tr
|
|
93
|
-
th name
|
|
94
|
-
th startTime
|
|
95
|
-
th duration
|
|
96
|
-
th containerId
|
|
97
|
-
th containerName
|
|
98
|
-
th containerSrc
|
|
99
|
-
th containerType
|
|
100
|
-
|
|
101
|
-
each task in browsertime.pageinfo.longTask
|
|
53
|
+
if cpu.longTasks
|
|
54
|
+
a#long-tasks
|
|
55
|
+
h3 Long Tasks
|
|
56
|
+
p Collected using the Long Task API. A long task is a task that take 50 milliseconds or more.
|
|
57
|
+
if cpu.longTasks.tasks > 0
|
|
58
|
+
table
|
|
102
59
|
tr
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
td
|
|
108
|
-
td
|
|
109
|
-
td #{
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
a#first-input-delay
|
|
115
|
-
h3 First Input Delay
|
|
116
|
-
table
|
|
117
|
-
tr
|
|
118
|
-
th Name
|
|
119
|
-
th Delay
|
|
120
|
-
th Duration
|
|
121
|
-
th Start Time
|
|
122
|
-
th Processing Start
|
|
123
|
-
th Processing End
|
|
124
|
-
tr
|
|
125
|
-
td #{browsertime.timings.firstInput.name}
|
|
126
|
-
td #{h.time.ms(browsertime.timings.firstInput.delay)}
|
|
127
|
-
td #{h.time.ms(browsertime.timings.firstInput.duration)}
|
|
128
|
-
td #{h.time.ms(browsertime.timings.firstInput.startTime)}
|
|
129
|
-
td #{h.time.ms(browsertime.timings.firstInput.processingStart)}
|
|
130
|
-
td #{h.time.ms(browsertime.timings.firstInput.processingEnd)}
|
|
131
|
-
|
|
132
|
-
if browsertime && browsertime.cpu && browsertime.cpu.categories
|
|
133
|
-
a#cpu-time-spent
|
|
134
|
-
h3 CPU time spent
|
|
135
|
-
p Calculated using Tracium.
|
|
60
|
+
th Type
|
|
61
|
+
th Quantity
|
|
62
|
+
th Total duration (ms)
|
|
63
|
+
tr
|
|
64
|
+
td Total Blocking Time
|
|
65
|
+
td
|
|
66
|
+
td #{cpu.longTasks.totalBlockingTime}
|
|
67
|
+
tr
|
|
68
|
+
td Max Potential First Input Delay
|
|
69
|
+
td
|
|
70
|
+
td #{cpu.longTasks.maxPotentialFid}
|
|
136
71
|
|
|
137
|
-
.row
|
|
138
|
-
.one-half.column
|
|
139
|
-
if browsertime && browsertime.cpu && browsertime.cpu.categories
|
|
140
|
-
table
|
|
141
72
|
tr
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
73
|
+
td Long Tasks before First Paint
|
|
74
|
+
td #{cpu.longTasks.beforeFirstPaint.tasks}
|
|
75
|
+
td #{cpu.longTasks.beforeFirstPaint.totalDuration.toFixed(0)}
|
|
76
|
+
tr
|
|
77
|
+
td Long Tasks before First Contentful Paint
|
|
78
|
+
td #{cpu.longTasks.beforeFirstContentfulPaint.tasks}
|
|
79
|
+
td #{cpu.longTasks.beforeFirstContentfulPaint.totalDuration.toFixed(0)}
|
|
80
|
+
tr
|
|
81
|
+
td Long Tasks before Largest Contentful Paint
|
|
82
|
+
td #{cpu.longTasks.beforeLargestContentfulPaint.tasks}
|
|
83
|
+
td #{cpu.longTasks.beforeLargestContentfulPaint.totalDuration.toFixed(0)}
|
|
84
|
+
tr
|
|
85
|
+
td Long Tasks after Load Event End
|
|
86
|
+
td #{cpu.longTasks.afterLoadEventEnd.tasks}
|
|
87
|
+
td #{cpu.longTasks.afterLoadEventEnd.totalDuration.toFixed(0)}
|
|
88
|
+
tr
|
|
89
|
+
td Total Long Tasks
|
|
90
|
+
td #{cpu.longTasks.tasks}
|
|
91
|
+
td #{cpu.longTasks.totalDuration.toFixed(0)}
|
|
92
|
+
p CPU last long task happened at #{h.time.ms(cpu.longTasks.lastLongTask)}
|
|
93
|
+
h4 Individual Long Tasks
|
|
149
94
|
table
|
|
150
95
|
tr
|
|
151
|
-
th
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
96
|
+
th name
|
|
97
|
+
th startTime
|
|
98
|
+
th duration
|
|
99
|
+
th containerId
|
|
100
|
+
th containerName
|
|
101
|
+
th containerSrc
|
|
102
|
+
th containerType
|
|
103
|
+
|
|
104
|
+
each task in browsertime.pageinfo.longTask
|
|
156
105
|
tr
|
|
157
|
-
td #{
|
|
158
|
-
td #{
|
|
106
|
+
td #{task.name}
|
|
107
|
+
td #{task.startTime.toFixed(0)}
|
|
108
|
+
td #{task.duration.toFixed(0)}
|
|
109
|
+
td #{task.attribution[0].containerId}
|
|
110
|
+
td #{task.attribution[0].containerName}
|
|
111
|
+
td.url.assetsurl #{task.attribution[0].containerSrc}
|
|
112
|
+
td #{task.attribution[0].containerType}
|
|
113
|
+
else
|
|
114
|
+
p No long tasks on the page!
|
|
159
115
|
|
|
160
|
-
if browsertime && browsertime.
|
|
161
|
-
a#
|
|
162
|
-
h3
|
|
116
|
+
if browsertime && browsertime.timings && browsertime.timings.firstInput !== undefined
|
|
117
|
+
a#first-input-delay
|
|
118
|
+
h3 First Input Delay
|
|
163
119
|
table
|
|
164
120
|
tr
|
|
165
|
-
th
|
|
166
|
-
th
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
121
|
+
th Name
|
|
122
|
+
th Delay
|
|
123
|
+
th Duration
|
|
124
|
+
th Start Time
|
|
125
|
+
th Processing Start
|
|
126
|
+
th Processing End
|
|
127
|
+
tr
|
|
128
|
+
td #{browsertime.timings.firstInput.name}
|
|
129
|
+
td #{h.time.ms(browsertime.timings.firstInput.delay)}
|
|
130
|
+
td #{h.time.ms(browsertime.timings.firstInput.duration)}
|
|
131
|
+
td #{h.time.ms(browsertime.timings.firstInput.startTime)}
|
|
132
|
+
td #{h.time.ms(browsertime.timings.firstInput.processingStart)}
|
|
133
|
+
td #{h.time.ms(browsertime.timings.firstInput.processingEnd)}
|
|
134
|
+
|
|
135
|
+
if cpu.categories
|
|
136
|
+
a#cpu-time-spent
|
|
137
|
+
h3 CPU time spent
|
|
138
|
+
p Calculated using Tracium.
|
|
172
139
|
|
|
173
|
-
|
|
174
|
-
|
|
140
|
+
.row
|
|
141
|
+
.one-half.column
|
|
142
|
+
if cpu.categories
|
|
143
|
+
table
|
|
144
|
+
tr
|
|
145
|
+
th(colspan='2') Categories (ms)
|
|
146
|
+
each value, name in cpu.categories
|
|
147
|
+
tr
|
|
148
|
+
td #{name}
|
|
149
|
+
td #{value.toFixed(0)}
|
|
150
|
+
.one-half.column
|
|
151
|
+
if cpu.events
|
|
152
|
+
table
|
|
153
|
+
tr
|
|
154
|
+
th(colspan='2') Events (ms)
|
|
155
|
+
- const cpuEvents = []
|
|
156
|
+
- for (let key of Object.keys(cpu.events)) {cpuEvents.push({name: key, value: cpu.events[key] })}
|
|
157
|
+
- cpuEvents.sort((a,b)=>{return b.value - a.value})
|
|
158
|
+
each event in cpuEvents
|
|
159
|
+
tr
|
|
160
|
+
td #{event.name}
|
|
161
|
+
td #{event.value.toFixed(0)}
|
|
175
162
|
|
|
176
|
-
if
|
|
177
|
-
a#cpu-time-per-
|
|
178
|
-
h3
|
|
163
|
+
if cpu.urls && cpu.urls.length > 0
|
|
164
|
+
a#cpu-time-spent-per-request
|
|
165
|
+
h3 Time spent per request
|
|
179
166
|
table
|
|
180
167
|
tr
|
|
181
|
-
th
|
|
182
|
-
th
|
|
183
|
-
each
|
|
184
|
-
tr
|
|
185
|
-
td
|
|
186
|
-
|
|
168
|
+
th URL
|
|
169
|
+
th CPU time (ms)
|
|
170
|
+
each data in cpu.urls
|
|
171
|
+
tr
|
|
172
|
+
td.url.assetsurl
|
|
173
|
+
a(href=data.url)= data.url
|
|
174
|
+
td #{data.value.toFixed(0)}
|
|
175
|
+
|
|
176
|
+
if pageInfo.data.thirdparty
|
|
177
|
+
- const thirdparty = medianRun ? pageInfo.data.thirdparty.pageSummary.runs[medianRun.runIndex - 1] : pageInfo.data.thirdparty.run
|
|
178
|
+
|
|
179
|
+
if thirdparty && thirdparty.cpuPerTool && Object.keys(thirdparty.cpuPerTool).length > 0
|
|
180
|
+
a#cpu-time-per-tool
|
|
181
|
+
h3 CPU time spent
|
|
182
|
+
table
|
|
183
|
+
tr
|
|
184
|
+
th Tool/domain
|
|
185
|
+
th Time (ms)
|
|
186
|
+
each tool in Object.keys(thirdparty.cpuPerTool)
|
|
187
|
+
tr
|
|
188
|
+
td #{tool}
|
|
189
|
+
td.number #{thirdparty.cpuPerTool[tool].toFixed(1)}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
- const browsertime = medianRun ? pageInfo.data.browsertime.pageSummary.browserScripts[medianRun.runIndex - 1] : pageInfo.data.browsertime.run
|
|
2
2
|
|
|
3
3
|
if browsertime
|
|
4
|
-
- const timings = browsertime.timings
|
|
5
|
-
- const visualMetrics = browsertime.visualMetrics
|
|
4
|
+
- const timings = medianRun ? pageInfo.data.browsertime.pageSummary.browserScripts[medianRun.runIndex - 1].timings : pageInfo.data.browsertime.run.timings
|
|
5
|
+
- const visualMetrics = medianRun ? pageInfo.data.browsertime.pageSummary.visualMetrics[medianRun.runIndex - 1] : pageInfo.data.browsertime.run.visualMetrics
|
|
6
|
+
- const googleWebVitals = medianRun ? pageInfo.data.browsertime.pageSummary.googleWebVitals[medianRun.runIndex - 1] : pageInfo.data.browsertime.run.googleWebVitals
|
|
7
|
+
- const cpu = medianRun ? pageInfo.data.browsertime.pageSummary.cpu[medianRun.runIndex - 1] : pageInfo.data.browsertime.run.cpu
|
|
8
|
+
- const fullyLoaded = medianRun ? pageInfo.data.browsertime.pageSummary.fullyLoaded[medianRun.runIndex - 1] : pageInfo.data.browsertime.run.fullyLoaded
|
|
9
|
+
- const extras = medianRun ? pageInfo.data.browsertime.pageSummary.extras[medianRun.runIndex - 1] : pageInfo.data.browsertime.run.extras
|
|
10
|
+
- const custom = medianRun ? pageInfo.data.browsertime.pageSummary.browserScripts[medianRun.runIndex - 1].custom : pageInfo.data.browsertime.run.custom
|
|
11
|
+
- const cdp = medianRun ? pageInfo.data.browsertime.pageSummary.cdp[medianRun.runIndex - 1] : pageInfo.data.browsertime.run.cdp
|
|
12
|
+
|
|
6
13
|
small
|
|
7
14
|
| |
|
|
8
15
|
a(href='#browsermetrics') Browser metrics
|
|
@@ -19,22 +26,22 @@ if browsertime
|
|
|
19
26
|
if timings.interactionToNextPaint
|
|
20
27
|
a(href='#interactionToNextPaint') Interaction To Next Paint
|
|
21
28
|
| |
|
|
22
|
-
if
|
|
29
|
+
if timings.elementTimings && Object.keys(timings.elementTimings).length > 0
|
|
23
30
|
a(href='#elementTimings') Element Timings
|
|
24
31
|
| |
|
|
25
|
-
if
|
|
32
|
+
if custom
|
|
26
33
|
a(href='#custom-scripts') Custom scripts
|
|
27
34
|
| |
|
|
28
|
-
if
|
|
35
|
+
if extras && Object.keys(extras).length > 0
|
|
29
36
|
a(href='#extra-metrics') Extra metrics
|
|
30
37
|
| |
|
|
31
38
|
if options.browsertime.visualElements
|
|
32
39
|
a(href='#visual-elements') Visual Elements
|
|
33
40
|
| |
|
|
34
|
-
if
|
|
41
|
+
if timings.firstInput !== undefined
|
|
35
42
|
a(href='#firstInput') First Input Delay
|
|
36
43
|
| |
|
|
37
|
-
if
|
|
44
|
+
if cdp
|
|
38
45
|
a(href='#cdp-performance') Metrics from CDP
|
|
39
46
|
| |
|
|
40
47
|
if timings.serverTimings && timings.serverTimings.length > 0
|
|
@@ -136,7 +143,7 @@ if browsertime
|
|
|
136
143
|
a(href=url) #{name}
|
|
137
144
|
td.number #{h.time.ms(value)}
|
|
138
145
|
.one-half.column
|
|
139
|
-
if (
|
|
146
|
+
if (googleWebVitals)
|
|
140
147
|
table
|
|
141
148
|
tr
|
|
142
149
|
th(colspan='2') Google Web Vitals
|
|
@@ -165,16 +172,16 @@ if browsertime
|
|
|
165
172
|
td
|
|
166
173
|
a(href='#interactionToNextPaint') Interaction to next paint (INP)
|
|
167
174
|
td.number #{h.time.ms(timings.interactionToNextPaint)}
|
|
168
|
-
if
|
|
175
|
+
if timings.firstInput !== undefined
|
|
169
176
|
tr
|
|
170
177
|
td
|
|
171
178
|
a(href=baseHelpURL + 'firstInputDelay') First Input Delay (FID)
|
|
172
|
-
td.number #{h.time.ms(
|
|
179
|
+
td.number #{h.time.ms(timings.firstInput.delay)}
|
|
173
180
|
else
|
|
174
181
|
tr
|
|
175
182
|
td
|
|
176
183
|
a(href=baseHelpURL + 'totalBlockingTime') Total Blocking Time (TBT)
|
|
177
|
-
td.number #{h.time.ms(
|
|
184
|
+
td.number #{h.time.ms(cpu.longTasks.totalBlockingTime)}
|
|
178
185
|
table
|
|
179
186
|
tr
|
|
180
187
|
th(colspan='2') Extra timings
|
|
@@ -185,7 +192,7 @@ if browsertime
|
|
|
185
192
|
if (timings.paintTiming && Object.keys(timings.paintTiming).length > 0)
|
|
186
193
|
- const paintTimingHelper = { "first-contentful-paint": {"name": 'First Contentful Paint (FCP)', "friendly": "first-contentful-paint"}, "first-paint": {"name": 'First Paint', "friendly": "firstPaint" }};
|
|
187
194
|
each value, name in timings.paintTiming
|
|
188
|
-
if name === 'first-contentful-paint' &&
|
|
195
|
+
if name === 'first-contentful-paint' && googleWebVitals
|
|
189
196
|
// do nada
|
|
190
197
|
else
|
|
191
198
|
tr
|
|
@@ -212,7 +219,7 @@ if browsertime
|
|
|
212
219
|
td
|
|
213
220
|
a(href=baseHelpURL + 'timeToFirstInteractive') Time To First Interactive
|
|
214
221
|
td.number #{h.time.ms(timings.timeToFirstInteractive.toFixed(0))}
|
|
215
|
-
if (!
|
|
222
|
+
if (!googleWebVitals && timings.largestContentfulPaint)
|
|
216
223
|
tr
|
|
217
224
|
td
|
|
218
225
|
a(href=baseHelpURL + 'largestContentfulPaint') Largest Contentful Paint (LCP)
|
|
@@ -221,16 +228,11 @@ if browsertime
|
|
|
221
228
|
td
|
|
222
229
|
a(href=baseHelpURL + 'loadEventEnd') Load Event End
|
|
223
230
|
td.number #{h.time.ms(timings.loadEventEnd.toFixed(0))}
|
|
224
|
-
if (
|
|
225
|
-
tr
|
|
226
|
-
td
|
|
227
|
-
a(href=baseHelpURL + 'fullyLoaded') Fully loaded
|
|
228
|
-
td.number #{h.time.ms(timings.fullyLoaded.toFixed(0))}
|
|
229
|
-
else if (browsertime.fullyLoaded)
|
|
231
|
+
if (fullyLoaded)
|
|
230
232
|
tr
|
|
231
233
|
td
|
|
232
234
|
a(href=baseHelpURL + 'fullyLoaded') Fully loaded
|
|
233
|
-
td.number #{h.time.ms(
|
|
235
|
+
td.number #{h.time.ms(fullyLoaded.toFixed(0))}
|
|
234
236
|
if (Object.keys(timings.userTimings.marks).length > 0)
|
|
235
237
|
table
|
|
236
238
|
tr
|
|
@@ -262,12 +264,12 @@ if browsertime
|
|
|
262
264
|
|
|
263
265
|
a#custom-scripts
|
|
264
266
|
h3 Custom metrics collected through JavaScript
|
|
265
|
-
if
|
|
267
|
+
if custom
|
|
266
268
|
table
|
|
267
269
|
tr
|
|
268
270
|
th name
|
|
269
271
|
th value
|
|
270
|
-
each value, name in
|
|
272
|
+
each value, name in custom
|
|
271
273
|
tr
|
|
272
274
|
td #{name}
|
|
273
275
|
td #{value}
|
|
@@ -276,26 +278,26 @@ if browsertime
|
|
|
276
278
|
|
|
277
279
|
a#extra-metrics
|
|
278
280
|
h3 Extra metrics collected using scripting
|
|
279
|
-
if
|
|
281
|
+
if extras && Object.keys(extras).length > 0
|
|
280
282
|
table
|
|
281
283
|
tr
|
|
282
284
|
th name
|
|
283
285
|
th value
|
|
284
|
-
each value, name in
|
|
286
|
+
each value, name in extras
|
|
285
287
|
tr
|
|
286
288
|
td #{name}
|
|
287
289
|
td #{value}
|
|
288
290
|
else
|
|
289
291
|
p There are no custom extra metrics from scripting.
|
|
290
292
|
|
|
291
|
-
if
|
|
293
|
+
if cdp && cdp.performance
|
|
292
294
|
a#cdp-performance
|
|
293
295
|
h3 CDP Performance
|
|
294
296
|
table
|
|
295
297
|
tr
|
|
296
298
|
th name
|
|
297
299
|
th value
|
|
298
|
-
each value, name in
|
|
300
|
+
each value, name in cdp.performance
|
|
299
301
|
tr
|
|
300
302
|
td #{name}
|
|
301
303
|
td #{value.toFixed(0)}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
- const seriesVisualProgress = [];
|
|
2
2
|
- let oldPercent = -1;
|
|
3
3
|
- let oldValue = -1;
|
|
4
|
-
each eachRow in
|
|
4
|
+
each eachRow in visualMetrics.VisualProgress
|
|
5
5
|
- const newValue = eachRow.timestamp
|
|
6
6
|
- const percent = eachRow.percent
|
|
7
7
|
//- Sometimes VisualMetrics report the same percentage multiple times after each other
|
|
@@ -292,7 +292,7 @@ block content
|
|
|
292
292
|
section#pagexray-panel
|
|
293
293
|
include ../pagexray/index.pug
|
|
294
294
|
|
|
295
|
-
if options.cpu || options.browsertime && options.browsertime.chrome && options.browsertime.chrome.collectLongTasks || (options.browsertime && options.browsertime.firefox && options.browsertime.firefox.geckoProfiler || options.browsertime &&options.browsertime.enableProfileRun)
|
|
295
|
+
if options.cpu || options.browsertime && options.browsertime.chrome && options.browsertime.chrome.collectLongTasks || (options.browsertime && options.browsertime.firefox && options.browsertime.firefox.geckoProfiler || options.browsertime && options.browsertime.enableProfileRun)
|
|
296
296
|
section#cpu-panel
|
|
297
297
|
include ../cpu/index.pug
|
|
298
298
|
|
|
@@ -66,15 +66,16 @@ if btStatistics
|
|
|
66
66
|
+getRow(name, pageInfo, 'data.browsertime.pageSummary.statistics.visualMetrics.' + name, pageInfo.data.browsertime.pageSummary.visualMetrics, name, h.time.ms)
|
|
67
67
|
if btStatistics.timings && btStatistics.timings.pageTimings
|
|
68
68
|
tr
|
|
69
|
-
td.extraheader(colspan='5')
|
|
70
|
-
+getRow('TTFB', pageInfo, 'data.browsertime.pageSummary.statistics.timings.pageTimings.backEndTime' , pageInfo.data.browsertime.pageSummary.browserScripts, 'timings.pageTimings.backEndTime', h.time.ms)
|
|
71
|
-
+getRow('LCP', pageInfo, 'data.browsertime.pageSummary.statistics.timings.largestContentfulPaint.renderTime' , pageInfo.data.browsertime.pageSummary.browserScripts, 'timings.largestContentfulPaint.renderTime', h.time.ms)
|
|
72
|
-
+getRow('FCP', pageInfo, 'data.browsertime.pageSummary.statistics.timings.paintTiming["first-contentful-paint"]', pageInfo.data.browsertime.pageSummary.browserScripts, 'timings.paintTiming["first-contentful-paint"]', h.time.ms)
|
|
69
|
+
td.extraheader(colspan='5') Google Web Vitals
|
|
70
|
+
+getRow('Time To First Byte (TTFB)', pageInfo, 'data.browsertime.pageSummary.statistics.timings.pageTimings.backEndTime' , pageInfo.data.browsertime.pageSummary.browserScripts, 'timings.pageTimings.backEndTime', h.time.ms)
|
|
71
|
+
+getRow('Largest Contentful Paint (LCP)', pageInfo, 'data.browsertime.pageSummary.statistics.timings.largestContentfulPaint.renderTime' , pageInfo.data.browsertime.pageSummary.browserScripts, 'timings.largestContentfulPaint.renderTime', h.time.ms)
|
|
72
|
+
+getRow('First Contentful Paint (FCP)', pageInfo, 'data.browsertime.pageSummary.statistics.timings.paintTiming["first-contentful-paint"]', pageInfo.data.browsertime.pageSummary.browserScripts, 'timings.paintTiming["first-contentful-paint"]', h.time.ms)
|
|
73
|
+
+getRow('Cumulative Layout Shift (CLS)', pageInfo, 'data.browsertime.pageSummary.statistics.pageinfo.cumulativeLayoutShift' , pageInfo.data.browsertime.pageSummary.browserScripts, 'pageinfo.cumulativeLayoutShift', h.noop)
|
|
74
|
+
tr
|
|
75
|
+
td.extraheader(colspan='5') More metrics
|
|
73
76
|
each timing in timingMetrics
|
|
74
77
|
+getRow(timing, pageInfo, 'data.browsertime.pageSummary.statistics.timings.' + timing , pageInfo.data.browsertime.pageSummary.browserScripts, 'timings.' + timing, h.time.ms)
|
|
75
78
|
|
|
76
|
-
+getRow('CLS', pageInfo, 'data.browsertime.pageSummary.statistics.pageinfo.cumulativeLayoutShift' , pageInfo.data.browsertime.pageSummary.browserScripts, 'pageinfo.cumulativeLayoutShift', h.noop)
|
|
77
|
-
|
|
78
79
|
if btStatistics.timings && btStatistics.timings.userTimings && btStatistics.timings.userTimings.marks
|
|
79
80
|
tr
|
|
80
81
|
td.extraheader(colspan='5') User Timing
|
|
@@ -88,8 +89,8 @@ if btStatistics
|
|
|
88
89
|
if btStatistics.cpu && btStatistics.cpu.longTasks
|
|
89
90
|
tr
|
|
90
91
|
td.extraheader(colspan='5') CPU
|
|
91
|
-
+getRow('Total Blocking Time', pageInfo, 'data.browsertime.pageSummary.statistics.cpu.longTasks.totalBlockingTime' , pageInfo.data.browsertime.pageSummary.
|
|
92
|
-
+getRow('Max Potential FID', pageInfo, 'data.browsertime.pageSummary.statistics.cpu.longTasks.maxPotentialFid', pageInfo.data.browsertime.pageSummary.
|
|
93
|
-
+getRow('CPU long tasks ', pageInfo, 'data.browsertime.pageSummary.statistics.cpu.longTasks.tasks' , pageInfo.data.browsertime.pageSummary.
|
|
94
|
-
+getRow('CPU longest task duration ', pageInfo, 'data.browsertime.pageSummary.statistics.cpu.longTasks.durations.max' , pageInfo.data.browsertime.pageSummary.
|
|
95
|
-
+getRow('CPU last long task happens at', pageInfo, 'data.browsertime.pageSummary.statistics.cpu.longTasks.lastLongTask' , pageInfo.data.browsertime.pageSummary.
|
|
92
|
+
+getRow('Total Blocking Time', pageInfo, 'data.browsertime.pageSummary.statistics.cpu.longTasks.totalBlockingTime' , pageInfo.data.browsertime.pageSummary.cpu, 'longTasks.totalBlockingTime', h.time.ms)
|
|
93
|
+
+getRow('Max Potential FID', pageInfo, 'data.browsertime.pageSummary.statistics.cpu.longTasks.maxPotentialFid', pageInfo.data.browsertime.pageSummary.cpu, 'longTasks.maxPotentialFid', h.time.ms)
|
|
94
|
+
+getRow('CPU long tasks ', pageInfo, 'data.browsertime.pageSummary.statistics.cpu.longTasks.tasks' , pageInfo.data.browsertime.pageSummary.cpu, 'longTasks.tasks', h.noop)
|
|
95
|
+
+getRow('CPU longest task duration ', pageInfo, 'data.browsertime.pageSummary.statistics.cpu.longTasks.durations.max' , pageInfo.data.browsertime.pageSummary.cpu, 'longTasks.durations.max', h.time.ms)
|
|
96
|
+
+getRow('CPU last long task happens at', pageInfo, 'data.browsertime.pageSummary.statistics.cpu.longTasks.lastLongTask' , pageInfo.data.browsertime.pageSummary.cpu, 'longTasks.lastLongTask', h.time.ms)
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sitespeed.io",
|
|
3
|
-
"version": "28.0.0-beta.
|
|
3
|
+
"version": "28.0.0-beta.2",
|
|
4
4
|
"lockfileVersion": 2,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "sitespeed.io",
|
|
9
|
-
"version": "28.0.0-beta.
|
|
9
|
+
"version": "28.0.0-beta.2",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@google-cloud/storage": "6.9.5",
|
package/package.json
CHANGED