Skip to content

Instantly share code, notes, and snippets.

Avatar

Rick Viscomi rviscomi

View GitHub Profile
@rviscomi
rviscomi / wpt_lcp_rld.js
Created May 25, 2023 15:47
WebPageTest custom metric to measure the LCP resource load delay diagnostic.
View wpt_lcp_rld.js
[lcp_rld]
// https://web.dev/optimize-lcp/#monitor-lcp-breakdown-in-javascript
return new Promise(resolve => {
new PerformanceObserver((list) => {
const lcpEntry = list.getEntries().at(-1);
const navEntry = performance.getEntriesByType('navigation')[0];
const lcpResEntry = performance
.getEntriesByType('resource')
.filter((e) => e.name === lcpEntry.url)[0];
@rviscomi
rviscomi / bigquery-web-vitals.sql
Created April 28, 2023 18:52
Create a BigQuery view to summarize the Web Vitals data from GA and a helper function for restricting the date range
View bigquery-web-vitals.sql
CREATE OR REPLACE VIEW httparchive.analytics_373060815.web_vitals AS (
SELECT
event_name AS metric_name,
* EXCEPT(event_name, is_last_received_value)
FROM (
SELECT
*,
REGEXP_SUBSTR((SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location'), r'\/\/.*?(\/[^?]*)') AS page_path,
ROUND((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'value'), 3) AS metric_value,
IF (ROW_NUMBER() OVER (PARTITION BY (
View ga-web-vitals-attribution.js
import {
onCLS,
onFID,
onLCP,
onINP
} from 'https://unpkg.com/web-vitals@3/dist/web-vitals.attribution.js?module';
function sendToGoogleAnalytics({name, delta, value, id, rating, navigationType, attribution}) {
const eventParams = {
value: delta,
@rviscomi
rviscomi / httparchive.md
Last active January 20, 2023 06:20
Documentation of the HTTP Archive payload in BigQuery, generated by ChatGPT and not verified for accuracy
View httparchive.md

Timing information

Properties related to the timing of various events during the page load process, such as the time it takes for the page to load, the time to the first byte, and the time for different elements of the page such as images and stylesheets to be loaded, paint and rendered.

Request and response information

Properties related to the number and size of requests and responses made during the page load process, such as the number of requests, the number of responses with different status codes, and the total size of data transferred.

Test information

View cms-adoption-share.sql
WITH app_list AS (
SELECT DISTINCT
app
FROM
`httparchive.technologies.2022_05_01_mobile`
WHERE
category IN ('CMS')
), category AS (
SELECT
_TABLE_SUFFIX,
View 220512_Dx0_11Ll0.har
{
"pageref": "page_1_0_1",
"_run": 1,
"_cached": 0,
"startedDateTime": "2022-05-13T16:17:30.615041",
"time": 623,
"request": {
"method": "GET",
"url": "https://m.twfanti.com/search.html",
"headersSize": 672,
@rviscomi
rviscomi / getIfConditionals.sql
Last active March 23, 2022 17:04
Analysis of the top SCSS `if` conditionals using HTTP Archive data from March 2022 (mobile). See the full results at https://docs.google.com/spreadsheets/d/1ZMoqLRu2OpBDi-kLgJdTzAAkZwPeHe5sLHjTjt5vEng/edit?usp=sharing and https://github.com/w3c/csswg-drafts/issues/6684#issuecomment-1076543094 for more context.
View getIfConditionals.sql
CREATE TEMPORARY FUNCTION getIfConditionals(payload STRING) RETURNS
ARRAY<STRING> LANGUAGE js AS '''
try {
var $ = JSON.parse(payload);
var sass = JSON.parse($['_sass']);
return sass.scss.stats.ifs.map(i => i.test);
} catch (e) {
return [];
}
@rviscomi
rviscomi / fresh.sql
Created December 1, 2021 19:18
Web Almanac 2021 content freshness
View fresh.sql
CREATE TEMP FUNCTION PARSE_LAST_MODIFIED(last_modified STRING) RETURNS DATE DETERMINISTIC AS (
CAST(SAFE.PARSE_DATETIME('%a, %d %h %Y %T GMT', last_modified) AS DATE)
);
CREATE TEMP FUNCTION encode(comparator DATE, data INT64) RETURNS STRING DETERMINISTIC AS (
CONCAT(CAST(comparator AS STRING), CAST(data AS STRING))
);
CREATE TEMP FUNCTION decode(value STRING) RETURNS INT64 DETERMINISTIC AS (
CAST(SUBSTR(value, 11) AS INT64)
View summary_requests.2021_10_01_mobile.sql
CREATE TEMPORARY FUNCTION getSummary(url STRING, payload STRING)
RETURNS STRUCT<requestId INT64, pageid INT64, startedDateTime INT64, time INT64, method STRING, url STRING, urlShort STRING, redirectUrl STRING, firstReq BOOLEAN, firstHtml BOOLEAN, reqHttpVersion STRING, reqHeadersSize INT64,
reqBodySize INT64, reqCookieLen INT64, reqOtherHeaders STRING, status INT64, respHttpVersion STRING, respHeadersSize INT64, respBodySize INT64, respSize INT64, respCookieLen INT64, expAge INT64, mimeType STRING, respOtherHeaders STRING,
req_accept STRING, req_accept_charset STRING, req_accept_encoding STRING, req_accept_language STRING, req_connection STRING, req_host STRING, req_if_modified_since STRING, req_if_none_match STRING, req_referer STRING, req_user_agent STRING,
resp_accept_ranges STRING, resp_age STRING, resp_cache_control STRING, resp_connection STRING, resp_content_encoding STRING, resp_content_language STRING, resp_content_length STRING, resp_content_location STRING, resp_content_type STRING,
resp_da
@rviscomi
rviscomi / cms-cwv.sql
Created August 19, 2021 19:24
August 19, 2021 Web Almanac live stream queries
View cms-cwv.sql
SELECT
client,
app,
origins,
SAFE_DIVIDE(origins_with_good_cwv, origins_eligible_for_cwv) AS pct_good_cwv
FROM
`httparchive.core_web_vitals.technologies`
WHERE
date = "2021-07-01" AND
REGEXP_CONTAINS(categories, r'CMS')