From 196c3893b437b2536d59dc450fee8a7a236a4b6a Mon Sep 17 00:00:00 2001 From: Sia Date: Tue, 5 Nov 2024 11:06:42 -0500 Subject: [PATCH 01/19] Update contributors.json - Add my bluesky handle (#3830) --- src/config/contributors.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/config/contributors.json b/src/config/contributors.json index 0105a7b52fa..ffa0bdb38f0 100644 --- a/src/config/contributors.json +++ b/src/config/contributors.json @@ -3731,6 +3731,7 @@ }, "siakaramalegos": { "avatar_url": "4777393", + "bluesky": "sia.codes", "github": "siakaramalegos", "linkedin": "karamalegos", "mastodon": "https://front-end.social/@sia", From 4b2bb6e274e1dd197ddaa839608ccdd14884afa2 Mon Sep 17 00:00:00 2001 From: Nurullah Demir <13475745+nrllh@users.noreply.github.com> Date: Thu, 7 Nov 2024 17:46:46 +0100 Subject: [PATCH 02/19] CMS 2024 queries (#3731) * Queries of CMS 2024 (replicated from 2022's version) * Update cms_adoption_by_geo.sql * Update cms_adoption_by_rank.sql * Update cms_adoption_by_region.sql * Update cms_adoption_by_subregion.sql * Update cms_adoption.sql * Update core_web_vitals_by_geo.sql * Update core_web_vitals_by_geo.sql * Update core_web_vitals_yoy.sql * Update core_web_vitals_yoy.sql * Update core_web_vitals_yoy.sql * Update image_format_popularity.sql * Update image_format_popularity.sql * Update lighthouse_category_scores_per_cms.sql * Update page_weight_distribution.sql * Update page_weight_distribution.sql Fixing linter issues. * Update page_weight_distribution.sql Fixing linting. * Update cms_adoption_by_geo.sql Fixing the linter errors. * Update cms_adoption_by_subregion.sql Linter errors * Update core_web_vitals_yoy.sql Fixing linter errors. * Update lighthouse_category_scores_per_cms.sql Fixing linter errors. * Update page_weight_distribution.sql removing white space. * Update cms_adoption.sql Fixing linting issues. * Update cms_adoption_by_geo.sql Fixing linting issues. * Update cms_adoption_by_rank.sql Fixing linting issues. * Update cms_adoption_by_region.sql Conforming with linter. * Update cms_adoption_by_subregion.sql Fixing linter errors * Update core_web_vitals_by_geo.sql Linting errors. * Update core_web_vitals_yoy.sql Fixing linting * Update image_format_popularity.sql Fixing linting * Update lighthouse_category_scores_per_cms.sql Updating for linting. * Update lighthouse_category_scores_per_cms.sql Linting... * Update image_format_popularity.sql Linting issues. * Update core_web_vitals_yoy.sql Linting * Update cms_adoption_by_subregion.sql Linting * Update cms_adoption_by_region.sql Linting * Update cms_adoption_by_geo.sql Linting * Update cms_adoption_by_subregion.sql Fixing whitespace issue * Update cms_adoption_by_rank.sql Whitespace * Update cms_adoption_by_geo.sql Spacing * Update lighthouse_category_scores_per_cms.sql spacing * Update image_format_popularity.sql Linting * Update cms_adoption_by_subregion.sql Linting.. * Update cms_adoption_by_region.sql Linting * Update cms_adoption_by_rank.sql spaces * Update cms_adoption_by_geo.sql Spaces * Update cms_adoption_by_region.sql Indenting spaces * Update core_web_vitals_yoy.sql Fixing Alias * Update resource_weights.sql * Update top_cms.sql * Update top_cms_by_geo.sql * Update top_cms_by_geo.sql * Update resource_weights.sql * Update top_cms_by_rank.sql * Update wordpress_page_builders.sql * Update wordpress_resources.sql * Update cms_adoption.sql * Update cms_adoption_by_geo.sql * Update cms_adoption_by_rank.sql * Update cms_adoption_by_region.sql * Update cms_adoption_by_subregion.sql * Update core_web_vitals_by_geo.sql * Update core_web_vitals_yoy.sql * Update core_web_vitals.sql * Update image_format_popularity.sql * Update lighthouse_category_scores_per_cms.sql * Update top_cms.sql * Update top_cms_by_geo.sql * Update top_cms_by_rank.sql * Update wordpress_page_builders.sql * Update wordpress_page_builders.sql * Fixed linting issues * Fixed linting issues * Added query for lighthouse scores per CMS YoY * Update sql/2024/cms/cms_adoption_by_rank.sql Co-authored-by: Barry Pollard * Update sql/2024/cms/top_cms_by_rank.sql Co-authored-by: Barry Pollard * Removed redundant query cms_adoption_by_rank.sql --------- Co-authored-by: Mike Gifford Co-authored-by: Kevin Farrugia Co-authored-by: Kevin Farrugia Co-authored-by: Barry Pollard --- sql/2024/cms/cms_adoption.sql | 99 ++ sql/2024/cms/cms_adoption_by_geo.sql | 57 + sql/2024/cms/cms_adoption_by_region.sql | 772 ++++++++++ sql/2024/cms/cms_adoption_by_subregion.sql | 1253 +++++++++++++++++ sql/2024/cms/core_web_vitals.sql | 59 + sql/2024/cms/core_web_vitals_by_geo.sql | 74 + sql/2024/cms/core_web_vitals_yoy.sql | 176 +++ sql/2024/cms/image_format_popularity.sql | 81 ++ .../lighthouse_category_scores_per_cms.sql | 49 + ...lighthouse_category_scores_per_cms_yoy.sql | 56 + sql/2024/cms/page_weight_distribution.sql | 45 + sql/2024/cms/resource_weights.sql | 47 + sql/2024/cms/top_cms.sql | 137 ++ sql/2024/cms/top_cms_by_geo.sql | 68 + sql/2024/cms/top_cms_by_rank.sql | 62 + sql/2024/cms/wordpress_page_builders.sql | 43 + sql/2024/cms/wordpress_resources.sql | 67 + 17 files changed, 3145 insertions(+) create mode 100644 sql/2024/cms/cms_adoption.sql create mode 100644 sql/2024/cms/cms_adoption_by_geo.sql create mode 100644 sql/2024/cms/cms_adoption_by_region.sql create mode 100644 sql/2024/cms/cms_adoption_by_subregion.sql create mode 100644 sql/2024/cms/core_web_vitals.sql create mode 100644 sql/2024/cms/core_web_vitals_by_geo.sql create mode 100644 sql/2024/cms/core_web_vitals_yoy.sql create mode 100644 sql/2024/cms/image_format_popularity.sql create mode 100644 sql/2024/cms/lighthouse_category_scores_per_cms.sql create mode 100644 sql/2024/cms/lighthouse_category_scores_per_cms_yoy.sql create mode 100644 sql/2024/cms/page_weight_distribution.sql create mode 100644 sql/2024/cms/resource_weights.sql create mode 100644 sql/2024/cms/top_cms.sql create mode 100644 sql/2024/cms/top_cms_by_geo.sql create mode 100644 sql/2024/cms/top_cms_by_rank.sql create mode 100644 sql/2024/cms/wordpress_page_builders.sql create mode 100644 sql/2024/cms/wordpress_resources.sql diff --git a/sql/2024/cms/cms_adoption.sql b/sql/2024/cms/cms_adoption.sql new file mode 100644 index 00000000000..37eb2b76600 --- /dev/null +++ b/sql/2024/cms/cms_adoption.sql @@ -0,0 +1,99 @@ +#standardSQL +# CMS adoption OVER time +# cms_adoption.sql + +SELECT + client, + 2024 AS year, + COUNT(DISTINCT page) AS freq, + total, + COUNT(DISTINCT page) / total AS pct +FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats +JOIN ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' AND + is_root_page + GROUP BY + client) +USING + (client) +WHERE + cats = 'CMS' AND + date = '2024-06-01' AND + is_root_page +GROUP BY + client, + total +UNION ALL +SELECT + client, + 2023 AS year, + COUNT(DISTINCT page) AS freq, + total, + COUNT(DISTINCT page) / total AS pct +FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats +JOIN ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.all.pages` + WHERE + date = '2023-06-01' AND + is_root_page + GROUP BY + client) +USING + (client) +WHERE + cats = 'CMS' AND + date = '2023-06-01' AND + is_root_page +GROUP BY + client, + total +UNION ALL +SELECT + client, + 2022 AS year, + COUNT(DISTINCT page) AS freq, + total, + COUNT(DISTINCT page) / total AS pct +FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats +JOIN ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.all.pages` + WHERE + date = '2022-06-01' AND + is_root_page + GROUP BY + client) +USING + (client) +WHERE + cats = 'CMS' AND + date = '2022-06-01' AND + is_root_page +GROUP BY + client, + total +ORDER BY + year DESC, + pct DESC diff --git a/sql/2024/cms/cms_adoption_by_geo.sql b/sql/2024/cms/cms_adoption_by_geo.sql new file mode 100644 index 00000000000..c9371b732aa --- /dev/null +++ b/sql/2024/cms/cms_adoption_by_geo.sql @@ -0,0 +1,57 @@ +#standardSQL +# All CMS popularity per geo +# cms_adoption_by_geo.sql + +WITH geo_summary AS ( + SELECT + `chrome-ux-report`.experimental.GET_COUNTRY(country_code) AS geo, + IF(device = 'desktop', 'desktop', 'mobile') AS client, + origin, + COUNT(DISTINCT origin) OVER (PARTITION BY country_code, IF(device = 'desktop', 'desktop', 'mobile')) AS total + FROM + `chrome-ux-report.materialized.country_summary` + WHERE + yyyymm = 202406 +) + +SELECT + * +FROM ( + SELECT + client, + geo, + COUNT(0) AS pages, + ANY_VALUE(total) AS total, + COUNT(0) / ANY_VALUE(total) AS pct + FROM ( + SELECT DISTINCT + geo, + client, + total, + CONCAT(origin, '/') AS page + FROM + geo_summary + ) + JOIN ( + SELECT + client, + page + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + date = '2024-06-01' AND + cats = 'CMS' AND + is_root_page + ) + USING + (client, + page) + GROUP BY + client, + geo) +WHERE + pages > 1000 +ORDER BY + pages DESC diff --git a/sql/2024/cms/cms_adoption_by_region.sql b/sql/2024/cms/cms_adoption_by_region.sql new file mode 100644 index 00000000000..3887bec7a2c --- /dev/null +++ b/sql/2024/cms/cms_adoption_by_region.sql @@ -0,0 +1,772 @@ +#standardSQL # ALL CMS popularity per geo +CREATE TEMP FUNCTION +GET_GEO(country_code STRING, geo STRING) +RETURNS STRING +LANGUAGE js AS ''' var countries = { "af": { "name": "Afghanistan", + "region": "Asia", + "sub-region": "Southern Asia" }, + "ax": { "name": "Åland Islands", + "region": "Europe", + "sub-region": "Northern Europe" }, + "al": { "name": "Albania", + "region": "Europe", + "sub-region": "Southern Europe" }, + "dz": { "name": "Algeria", + "region": "Africa", + "sub-region": "Northern Africa" }, + "as": { "name": "American Samoa", + "region": "Oceania", + "sub-region": "Polynesia" }, + "ad": { "name": "Andorra", + "region": "Europe", + "sub-region": "Southern Europe" }, + "ao": { "name": "Angola", + "region": "Africa", + "sub-region": "Middle Africa" }, + "ai": { "name": "Anguilla", + "region": "Americas", + "sub-region": "Caribbean" }, + "ag": { "name": "Antigua and Barbuda", + "region": "Americas", + "sub-region": "Caribbean" }, + "ar": { "name": "Argentina", + "region": "Americas", + "sub-region": "South America" }, + "am": { "name": "Armenia", + "region": "Asia", + "sub-region": "Western Asia" }, + "aw": { "name": "Aruba", + "region": "Americas", + "sub-region": "Caribbean" }, + "au": { "name": "Australia", + "region": "Oceania", + "sub-region": "Australia and New Zealand" }, + "at": { "name": "Austria", + "region": "Europe", + "sub-region": "Western Europe" }, + "az": { "name": "Azerbaijan", + "region": "Asia", + "sub-region": "Western Asia" }, + "bs": { "name": "Bahamas", + "region": "Americas", + "sub-region": "Caribbean" }, + "bh": { "name": "Bahrain", + "region": "Asia", + "sub-region": "Western Asia" }, + "bd": { "name": "Bangladesh", + "region": "Asia", + "sub-region": "Southern Asia" }, + "bb": { "name": "Barbados", + "region": "Americas", + "sub-region": "Caribbean" }, + "by": { "name": "Belarus", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "be": { "name": "Belgium", + "region": "Europe", + "sub-region": "Western Europe" }, + "bz": { "name": "Belize", + "region": "Americas", + "sub-region": "Central America" }, + "bj": { "name": "Benin", + "region": "Africa", + "sub-region": "Western Africa" }, + "bm": { "name": "Bermuda", + "region": "Americas", + "sub-region": "Northern America" }, + "bt": { "name": "Bhutan", + "region": "Asia", + "sub-region": "Southern Asia" }, + "bo": { "name": "Bolivia (Plurinational State of)", + "region": "Americas", + "sub-region": "South America" }, + "bq": { "name": "Bonaire, Sint Eustatius and Saba", + "region": "Americas", + "sub-region": "Caribbean" }, + "ba": { "name": "Bosnia and Herzegovina", + "region": "Europe", + "sub-region": "Southern Europe" }, + "bw": { "name": "Botswana", + "region": "Africa", + "sub-region": "Southern Africa" }, + "br": { "name": "Brazil", + "region": "Americas", + "sub-region": "South America" }, + "io": { "name": "British Indian Ocean Territory", + "region": null, + "sub-region": null }, + "bn": { "name": "Brunei Darussalam", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "bg": { "name": "Kosovo", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "bf": { "name": "Burkina Faso", + "region": "Africa", + "sub-region": "Western Africa" }, + "bi": { "name": "Burundi", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "kh": { "name": "Cambodia", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "cm": { "name": "Cameroon", + "region": "Africa", + "sub-region": "Middle Africa" }, + "ca": { "name": "Canada", + "region": "Americas", + "sub-region": "Northern America" }, + "cv": { "name": "Cabo Verde", + "region": "Africa", + "sub-region": "Western Africa" }, + "ky": { "name": "Cayman Islands", + "region": "Americas", + "sub-region": "Caribbean" }, + "cf": { "name": "Central African Republic", + "region": "Africa", + "sub-region": "Middle Africa" }, + "td": { "name": "Chad", + "region": "Africa", + "sub-region": "Middle Africa" }, + "cl": { "name": "Chile", + "region": "Americas", + "sub-region": "South America" }, + "cn": { "name": "China", + "region": "Asia", + "sub-region": "Eastern Asia" }, + "cx": { "name": "Christmas Island", + "region": null, + "sub-region": null }, + "co": { "name": "Colombia", + "region": "Americas", + "sub-region": "South America" }, + "km": { "name": "Comoros", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "cg": { "name": "Congo", + "region": "Africa", + "sub-region": "Middle Africa" }, + "cd": { "name": "Congo (Democratic Republic of the)", + "region": "Africa", + "sub-region": "Middle Africa" }, + "ck": { "name": "Cook Islands", + "region": "Oceania", + "sub-region": "Polynesia" }, + "cr": { "name": "Costa Rica", + "region": "Americas", + "sub-region": "Central America" }, + "ci": { "name": "Côte d'Ivoire", + "region": "Africa", + "sub-region": "Western Africa" }, + "hr": { "name": "Croatia", + "region": "Europe", + "sub-region": "Southern Europe" }, + "cu": { "name": "Cuba", + "region": "Americas", + "sub-region": "Caribbean" }, + "cw": { "name": "Curaçao", + "region": "Americas", + "sub-region": "Caribbean" }, + "cy": { "name": "Cyprus", + "region": "Asia", + "sub-region": "Western Asia" }, + "cz": { "name": "Czech Republic", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "dk": { "name": "Denmark", + "region": "Europe", + "sub-region": "Northern Europe" }, + "dj": { "name": "Djibouti", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "dm": { "name": "Dominica", + "region": "Americas", + "sub-region": "Caribbean" }, + "do": { "name": "Dominican Republic", + "region": "Americas", + "sub-region": "Caribbean" }, + "ec": { "name": "Ecuador", + "region": "Americas", + "sub-region": "South America" }, + "eg": { "name": "Egypt", + "region": "Africa", + "sub-region": "Northern Africa" }, + "sv": { "name": "El Salvador", + "region": "Americas", + "sub-region": "Central America" }, + "gq": { "name": "Equatorial Guinea", + "region": "Africa", + "sub-region": "Middle Africa" }, + "er": { "name": "Eritrea", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "ee": { "name": "Estonia", + "region": "Europe", + "sub-region": "Northern Europe" }, + "et": { "name": "Ethiopia", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "fk": { "name": "Falkland Islands (Malvinas)", + "region": "Americas", + "sub-region": "South America" }, + "fo": { "name": "Faroe Islands", + "region": "Europe", + "sub-region": "Northern Europe" }, + "fj": { "name": "Fiji", + "region": "Oceania", + "sub-region": "Melanesia" }, + "fi": { "name": "Finland", + "region": "Europe", + "sub-region": "Northern Europe" }, + "fr": { "name": "France", + "region": "Europe", + "sub-region": "Western Europe" }, + "gf": { "name": "French Guiana", + "region": "Americas", + "sub-region": "South America" }, + "pf": { "name": "French Polynesia", + "region": "Oceania", + "sub-region": "Polynesia" }, + "ga": { "name": "Gabon", + "region": "Africa", + "sub-region": "Middle Africa" }, + "gm": { "name": "Gambia", + "region": "Africa", + "sub-region": "Western Africa" }, + "ge": { "name": "Georgia", + "region": "Asia", + "sub-region": "Western Asia" }, + "de": { "name": "Germany", + "region": "Europe", + "sub-region": "Western Europe" }, + "gh": { "name": "Ghana", + "region": "Africa", + "sub-region": "Western Africa" }, + "gi": { "name": "Gibraltar", + "region": "Europe", + "sub-region": "Southern Europe" }, + "gr": { "name": "Greece", + "region": "Europe", + "sub-region": "Southern Europe" }, + "gl": { "name": "Greenland", + "region": "Americas", + "sub-region": "Northern America" }, + "gd": { "name": "Grenada", + "region": "Americas", + "sub-region": "Caribbean" }, + "gp": { "name": "Guadeloupe", + "region": "Americas", + "sub-region": "Caribbean" }, + "gu": { "name": "Guam", + "region": "Oceania", + "sub-region": "Micronesia" }, + "gt": { "name": "Guatemala", + "region": "Americas", + "sub-region": "Central America" }, + "gg": { "name": "Guernsey", + "region": "Europe", + "sub-region": "Northern Europe" }, + "gn": { "name": "Guinea", + "region": "Africa", + "sub-region": "Western Africa" }, + "gw": { "name": "Guinea-Bissau", + "region": "Africa", + "sub-region": "Western Africa" }, + "gy": { "name": "Guyana", + "region": "Americas", + "sub-region": "South America" }, + "ht": { "name": "Haiti", + "region": "Americas", + "sub-region": "Caribbean" }, + "hn": { "name": "Honduras", + "region": "Americas", + "sub-region": "Central America" }, + "hk": { "name": "Hong Kong", + "region": "Asia", + "sub-region": "Eastern Asia" }, + "hu": { "name": "Hungary", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "is": { "name": "Iceland", + "region": "Europe", + "sub-region": "Northern Europe" }, + "in": { "name": "India", + "region": "Asia", + "sub-region": "Southern Asia" }, + "id": { "name": "Indonesia", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "ir": { "name": "Iran (Islamic Republic of)", + "region": "Asia", + "sub-region": "Southern Asia" }, + "iq": { "name": "Iraq", + "region": "Asia", + "sub-region": "Western Asia" }, + "ie": { "name": "Ireland", + "region": "Europe", + "sub-region": "Northern Europe" }, + "im": { "name": "Isle of Man", + "region": "Europe", + "sub-region": "Northern Europe" }, + "il": { "name": "Israel", + "region": "Asia", + "sub-region": "Western Asia" }, + "it": { "name": "Italy", + "region": "Europe", + "sub-region": "Southern Europe" }, + "jm": { "name": "Jamaica", + "region": "Americas", + "sub-region": "Caribbean" }, + "jp": { "name": "Japan", + "region": "Asia", + "sub-region": "Eastern Asia" }, + "je": { "name": "Jersey", + "region": "Europe", + "sub-region": "Northern Europe" }, + "jo": { "name": "Jordan", + "region": "Asia", + "sub-region": "Western Asia" }, + "kz": { "name": "Kazakhstan", + "region": "Asia", + "sub-region": "Central Asia" }, + "ke": { "name": "Kenya", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "ki": { "name": "Kiribati", + "region": "Oceania", + "sub-region": "Micronesia" }, + "kp": { "name": "Korea (Democratic People's Republic of)", + "region": "Asia", + "sub-region": "Eastern Asia" }, + "kr": { "name": "Korea (Republic of)", + "region": "Asia", + "sub-region": "Eastern Asia" }, + "kw": { "name": "Kuwait", + "region": "Asia", + "sub-region": "Western Asia" }, + "kg": { "name": "Kyrgyzstan", + "region": "Asia", + "sub-region": "Central Asia" }, + "la": { "name": "Lao People's Democratic Republic", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "lv": { "name": "Latvia", + "region": "Europe", + "sub-region": "Northern Europe" }, + "lb": { "name": "Lebanon", + "region": "Asia", + "sub-region": "Western Asia" }, + "ls": { "name": "Lesotho", + "region": "Africa", + "sub-region": "Southern Africa" }, + "lr": { "name": "Liberia", + "region": "Africa", + "sub-region": "Western Africa" }, + "ly": { "name": "Libya", + "region": "Africa", + "sub-region": "Northern Africa" }, + "li": { "name": "Liechtenstein", + "region": "Europe", + "sub-region": "Western Europe" }, + "lt": { "name": "Lithuania", + "region": "Europe", + "sub-region": "Northern Europe" }, + "lu": { "name": "Luxembourg", + "region": "Europe", + "sub-region": "Western Europe" }, + "mo": { "name": "Macao", + "region": "Asia", + "sub-region": "Eastern Asia" }, + "mk": { "name": "Macedonia (the former Yugoslav Republic of)", + "region": "Europe", + "sub-region": "Southern Europe" }, + "mg": { "name": "Madagascar", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "mw": { "name": "Malawi", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "my": { "name": "Malaysia", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "mv": { "name": "Maldives", + "region": "Asia", + "sub-region": "Southern Asia" }, + "ml": { "name": "Mali", + "region": "Africa", + "sub-region": "Western Africa" }, + "mt": { "name": "Malta", + "region": "Europe", + "sub-region": "Southern Europe" }, + "mh": { "name": "Marshall Islands", + "region": "Oceania", + "sub-region": "Micronesia" }, + "mq": { "name": "Martinique", + "region": "Americas", + "sub-region": "Caribbean" }, + "mr": { "name": "Mauritania", + "region": "Africa", + "sub-region": "Western Africa" }, + "mu": { "name": "Mauritius", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "yt": { "name": "Mayotte", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "mx": { "name": "Mexico", + "region": "Americas", + "sub-region": "Central America" }, + "fm": { "name": "Micronesia (Federated States of)", + "region": "Oceania", + "sub-region": "Micronesia" }, + "md": { "name": "Moldova (Republic of)", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "mc": { "name": "Monaco", + "region": "Europe", + "sub-region": "Western Europe" }, + "mn": { "name": "Mongolia", + "region": "Asia", + "sub-region": "Eastern Asia" }, + "me": { "name": "Montenegro", + "region": "Europe", + "sub-region": "Southern Europe" }, + "ms": { "name": "Montserrat", + "region": "Americas", + "sub-region": "Caribbean" }, + "ma": { "name": "Morocco", + "region": "Africa", + "sub-region": "Northern Africa" }, + "mz": { "name": "Mozambique", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "mm": { "name": "Myanmar", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "na": { "name": "Namibia", + "region": "Africa", + "sub-region": "Southern Africa" }, + "nr": { "name": "Nauru", + "region": "Oceania", + "sub-region": "Micronesia" }, + "np": { "name": "Nepal", + "region": "Asia", + "sub-region": "Southern Asia" }, + "nl": { "name": "Netherlands", + "region": "Europe", + "sub-region": "Western Europe" }, + "nc": { "name": "New Caledonia", + "region": "Oceania", + "sub-region": "Melanesia" }, + "nz": { "name": "New Zealand", + "region": "Oceania", + "sub-region": "Australia and New Zealand" }, + "ni": { "name": "Nicaragua", + "region": "Americas", + "sub-region": "Central America" }, + "ne": { "name": "Niger", + "region": "Africa", + "sub-region": "Western Africa" }, + "ng": { "name": "Nigeria", + "region": "Africa", + "sub-region": "Western Africa" }, + "nf": { "name": "Norfolk Island", + "region": "Oceania", + "sub-region": "Australia and New Zealand" }, + "mp": { "name": "Northern Mariana Islands", + "region": "Oceania", + "sub-region": "Micronesia" }, + "no": { "name": "Norway", + "region": "Europe", + "sub-region": "Northern Europe" }, + "om": { "name": "Oman", + "region": "Asia", + "sub-region": "Western Asia" }, + "pk": { "name": "Pakistan", + "region": "Asia", + "sub-region": "Southern Asia" }, + "pw": { "name": "Palau", + "region": "Oceania", + "sub-region": "Micronesia" }, + "ps": { "name": "Palestine, State of", + "region": "Asia", + "sub-region": "Western Asia" }, + "pa": { "name": "Panama", + "region": "Americas", + "sub-region": "Central America" }, + "pg": { "name": "Papua New Guinea", + "region": "Oceania", + "sub-region": "Melanesia" }, + "py": { "name": "Paraguay", + "region": "Americas", + "sub-region": "South America" }, + "pe": { "name": "Peru", + "region": "Americas", + "sub-region": "South America" }, + "ph": { "name": "Philippines", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "pl": { "name": "Poland", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "pt": { "name": "Portugal", + "region": "Europe", + "sub-region": "Southern Europe" }, + "pr": { "name": "Puerto Rico", + "region": "Americas", + "sub-region": "Caribbean" }, + "qa": { "name": "Qatar", + "region": "Asia", + "sub-region": "Western Asia" }, + "re": { "name": "Réunion", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "ro": { "name": "Romania", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "ru": { "name": "Russian Federation", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "rw": { "name": "Rwanda", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "bl": { "name": "Saint Barthélemy", + "region": "Americas", + "sub-region": "Caribbean" }, + "sh": { "name": "Saint Helena, Ascension and Tristan da Cunha", + "region": "Africa", + "sub-region": "Western Africa" }, + "kn": { "name": "Saint Kitts and Nevis", + "region": "Americas", + "sub-region": "Caribbean" }, + "lc": { "name": "Saint Lucia", + "region": "Americas", + "sub-region": "Caribbean" }, + "mf": { "name": "Saint Martin (French part)", + "region": "Americas", + "sub-region": "Caribbean" }, + "pm": { "name": "Saint Pierre and Miquelon", + "region": "Americas", + "sub-region": "Northern America" }, + "vc": { "name": "Saint Vincent and the Grenadines", + "region": "Americas", + "sub-region": "Caribbean" }, + "ws": { "name": "Samoa", + "region": "Oceania", + "sub-region": "Polynesia" }, + "sm": { "name": "San Marino", + "region": "Europe", + "sub-region": "Southern Europe" }, + "st": { "name": "Sao Tome and Principe", + "region": "Africa", + "sub-region": "Middle Africa" }, + "sa": { "name": "Saudi Arabia", + "region": "Asia", + "sub-region": "Western Asia" }, + "sn": { "name": "Senegal", + "region": "Africa", + "sub-region": "Western Africa" }, + "rs": { "name": "Serbia", + "region": "Europe", + "sub-region": "Southern Europe" }, + "sc": { "name": "Seychelles", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "sl": { "name": "Sierra Leone", + "region": "Africa", + "sub-region": "Western Africa" }, + "sg": { "name": "Singapore", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "sx": { "name": "Sint Maarten (Dutch part)", + "region": "Americas", + "sub-region": "Caribbean" }, + "sk": { "name": "Slovakia", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "si": { "name": "Slovenia", + "region": "Europe", + "sub-region": "Southern Europe" }, + "sb": { "name": "Solomon Islands", + "region": "Oceania", + "sub-region": "Melanesia" }, + "so": { "name": "Somalia", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "za": { "name": "South Africa", + "region": "Africa", + "sub-region": "Southern Africa" }, + "ss": { "name": "South Sudan", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "es": { "name": "Spain", + "region": "Europe", + "sub-region": "Southern Europe" }, + "lk": { "name": "Sri Lanka", + "region": "Asia", + "sub-region": "Southern Asia" }, + "sd": { "name": "Sudan", + "region": "Africa", + "sub-region": "Northern Africa" }, + "sr": { "name": "Suriname", + "region": "Americas", + "sub-region": "South America" }, + "sj": { "name": "Svalbard and Jan Mayen", + "region": "Europe", + "sub-region": "Northern Europe" }, + "sz": { "name": "Swaziland", + "region": "Africa", + "sub-region": "Southern Africa" }, + "se": { "name": "Sweden", + "region": "Europe", + "sub-region": "Northern Europe" }, + "ch": { "name": "Switzerland", + "region": "Europe", + "sub-region": "Western Europe" }, + "sy": { "name": "Syrian Arab Republic", + "region": "Asia", + "sub-region": "Western Asia" }, + "tw": { "name": "Taiwan, Province of China", + "region": "Asia", + "sub-region": "Eastern Asia" }, + "tj": { "name": "Tajikistan", + "region": "Asia", + "sub-region": "Central Asia" }, + "tz": { "name": "Tanzania, United Republic of", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "th": { "name": "Thailand", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "tl": { "name": "Timor-Leste", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "tg": { "name": "Togo", + "region": "Africa", + "sub-region": "Western Africa" }, + "to": { "name": "Tonga", + "region": "Oceania", + "sub-region": "Polynesia" }, + "tt": { "name": "Trinidad and Tobago", + "region": "Americas", + "sub-region": "Caribbean" }, + "tn": { "name": "Tunisia", + "region": "Africa", + "sub-region": "Northern Africa" }, + "tr": { "name": "Turkey", + "region": "Asia", + "sub-region": "Western Asia" }, + "tm": { "name": "Turkmenistan", + "region": "Asia", + "sub-region": "Central Asia" }, + "tc": { "name": "Turks and Caicos Islands", + "region": "Americas", + "sub-region": "Caribbean" }, + "tv": { "name": "Tuvalu", + "region": "Oceania", + "sub-region": "Polynesia" }, + "ug": { "name": "Uganda", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "ua": { "name": "Ukraine", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "ae": { "name": "United Arab Emirates", + "region": "Asia", + "sub-region": "Western Asia" }, + "gb": { "name": "United Kingdom of Great Britain and Northern Ireland", + "region": "Europe", + "sub-region": "Northern Europe" }, + "us": { "name": "United States of America", + "region": "Americas", + "sub-region": "Northern America" }, + "uy": { "name": "Uruguay", + "region": "Americas", + "sub-region": "South America" }, + "uz": { "name": "Uzbekistan", + "region": "Asia", + "sub-region": "Central Asia" }, + "vu": { "name": "Vanuatu", + "region": "Oceania", + "sub-region": "Melanesia" }, + "ve": { "name": "Venezuela (Bolivarian Republic of)", + "region": "Americas", + "sub-region": "South America" }, + "vn": { "name": "Viet Nam", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "vg": { "name": "Virgin Islands (British)", + "region": "Americas", + "sub-region": "Caribbean" }, + "vi": { "name": "Virgin Islands (U.S.)", + "region": "Americas", + "sub-region": "Caribbean" }, + "eh": { "name": "Western Sahara", + "region": "Africa", + "sub-region": "Northern Africa" }, + "ye": { "name": "Yemen", + "region": "Asia", + "sub-region": "Western Asia" }, + "zm": { "name": "Zambia", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "zw": { "name": "Zimbabwe", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "xk": { "name": "Kosovo", + "region": "Europe", + "sub-region": "Eastern Europe" } }; return countries[country_code][geo]; '''; +WITH +geo_summary AS ( + SELECT + GET_GEO(country_code, + 'region') AS region, + IF(device = 'desktop', 'desktop', 'mobile') AS client, + origin, + COUNT(DISTINCT origin) OVER (PARTITION BY GET_GEO(country_code, 'region'), + IF(device = 'desktop', 'desktop', 'mobile')) AS total + FROM + `chrome-ux-report.materialized.country_summary` + WHERE + yyyymm = 202406 +) +SELECT + * +FROM ( + SELECT + client, + region, + COUNT(0) AS pages, + ANY_VALUE(total) AS total, + COUNT(0) / ANY_VALUE(total) AS pct + FROM ( + SELECT DISTINCT region, + client, + total, + CONCAT(origin, '/') AS page + FROM + geo_summary + ) + JOIN ( + SELECT + client, + page + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + date = '2024-06-01' AND + cats = 'CMS' AND + is_root_page + ) + USING + (client, + page) + GROUP BY + client, + region) +WHERE + pages > 1000 +ORDER BY + pages DESC diff --git a/sql/2024/cms/cms_adoption_by_subregion.sql b/sql/2024/cms/cms_adoption_by_subregion.sql new file mode 100644 index 00000000000..d98cd22b8aa --- /dev/null +++ b/sql/2024/cms/cms_adoption_by_subregion.sql @@ -0,0 +1,1253 @@ +#standardSQL +# All CMS popularity per geo +CREATE TEMP FUNCTION GET_GEO(country_code STRING, geo STRING) RETURNS STRING LANGUAGE js AS ''' +var countries = { + "af": { + "name": "Afghanistan", + "region": "Asia", + "sub-region": "Southern Asia" + }, + "ax": { + "name": "Åland Islands", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "al": { + "name": "Albania", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "dz": { + "name": "Algeria", + "region": "Africa", + "sub-region": "Northern Africa" + }, + "as": { + "name": "American Samoa", + "region": "Oceania", + "sub-region": "Polynesia" + }, + "ad": { + "name": "Andorra", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "ao": { + "name": "Angola", + "region": "Africa", + "sub-region": "Middle Africa" + }, + "ai": { + "name": "Anguilla", + "region": "Americas", + "sub-region": "Caribbean" + }, + "ag": { + "name": "Antigua and Barbuda", + "region": "Americas", + "sub-region": "Caribbean" + }, + "ar": { + "name": "Argentina", + "region": "Americas", + "sub-region": "South America" + }, + "am": { + "name": "Armenia", + "region": "Asia", + "sub-region": "Western Asia" + }, + "aw": { + "name": "Aruba", + "region": "Americas", + "sub-region": "Caribbean" + }, + "au": { + "name": "Australia", + "region": "Oceania", + "sub-region": "Australia and New Zealand" + }, + "at": { + "name": "Austria", + "region": "Europe", + "sub-region": "Western Europe" + }, + "az": { + "name": "Azerbaijan", + "region": "Asia", + "sub-region": "Western Asia" + }, + "bs": { + "name": "Bahamas", + "region": "Americas", + "sub-region": "Caribbean" + }, + "bh": { + "name": "Bahrain", + "region": "Asia", + "sub-region": "Western Asia" + }, + "bd": { + "name": "Bangladesh", + "region": "Asia", + "sub-region": "Southern Asia" + }, + "bb": { + "name": "Barbados", + "region": "Americas", + "sub-region": "Caribbean" + }, + "by": { + "name": "Belarus", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "be": { + "name": "Belgium", + "region": "Europe", + "sub-region": "Western Europe" + }, + "bz": { + "name": "Belize", + "region": "Americas", + "sub-region": "Central America" + }, + "bj": { + "name": "Benin", + "region": "Africa", + "sub-region": "Western Africa" + }, + "bm": { + "name": "Bermuda", + "region": "Americas", + "sub-region": "Northern America" + }, + "bt": { + "name": "Bhutan", + "region": "Asia", + "sub-region": "Southern Asia" + }, + "bo": { + "name": "Bolivia (Plurinational State of)", + "region": "Americas", + "sub-region": "South America" + }, + "bq": { + "name": "Bonaire, Sint Eustatius and Saba", + "region": "Americas", + "sub-region": "Caribbean" + }, + "ba": { + "name": "Bosnia and Herzegovina", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "bw": { + "name": "Botswana", + "region": "Africa", + "sub-region": "Southern Africa" + }, + "br": { + "name": "Brazil", + "region": "Americas", + "sub-region": "South America" + }, + "io": { + "name": "British Indian Ocean Territory", + "region": null, + "sub-region": null + }, + "bn": { + "name": "Brunei Darussalam", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "bg": { + "name": "Kosovo", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "bf": { + "name": "Burkina Faso", + "region": "Africa", + "sub-region": "Western Africa" + }, + "bi": { + "name": "Burundi", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "kh": { + "name": "Cambodia", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "cm": { + "name": "Cameroon", + "region": "Africa", + "sub-region": "Middle Africa" + }, + "ca": { + "name": "Canada", + "region": "Americas", + "sub-region": "Northern America" + }, + "cv": { + "name": "Cabo Verde", + "region": "Africa", + "sub-region": "Western Africa" + }, + "ky": { + "name": "Cayman Islands", + "region": "Americas", + "sub-region": "Caribbean" + }, + "cf": { + "name": "Central African Republic", + "region": "Africa", + "sub-region": "Middle Africa" + }, + "td": { + "name": "Chad", + "region": "Africa", + "sub-region": "Middle Africa" + }, + "cl": { + "name": "Chile", + "region": "Americas", + "sub-region": "South America" + }, + "cn": { + "name": "China", + "region": "Asia", + "sub-region": "Eastern Asia" + }, + "cx": { + "name": "Christmas Island", + "region": null, + "sub-region": null + }, + "co": { + "name": "Colombia", + "region": "Americas", + "sub-region": "South America" + }, + "km": { + "name": "Comoros", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "cg": { + "name": "Congo", + "region": "Africa", + "sub-region": "Middle Africa" + }, + "cd": { + "name": "Congo (Democratic Republic of the)", + "region": "Africa", + "sub-region": "Middle Africa" + }, + "ck": { + "name": "Cook Islands", + "region": "Oceania", + "sub-region": "Polynesia" + }, + "cr": { + "name": "Costa Rica", + "region": "Americas", + "sub-region": "Central America" + }, + "ci": { + "name": "Côte d'Ivoire", + "region": "Africa", + "sub-region": "Western Africa" + }, + "hr": { + "name": "Croatia", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "cu": { + "name": "Cuba", + "region": "Americas", + "sub-region": "Caribbean" + }, + "cw": { + "name": "Curaçao", + "region": "Americas", + "sub-region": "Caribbean" + }, + "cy": { + "name": "Cyprus", + "region": "Asia", + "sub-region": "Western Asia" + }, + "cz": { + "name": "Czech Republic", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "dk": { + "name": "Denmark", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "dj": { + "name": "Djibouti", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "dm": { + "name": "Dominica", + "region": "Americas", + "sub-region": "Caribbean" + }, + "do": { + "name": "Dominican Republic", + "region": "Americas", + "sub-region": "Caribbean" + }, + "ec": { + "name": "Ecuador", + "region": "Americas", + "sub-region": "South America" + }, + "eg": { + "name": "Egypt", + "region": "Africa", + "sub-region": "Northern Africa" + }, + "sv": { + "name": "El Salvador", + "region": "Americas", + "sub-region": "Central America" + }, + "gq": { + "name": "Equatorial Guinea", + "region": "Africa", + "sub-region": "Middle Africa" + }, + "er": { + "name": "Eritrea", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "ee": { + "name": "Estonia", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "et": { + "name": "Ethiopia", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "fk": { + "name": "Falkland Islands (Malvinas)", + "region": "Americas", + "sub-region": "South America" + }, + "fo": { + "name": "Faroe Islands", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "fj": { + "name": "Fiji", + "region": "Oceania", + "sub-region": "Melanesia" + }, + "fi": { + "name": "Finland", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "fr": { + "name": "France", + "region": "Europe", + "sub-region": "Western Europe" + }, + "gf": { + "name": "French Guiana", + "region": "Americas", + "sub-region": "South America" + }, + "pf": { + "name": "French Polynesia", + "region": "Oceania", + "sub-region": "Polynesia" + }, + "ga": { + "name": "Gabon", + "region": "Africa", + "sub-region": "Middle Africa" + }, + "gm": { + "name": "Gambia", + "region": "Africa", + "sub-region": "Western Africa" + }, + "ge": { + "name": "Georgia", + "region": "Asia", + "sub-region": "Western Asia" + }, + "de": { + "name": "Germany", + "region": "Europe", + "sub-region": "Western Europe" + }, + "gh": { + "name": "Ghana", + "region": "Africa", + "sub-region": "Western Africa" + }, + "gi": { + "name": "Gibraltar", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "gr": { + "name": "Greece", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "gl": { + "name": "Greenland", + "region": "Americas", + "sub-region": "Northern America" + }, + "gd": { + "name": "Grenada", + "region": "Americas", + "sub-region": "Caribbean" + }, + "gp": { + "name": "Guadeloupe", + "region": "Americas", + "sub-region": "Caribbean" + }, + "gu": { + "name": "Guam", + "region": "Oceania", + "sub-region": "Micronesia" + }, + "gt": { + "name": "Guatemala", + "region": "Americas", + "sub-region": "Central America" + }, + "gg": { + "name": "Guernsey", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "gn": { + "name": "Guinea", + "region": "Africa", + "sub-region": "Western Africa" + }, + "gw": { + "name": "Guinea-Bissau", + "region": "Africa", + "sub-region": "Western Africa" + }, + "gy": { + "name": "Guyana", + "region": "Americas", + "sub-region": "South America" + }, + "ht": { + "name": "Haiti", + "region": "Americas", + "sub-region": "Caribbean" + }, + "hn": { + "name": "Honduras", + "region": "Americas", + "sub-region": "Central America" + }, + "hk": { + "name": "Hong Kong", + "region": "Asia", + "sub-region": "Eastern Asia" + }, + "hu": { + "name": "Hungary", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "is": { + "name": "Iceland", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "in": { + "name": "India", + "region": "Asia", + "sub-region": "Southern Asia" + }, + "id": { + "name": "Indonesia", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "ir": { + "name": "Iran (Islamic Republic of)", + "region": "Asia", + "sub-region": "Southern Asia" + }, + "iq": { + "name": "Iraq", + "region": "Asia", + "sub-region": "Western Asia" + }, + "ie": { + "name": "Ireland", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "im": { + "name": "Isle of Man", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "il": { + "name": "Israel", + "region": "Asia", + "sub-region": "Western Asia" + }, + "it": { + "name": "Italy", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "jm": { + "name": "Jamaica", + "region": "Americas", + "sub-region": "Caribbean" + }, + "jp": { + "name": "Japan", + "region": "Asia", + "sub-region": "Eastern Asia" + }, + "je": { + "name": "Jersey", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "jo": { + "name": "Jordan", + "region": "Asia", + "sub-region": "Western Asia" + }, + "kz": { + "name": "Kazakhstan", + "region": "Asia", + "sub-region": "Central Asia" + }, + "ke": { + "name": "Kenya", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "ki": { + "name": "Kiribati", + "region": "Oceania", + "sub-region": "Micronesia" + }, + "kp": { + "name": "Korea (Democratic People's Republic of)", + "region": "Asia", + "sub-region": "Eastern Asia" + }, + "kr": { + "name": "Korea (Republic of)", + "region": "Asia", + "sub-region": "Eastern Asia" + }, + "kw": { + "name": "Kuwait", + "region": "Asia", + "sub-region": "Western Asia" + }, + "kg": { + "name": "Kyrgyzstan", + "region": "Asia", + "sub-region": "Central Asia" + }, + "la": { + "name": "Lao People's Democratic Republic", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "lv": { + "name": "Latvia", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "lb": { + "name": "Lebanon", + "region": "Asia", + "sub-region": "Western Asia" + }, + "ls": { + "name": "Lesotho", + "region": "Africa", + "sub-region": "Southern Africa" + }, + "lr": { + "name": "Liberia", + "region": "Africa", + "sub-region": "Western Africa" + }, + "ly": { + "name": "Libya", + "region": "Africa", + "sub-region": "Northern Africa" + }, + "li": { + "name": "Liechtenstein", + "region": "Europe", + "sub-region": "Western Europe" + }, + "lt": { + "name": "Lithuania", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "lu": { + "name": "Luxembourg", + "region": "Europe", + "sub-region": "Western Europe" + }, + "mo": { + "name": "Macao", + "region": "Asia", + "sub-region": "Eastern Asia" + }, + "mk": { + "name": "Macedonia (the former Yugoslav Republic of)", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "mg": { + "name": "Madagascar", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "mw": { + "name": "Malawi", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "my": { + "name": "Malaysia", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "mv": { + "name": "Maldives", + "region": "Asia", + "sub-region": "Southern Asia" + }, + "ml": { + "name": "Mali", + "region": "Africa", + "sub-region": "Western Africa" + }, + "mt": { + "name": "Malta", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "mh": { + "name": "Marshall Islands", + "region": "Oceania", + "sub-region": "Micronesia" + }, + "mq": { + "name": "Martinique", + "region": "Americas", + "sub-region": "Caribbean" + }, + "mr": { + "name": "Mauritania", + "region": "Africa", + "sub-region": "Western Africa" + }, + "mu": { + "name": "Mauritius", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "yt": { + "name": "Mayotte", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "mx": { + "name": "Mexico", + "region": "Americas", + "sub-region": "Central America" + }, + "fm": { + "name": "Micronesia (Federated States of)", + "region": "Oceania", + "sub-region": "Micronesia" + }, + "md": { + "name": "Moldova (Republic of)", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "mc": { + "name": "Monaco", + "region": "Europe", + "sub-region": "Western Europe" + }, + "mn": { + "name": "Mongolia", + "region": "Asia", + "sub-region": "Eastern Asia" + }, + "me": { + "name": "Montenegro", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "ms": { + "name": "Montserrat", + "region": "Americas", + "sub-region": "Caribbean" + }, + "ma": { + "name": "Morocco", + "region": "Africa", + "sub-region": "Northern Africa" + }, + "mz": { + "name": "Mozambique", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "mm": { + "name": "Myanmar", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "na": { + "name": "Namibia", + "region": "Africa", + "sub-region": "Southern Africa" + }, + "nr": { + "name": "Nauru", + "region": "Oceania", + "sub-region": "Micronesia" + }, + "np": { + "name": "Nepal", + "region": "Asia", + "sub-region": "Southern Asia" + }, + "nl": { + "name": "Netherlands", + "region": "Europe", + "sub-region": "Western Europe" + }, + "nc": { + "name": "New Caledonia", + "region": "Oceania", + "sub-region": "Melanesia" + }, + "nz": { + "name": "New Zealand", + "region": "Oceania", + "sub-region": "Australia and New Zealand" + }, + "ni": { + "name": "Nicaragua", + "region": "Americas", + "sub-region": "Central America" + }, + "ne": { + "name": "Niger", + "region": "Africa", + "sub-region": "Western Africa" + }, + "ng": { + "name": "Nigeria", + "region": "Africa", + "sub-region": "Western Africa" + }, + "nf": { + "name": "Norfolk Island", + "region": "Oceania", + "sub-region": "Australia and New Zealand" + }, + "mp": { + "name": "Northern Mariana Islands", + "region": "Oceania", + "sub-region": "Micronesia" + }, + "no": { + "name": "Norway", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "om": { + "name": "Oman", + "region": "Asia", + "sub-region": "Western Asia" + }, + "pk": { + "name": "Pakistan", + "region": "Asia", + "sub-region": "Southern Asia" + }, + "pw": { + "name": "Palau", + "region": "Oceania", + "sub-region": "Micronesia" + }, + "ps": { + "name": "Palestine, State of", + "region": "Asia", + "sub-region": "Western Asia" + }, + "pa": { + "name": "Panama", + "region": "Americas", + "sub-region": "Central America" + }, + "pg": { + "name": "Papua New Guinea", + "region": "Oceania", + "sub-region": "Melanesia" + }, + "py": { + "name": "Paraguay", + "region": "Americas", + "sub-region": "South America" + }, + "pe": { + "name": "Peru", + "region": "Americas", + "sub-region": "South America" + }, + "ph": { + "name": "Philippines", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "pl": { + "name": "Poland", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "pt": { + "name": "Portugal", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "pr": { + "name": "Puerto Rico", + "region": "Americas", + "sub-region": "Caribbean" + }, + "qa": { + "name": "Qatar", + "region": "Asia", + "sub-region": "Western Asia" + }, + "re": { + "name": "Réunion", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "ro": { + "name": "Romania", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "ru": { + "name": "Russian Federation", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "rw": { + "name": "Rwanda", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "bl": { + "name": "Saint Barthélemy", + "region": "Americas", + "sub-region": "Caribbean" + }, + "sh": { + "name": "Saint Helena, Ascension and Tristan da Cunha", + "region": "Africa", + "sub-region": "Western Africa" + }, + "kn": { + "name": "Saint Kitts and Nevis", + "region": "Americas", + "sub-region": "Caribbean" + }, + "lc": { + "name": "Saint Lucia", + "region": "Americas", + "sub-region": "Caribbean" + }, + "mf": { + "name": "Saint Martin (French part)", + "region": "Americas", + "sub-region": "Caribbean" + }, + "pm": { + "name": "Saint Pierre and Miquelon", + "region": "Americas", + "sub-region": "Northern America" + }, + "vc": { + "name": "Saint Vincent and the Grenadines", + "region": "Americas", + "sub-region": "Caribbean" + }, + "ws": { + "name": "Samoa", + "region": "Oceania", + "sub-region": "Polynesia" + }, + "sm": { + "name": "San Marino", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "st": { + "name": "Sao Tome and Principe", + "region": "Africa", + "sub-region": "Middle Africa" + }, + "sa": { + "name": "Saudi Arabia", + "region": "Asia", + "sub-region": "Western Asia" + }, + "sn": { + "name": "Senegal", + "region": "Africa", + "sub-region": "Western Africa" + }, + "rs": { + "name": "Serbia", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "sc": { + "name": "Seychelles", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "sl": { + "name": "Sierra Leone", + "region": "Africa", + "sub-region": "Western Africa" + }, + "sg": { + "name": "Singapore", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "sx": { + "name": "Sint Maarten (Dutch part)", + "region": "Americas", + "sub-region": "Caribbean" + }, + "sk": { + "name": "Slovakia", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "si": { + "name": "Slovenia", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "sb": { + "name": "Solomon Islands", + "region": "Oceania", + "sub-region": "Melanesia" + }, + "so": { + "name": "Somalia", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "za": { + "name": "South Africa", + "region": "Africa", + "sub-region": "Southern Africa" + }, + "ss": { + "name": "South Sudan", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "es": { + "name": "Spain", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "lk": { + "name": "Sri Lanka", + "region": "Asia", + "sub-region": "Southern Asia" + }, + "sd": { + "name": "Sudan", + "region": "Africa", + "sub-region": "Northern Africa" + }, + "sr": { + "name": "Suriname", + "region": "Americas", + "sub-region": "South America" + }, + "sj": { + "name": "Svalbard and Jan Mayen", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "sz": { + "name": "Swaziland", + "region": "Africa", + "sub-region": "Southern Africa" + }, + "se": { + "name": "Sweden", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "ch": { + "name": "Switzerland", + "region": "Europe", + "sub-region": "Western Europe" + }, + "sy": { + "name": "Syrian Arab Republic", + "region": "Asia", + "sub-region": "Western Asia" + }, + "tw": { + "name": "Taiwan, Province of China", + "region": "Asia", + "sub-region": "Eastern Asia" + }, + "tj": { + "name": "Tajikistan", + "region": "Asia", + "sub-region": "Central Asia" + }, + "tz": { + "name": "Tanzania, United Republic of", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "th": { + "name": "Thailand", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "tl": { + "name": "Timor-Leste", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "tg": { + "name": "Togo", + "region": "Africa", + "sub-region": "Western Africa" + }, + "to": { + "name": "Tonga", + "region": "Oceania", + "sub-region": "Polynesia" + }, + "tt": { + "name": "Trinidad and Tobago", + "region": "Americas", + "sub-region": "Caribbean" + }, + "tn": { + "name": "Tunisia", + "region": "Africa", + "sub-region": "Northern Africa" + }, + "tr": { + "name": "Turkey", + "region": "Asia", + "sub-region": "Western Asia" + }, + "tm": { + "name": "Turkmenistan", + "region": "Asia", + "sub-region": "Central Asia" + }, + "tc": { + "name": "Turks and Caicos Islands", + "region": "Americas", + "sub-region": "Caribbean" + }, + "tv": { + "name": "Tuvalu", + "region": "Oceania", + "sub-region": "Polynesia" + }, + "ug": { + "name": "Uganda", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "ua": { + "name": "Ukraine", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "ae": { + "name": "United Arab Emirates", + "region": "Asia", + "sub-region": "Western Asia" + }, + "gb": { + "name": "United Kingdom of Great Britain and Northern Ireland", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "us": { + "name": "United States of America", + "region": "Americas", + "sub-region": "Northern America" + }, + "uy": { + "name": "Uruguay", + "region": "Americas", + "sub-region": "South America" + }, + "uz": { + "name": "Uzbekistan", + "region": "Asia", + "sub-region": "Central Asia" + }, + "vu": { + "name": "Vanuatu", + "region": "Oceania", + "sub-region": "Melanesia" + }, + "ve": { + "name": "Venezuela (Bolivarian Republic of)", + "region": "Americas", + "sub-region": "South America" + }, + "vn": { + "name": "Viet Nam", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "vg": { + "name": "Virgin Islands (British)", + "region": "Americas", + "sub-region": "Caribbean" + }, + "vi": { + "name": "Virgin Islands (U.S.)", + "region": "Americas", + "sub-region": "Caribbean" + }, + "eh": { + "name": "Western Sahara", + "region": "Africa", + "sub-region": "Northern Africa" + }, + "ye": { + "name": "Yemen", + "region": "Asia", + "sub-region": "Western Asia" + }, + "zm": { + "name": "Zambia", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "zw": { + "name": "Zimbabwe", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "xk": { + "name": "Kosovo", + "region": "Europe", + "sub-region": "Eastern Europe" + } +}; + +return countries[country_code][geo]; +'''; + +WITH geo_summary AS ( + SELECT + GET_GEO(country_code, 'sub-region') AS sub_region, + IF(device = 'desktop', 'desktop', 'mobile') AS client, + origin, + COUNT(DISTINCT origin) OVER (PARTITION BY GET_GEO(country_code, 'sub-region'), IF(device = 'desktop', 'desktop', 'mobile')) AS total + FROM + `chrome-ux-report.materialized.country_summary` + WHERE + yyyymm = 202406 +) + +SELECT + * +FROM ( + SELECT + client, + sub_region, + COUNT(0) AS pages, + ANY_VALUE(total) AS total, + COUNT(0) / ANY_VALUE(total) AS pct + FROM ( + SELECT DISTINCT + sub_region, + client, + total, + CONCAT(origin, '/') AS page + FROM + geo_summary + ) + JOIN ( + SELECT + client, + page + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + date = '2024-06-01' AND + cats = 'CMS' AND + is_root_page + ) + USING + (client, + page) + GROUP BY + client, + sub_region +) +WHERE + pages > 1000 +ORDER BY + pages DESC diff --git a/sql/2024/cms/core_web_vitals.sql b/sql/2024/cms/core_web_vitals.sql new file mode 100644 index 00000000000..91423ce1dde --- /dev/null +++ b/sql/2024/cms/core_web_vitals.sql @@ -0,0 +1,59 @@ +# cms passing core web vitals +# core_web_vitals.sql +CREATE TEMP FUNCTION IS_GOOD (good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS ( + good / (good + needs_improvement + poor) >= 0.75 +); + +CREATE TEMP FUNCTION IS_NON_ZERO (good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS ( + good + needs_improvement + poor > 0 +); + +SELECT + client, + cms, + COUNT(DISTINCT origin) AS origins, + # Origins with good LCP divided by origins with any LCP. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_lcp, avg_lcp, slow_lcp), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp), origin, NULL))) AS pct_good_lcp, + + # Origins with good FID divided by origins with any FID. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_fid, avg_fid, slow_fid), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_fid, avg_fid, slow_fid), origin, NULL))) AS pct_good_fid, + + # Origins with good CLS divided by origins with any CLS. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL))) AS pct_good_cls, + + # Origins with good LCP, FID (optional), and CLS divided by origins with any LCP and CLS. + SAFE_DIVIDE( + COUNT(DISTINCT IF( + IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND + IS_GOOD(fast_fid, avg_fid, slow_fid) IS NOT FALSE AND + IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)), + COUNT(DISTINCT IF( + IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp) AND + IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL))) AS pct_good_cwv +FROM + `chrome-ux-report.materialized.device_summary` +JOIN ( + SELECT + _TABLE_SUFFIX AS client, + url, + app AS cms + FROM + `httparchive.technologies.2024_06_01_*` + WHERE + category = 'CMS') +ON + CONCAT(origin, '/') = url AND + IF(device = 'desktop', 'desktop', 'mobile') = client +WHERE + date = '2024-06-01' +GROUP BY + client, + cms +ORDER BY + origins DESC diff --git a/sql/2024/cms/core_web_vitals_by_geo.sql b/sql/2024/cms/core_web_vitals_by_geo.sql new file mode 100644 index 00000000000..95e0475cc3c --- /dev/null +++ b/sql/2024/cms/core_web_vitals_by_geo.sql @@ -0,0 +1,74 @@ +# cms passing core web vitals +# core_web_vitals_by_geo +# core_web_vitals_by_geo.sql +CREATE TEMP FUNCTION IS_GOOD (good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS ( + good / (good + needs_improvement + poor) >= 0.75 +); + +CREATE TEMP FUNCTION IS_NON_ZERO (good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS ( + good + needs_improvement + poor > 0 +); + +SELECT + client, + `chrome-ux-report`.experimental.GET_COUNTRY(country_code) AS geo, + cms, + COUNT(DISTINCT origin) AS origins, + # Origins with good LCP divided by origins with any LCP. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_lcp, avg_lcp, slow_lcp), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp), origin, NULL))) AS pct_good_lcp, + + # Origins with good FID divided by origins with any FID. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_fid, avg_fid, slow_fid), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_fid, avg_fid, slow_fid), origin, NULL))) AS pct_good_fid, + + # Origins with good CLS divided by origins with any CLS. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL))) AS pct_good_cls, + + # Origins with good LCP, FID (optional), and CLS divided by origins with any LCP and CLS. FID is optional! + SAFE_DIVIDE( + COUNT(DISTINCT IF( + IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND + IS_GOOD(fast_fid, avg_fid, slow_fid) IS NOT FALSE AND + IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)), + COUNT(DISTINCT IF( + IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp) AND + IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL))) AS pct_good_cwv +FROM ( + SELECT + *, + CONCAT(origin, '/') AS url, + IF(device = 'desktop', 'desktop', 'mobile') AS client + FROM + `chrome-ux-report.materialized.country_summary` + WHERE + yyyymm = 202406 AND + device IN ('desktop', 'phone')) +JOIN ( + SELECT DISTINCT + client, + page AS url, + technologies.technology AS cms + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2024-06-01' AND + is_root_page +) +USING + (client, url) +GROUP BY + client, + geo, + cms +HAVING + origins > 1000 +ORDER BY + origins DESC diff --git a/sql/2024/cms/core_web_vitals_yoy.sql b/sql/2024/cms/core_web_vitals_yoy.sql new file mode 100644 index 00000000000..b29be382e61 --- /dev/null +++ b/sql/2024/cms/core_web_vitals_yoy.sql @@ -0,0 +1,176 @@ +# cms passing core web vitals +# core_web_vitals_yoy.sql +CREATE TEMP FUNCTION IS_GOOD (good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS ( + good / (good + needs_improvement + poor) >= 0.75 +); + +CREATE TEMP FUNCTION IS_NON_ZERO (good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS ( + good + needs_improvement + poor > 0 +); + +SELECT + 2024 AS year, + client, + cms, + COUNT(DISTINCT origin) AS origins, + # Origins with good LCP divided by origins with any LCP. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_lcp, avg_lcp, slow_lcp), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp), origin, NULL))) AS pct_good_lcp, + + # Origins with good INP divided by origins with any INP. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_inp, avg_inp, slow_inp), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_inp, avg_inp, slow_inp), origin, NULL))) AS pct_good_inp, + # Origins with good CLS divided by origins with any CLS. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL))) AS pct_good_cls, + + # Origins with good LCP, INP (optional), and CLS divided by origins with any LCP and CLS. + SAFE_DIVIDE( + COUNT(DISTINCT IF( + IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND + IS_GOOD(fast_inp, avg_inp, slow_inp) IS NOT FALSE AND + IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)), + COUNT(DISTINCT IF( + IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp) AND + IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL))) AS pct_good_cwv +FROM + `chrome-ux-report.materialized.device_summary` +JOIN ( + SELECT + client, + page AS url, + technologies.technology AS cms + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2024-06-01' AND + is_root_page +) +ON + CONCAT(origin, '/') = url AND + IF(device = 'desktop', 'desktop', 'mobile') = client +WHERE + date = '2024-06-01' +GROUP BY + client, + cms + +UNION ALL + +SELECT + 2023 AS year, + client, + cms, + COUNT(DISTINCT origin) AS origins, + # Origins with good LCP divided by origins with any LCP. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_lcp, avg_lcp, slow_lcp), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp), origin, NULL))) AS pct_good_lcp, + + # Origins with good INP divided by origins with any INP. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_inp, avg_inp, slow_inp), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_inp, avg_inp, slow_inp), origin, NULL))) AS pct_good_inp, + + # Origins with good CLS divided by origins with any CLS. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL))) AS pct_good_cls, + + # Origins with good LCP, INP (optional), and CLS divided by origins with any LCP and CLS. + SAFE_DIVIDE( + COUNT(DISTINCT IF( + IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND + IS_GOOD(fast_inp, avg_inp, slow_inp) IS NOT FALSE AND + IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)), + COUNT(DISTINCT IF( + IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp) AND + IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL))) AS pct_good_cwv +FROM + `chrome-ux-report.materialized.device_summary` +JOIN ( + SELECT + client, + page AS url, + technologies.technology AS cms + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2023-06-01' AND + is_root_page +) +ON + CONCAT(origin, '/') = url AND + IF(device = 'desktop', 'desktop', 'mobile') = client +WHERE + date = '2023-06-01' +GROUP BY + client, + cms + +UNION ALL + +SELECT + 2022 AS year, + client, + cms, + COUNT(DISTINCT origin) AS origins, + # Origins with good LCP divided by origins with any LCP. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_lcp, avg_lcp, slow_lcp), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp), origin, NULL))) AS pct_good_lcp, + + # Origins with good INP divided by origins with any INP. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_inp, avg_inp, slow_inp), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_inp, avg_inp, slow_inp), origin, NULL))) AS pct_good_inp, + + # Origins with good CLS divided by origins with any CLS. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL))) AS pct_good_cls, + + # Origins with good LCP, INP (optional), and CLS divided by origins with any LCP and CLS. + SAFE_DIVIDE( + COUNT(DISTINCT IF( + IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND + IS_GOOD(fast_inp, avg_inp, slow_inp) IS NOT FALSE AND + IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)), + COUNT(DISTINCT IF( + IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp) AND + IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL))) AS pct_good_cwv +FROM + `chrome-ux-report.materialized.device_summary` +JOIN ( + SELECT + client, + page AS url, + technologies.technology AS cms + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2022-06-01' AND + is_root_page +) +ON + CONCAT(origin, '/') = url AND + IF(device = 'desktop', 'desktop', 'mobile') = client +WHERE + date = '2022-06-01' +GROUP BY + client, + cms +ORDER BY + origins DESC diff --git a/sql/2024/cms/image_format_popularity.sql b/sql/2024/cms/image_format_popularity.sql new file mode 100644 index 00000000000..09641aa08b7 --- /dev/null +++ b/sql/2024/cms/image_format_popularity.sql @@ -0,0 +1,81 @@ +#standardSQL +# Image format popularity BY CMS +# image_format_popularity.sql + +SELECT + client, + cms, + ANY_VALUE(pages) AS pages, + format, + COUNT(0) AS freq, + SUM(COUNT(0)) OVER (PARTITION BY client, cms) AS total, + COUNT(0) / SUM(COUNT(0)) OVER (PARTITION BY client, cms) AS pct +FROM ( + SELECT DISTINCT client, + page AS url, + technologies.technology AS cms + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2024-06-01' AND + is_root_page +) +JOIN ( + SELECT + client, + page AS url, + CASE + WHEN JSON_VALUE(summary, '$.mimeType') = 'image/avif' THEN 'avif' + WHEN JSON_VALUE(summary, '$.mimeType') = 'image/webp' THEN 'webp' + WHEN JSON_VALUE(summary, '$.mimeType') = 'image/jpeg' THEN 'jpg' + WHEN JSON_VALUE(summary, '$.mimeType') = 'image/png' THEN 'png' + WHEN JSON_VALUE(summary, '$.mimeType') = 'image/gif' THEN 'gif' + WHEN JSON_VALUE(summary, '$.mimeType') = 'image/svg+xml' THEN 'svg' + WHEN JSON_VALUE(summary, '$.mimeType') = 'image/x-icon' THEN 'ico' + WHEN JSON_VALUE(summary, '$.mimeType') = 'image/vnd.microsoft.icon' THEN 'ico' + WHEN JSON_VALUE(summary, '$.mimeType') = 'image/jpg' THEN 'jpg' + WHEN JSON_VALUE(summary, '$.mimeType') = 'image/bmp' THEN 'bmp' + WHEN JSON_VALUE(summary, '$.mimeType') = 'binary/octet-stream' THEN 'binary/octet-stream' + ELSE 'other/unknown' -- TO handle ANY unexpected formats + END + AS format + FROM + `httparchive.all.requests` + WHERE + date = '2024-06-01' AND + type = 'image' AND + is_root_page +) +USING + (client, + url) +JOIN ( + SELECT + client, + technologies.technology AS cms, + COUNT(DISTINCT page) AS pages + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2024-06-01' AND + is_root_page + GROUP BY + client, + cms) +USING + (client, + cms) +WHERE + pages > 1000 +GROUP BY + client, + cms, + format +ORDER BY + freq DESC diff --git a/sql/2024/cms/lighthouse_category_scores_per_cms.sql b/sql/2024/cms/lighthouse_category_scores_per_cms.sql new file mode 100644 index 00000000000..77a74ad6727 --- /dev/null +++ b/sql/2024/cms/lighthouse_category_scores_per_cms.sql @@ -0,0 +1,49 @@ +#standardSQL +# Lighthouse category scores per CMS +# lighthouse_category_scores_per_cms.sql +SELECT + client, + cms, + COUNT(DISTINCT url) AS freq, + APPROX_QUANTILES(CAST(JSON_VALUE(categories, '$.performance.score') AS NUMERIC), 1000)[ + OFFSET(500)] * 100 AS median_performance, + APPROX_QUANTILES(CAST(JSON_VALUE(categories, '$.accessibility.score') AS NUMERIC), 1000)[ + OFFSET(500)] * 100 AS median_accessibility, + APPROX_QUANTILES(CAST(JSON_VALUE(categories, '$.seo.score') AS NUMERIC), 1000)[ + OFFSET(500)] * 100 AS median_seo, + APPROX_QUANTILES(CAST(JSON_VALUE(categories, '$."best-practices".score') AS NUMERIC), 1000)[ + OFFSET(500)] * 100 AS median_best_practices +FROM ( + SELECT + client, + page AS url, + JSON_EXTRACT(lighthouse, '$.categories') AS categories + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' AND + is_root_page +) +JOIN ( + SELECT DISTINCT + client, + technologies.technology AS cms, + page AS url + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2024-06-01' AND + is_root_page +) +USING + (url, + client) +GROUP BY + client, + cms +ORDER BY + freq DESC, + client diff --git a/sql/2024/cms/lighthouse_category_scores_per_cms_yoy.sql b/sql/2024/cms/lighthouse_category_scores_per_cms_yoy.sql new file mode 100644 index 00000000000..c4d8b8d6626 --- /dev/null +++ b/sql/2024/cms/lighthouse_category_scores_per_cms_yoy.sql @@ -0,0 +1,56 @@ +#standardSQL +# Lighthouse category scores per CMS YoY +# lighthouse_category_scores_per_cms_yoy.sql +SELECT + CASE + WHEN date = '2024-06-01' THEN '2024' + ELSE '2023' + END AS year, + client, + cms, + COUNT(DISTINCT url) AS freq, + APPROX_QUANTILES(CAST(JSON_VALUE(categories, '$.performance.score') AS NUMERIC), 1000)[ + OFFSET(500)] * 100 AS median_performance, + APPROX_QUANTILES(CAST(JSON_VALUE(categories, '$.accessibility.score') AS NUMERIC), 1000)[ + OFFSET(500)] * 100 AS median_accessibility, + APPROX_QUANTILES(CAST(JSON_VALUE(categories, '$.seo.score') AS NUMERIC), 1000)[ + OFFSET(500)] * 100 AS median_seo, + APPROX_QUANTILES(CAST(JSON_VALUE(categories, '$."best-practices".score') AS NUMERIC), 1000)[ + OFFSET(500)] * 100 AS median_best_practices +FROM ( + SELECT + client, + date, + page AS url, + JSON_EXTRACT(lighthouse, '$.categories') AS categories + FROM + `httparchive.all.pages` + WHERE + (date = '2024-06-01' OR date = '2023-06-01') AND + is_root_page +) +JOIN ( + SELECT DISTINCT + client, + date, + technologies.technology AS cms, + page AS url + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + (date = '2024-06-01' OR date = '2023-06-01') AND + is_root_page +) +USING + (date, url, client) +GROUP BY + date, + client, + cms +ORDER BY + date, + client, + freq DESC diff --git a/sql/2024/cms/page_weight_distribution.sql b/sql/2024/cms/page_weight_distribution.sql new file mode 100644 index 00000000000..70e50762b99 --- /dev/null +++ b/sql/2024/cms/page_weight_distribution.sql @@ -0,0 +1,45 @@ +#standardSQL +# Total page weight distribution BY CMS +# page_weight_distribution.sql +SELECT + percentile, + client, + cms, + COUNT(0) AS pages, + APPROX_QUANTILES(total_kb, 1000)[OFFSET(percentile * 10)] AS total_kb +FROM ( + SELECT DISTINCT + client, + page AS url, + technologies.technology AS cms + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2024-06-01' + ) +JOIN ( + SELECT + client, + page AS url, + cast(json_value(summary, '$.bytesTotal') AS INT64) / 1024 AS total_kb + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' +) +USING + (client, + url), + UNNEST([10, 25, 50, 75, 90, 100]) AS percentile +GROUP BY + percentile, + client, + cms +HAVING + pages > 1000 +ORDER BY + percentile, + pages DESC diff --git a/sql/2024/cms/resource_weights.sql b/sql/2024/cms/resource_weights.sql new file mode 100644 index 00000000000..c86c3e853ed --- /dev/null +++ b/sql/2024/cms/resource_weights.sql @@ -0,0 +1,47 @@ +#standardSQL +# Median resource weights by CMS +#resource_weights.sql + +SELECT + client, + cms, + COUNT(0) AS pages, + APPROX_QUANTILES(total_kb, 1000)[OFFSET(500)] AS median_total_kb, + APPROX_QUANTILES(html_kb, 1000)[OFFSET(500)] AS median_html_kb, + APPROX_QUANTILES(js_kb, 1000)[OFFSET(500)] AS median_js_kb, + APPROX_QUANTILES(css_kb, 1000)[OFFSET(500)] AS median_css_kb, + APPROX_QUANTILES(img_kb, 1000)[OFFSET(500)] AS median_img_kb, + APPROX_QUANTILES(font_kb, 1000)[OFFSET(500)] AS median_font_kb +FROM ( + SELECT DISTINCT + client, + page AS url, + technologies.technology AS cms + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2024-06-01') +JOIN ( + SELECT + client, + page AS url, + cast(json_value(summary, '$.bytesTotal') AS INT64) / 1024 AS total_kb, + cast(json_value(summary, '$.bytesHtml') AS INT64) / 1024 AS html_kb, + cast(json_value(summary, '$.bytesJS') AS INT64) / 1024 AS js_kb, + cast(json_value(summary, '$.bytesCss') AS INT64) / 1024 AS css_kb, + cast(json_value(summary, '$.bytesImg') AS INT64) / 1024 AS img_kb, + cast(json_value(summary, '$.bytesFont') AS INT64) / 1024 AS font_kb + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01') +USING + (client, url) +GROUP BY + client, + cms +ORDER BY + pages DESC diff --git a/sql/2024/cms/top_cms.sql b/sql/2024/cms/top_cms.sql new file mode 100644 index 00000000000..0e1708fe0d6 --- /dev/null +++ b/sql/2024/cms/top_cms.sql @@ -0,0 +1,137 @@ +#standardSQL +# Top CMS platforms, compared to 2020 +# top_cms.sql +SELECT + client, + 2024 AS year, + technologies.technology AS cms, + COUNT(DISTINCT page) AS freq, + total, + COUNT(DISTINCT page) / total AS pct +FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats +JOIN ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' AND + is_root_page + GROUP BY + client) +USING + (client) +WHERE + cats = 'CMS' AND + date = '2024-06-01' AND + is_root_page +GROUP BY + client, + total, + cms +UNION ALL +SELECT + client, + 2023 AS year, + technologies.technology AS cms, + COUNT(DISTINCT page) AS freq, + total, + COUNT(DISTINCT page) / total AS pct +FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats +JOIN ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.all.pages` + WHERE + date = '2023-06-01' AND + is_root_page + GROUP BY + client) +USING + (client) +WHERE + cats = 'CMS' AND + date = '2023-06-01' AND + is_root_page +GROUP BY + client, + total, + cms +UNION ALL +SELECT + client, + 2022 AS year, + technologies.technology AS cms, + COUNT(DISTINCT page) AS freq, + total, + COUNT(DISTINCT page) / total AS pct +FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats +JOIN ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.all.pages` + WHERE + date = '2022-08-01' AND + is_root_page + GROUP BY + client) +USING + (client) +WHERE + cats = 'CMS' AND + date = '2022-08-01' AND + is_root_page +GROUP BY + client, + total, + cms +UNION ALL +SELECT + client, + 2021 AS year, + technologies.technology AS cms, + COUNT(DISTINCT page) AS freq, + total, + COUNT(DISTINCT page) / total AS pct +FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats +JOIN ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.all.pages` + WHERE + date = '2021-07-01' AND + is_root_page + GROUP BY + client) +USING + (client) +WHERE + cats = 'CMS' AND + date = '2021-07-01' AND + is_root_page +GROUP BY + client, + total, + cms +ORDER BY + year DESC, + pct DESC diff --git a/sql/2024/cms/top_cms_by_geo.sql b/sql/2024/cms/top_cms_by_geo.sql new file mode 100644 index 00000000000..473a556e11e --- /dev/null +++ b/sql/2024/cms/top_cms_by_geo.sql @@ -0,0 +1,68 @@ +#standardSQL +# CMS popularity per geo +# top_cms_by_geo.sql +WITH geo_summary AS ( + SELECT + `chrome-ux-report`.experimental.GET_COUNTRY(country_code) AS geo, + IF(device = 'desktop', 'desktop', 'mobile') AS client, + origin, + COUNT(DISTINCT origin) OVER (PARTITION BY country_code, IF(device = 'desktop', 'desktop', 'mobile')) AS total + FROM + `chrome-ux-report.materialized.country_summary` + WHERE + yyyymm = 202406 + UNION ALL + SELECT + 'ALL' AS geo, + IF(device = 'desktop', 'desktop', 'mobile') AS client, + origin, + COUNT(DISTINCT origin) OVER (PARTITION BY IF(device = 'desktop', 'desktop', 'mobile')) AS total + FROM + `chrome-ux-report.materialized.device_summary` + WHERE + yyyymm = 202406 +) + +SELECT + * +FROM ( + SELECT + client, + geo, + cms, + COUNT(0) AS pages, + ANY_VALUE(total) AS total, + COUNT(DISTINCT url) / ANY_VALUE(total) AS pct + FROM ( + SELECT DISTINCT + geo, + client, + CONCAT(origin, '/') AS url, + total + FROM + geo_summary + ) JOIN ( + SELECT DISTINCT + client, + cats, + technologies.technology AS cms, + page AS url + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + technologies.technology IS NOT NULL AND + cats = 'CMS' AND + technologies.technology != '' AND + date = '2024-06-01' AND + is_root_page + ) USING (client, url) + GROUP BY + client, + geo, + cms) +WHERE + pages > 1000 +ORDER BY + pages DESC diff --git a/sql/2024/cms/top_cms_by_rank.sql b/sql/2024/cms/top_cms_by_rank.sql new file mode 100644 index 00000000000..c0a84010cd8 --- /dev/null +++ b/sql/2024/cms/top_cms_by_rank.sql @@ -0,0 +1,62 @@ +#standardSQL +# CMS adoption per rank +# top_cms_by_rank.sql + +SELECT + client, + cms, + rank, + COUNT(DISTINCT url) AS pages, + ANY_VALUE(total) AS total, + COUNT(DISTINCT url) / ANY_VALUE(total) AS pct +FROM ( + SELECT DISTINCT + client, + page AS url, + technologies.technology AS cms + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2024-06-01' AND + is_root_page) +JOIN ( + SELECT + client, + page AS url, + rank_magnitude AS rank + FROM + `httparchive.all.pages`, + UNNEST([1e3, 1e4, 1e5, 1e6, 1e7, 1e8]) AS rank_magnitude + WHERE + rank <= rank_magnitude AND + date = '2024-06-01' AND + is_root_page) +USING + (client, url) +JOIN ( + SELECT + client, + rank_magnitude AS rank, + COUNT(0) AS total + FROM + `httparchive.all.pages`, + UNNEST([1e3, 1e4, 1e5, 1e6, 1e7, 1e8]) AS rank_magnitude + WHERE + rank <= rank_magnitude AND + date = '2024-06-01' AND + is_root_page + GROUP BY + client, + rank_magnitude) +USING + (client, rank) +GROUP BY + client, + cms, + rank +ORDER BY + rank, + pages DESC diff --git a/sql/2024/cms/wordpress_page_builders.sql b/sql/2024/cms/wordpress_page_builders.sql new file mode 100644 index 00000000000..b853ad58053 --- /dev/null +++ b/sql/2024/cms/wordpress_page_builders.sql @@ -0,0 +1,43 @@ +#standardSQL +# Top WordPress page builder combinations +# wordpress_page_builders.sql + +SELECT + client, + page_builders, + COUNT(0) AS pages, + SUM(COUNT(0)) OVER (PARTITION BY client) AS total, + COUNT(0) / SUM(COUNT(0)) OVER (PARTITION BY client) AS pct +FROM ( + SELECT DISTINCT + client, + page AS url + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + technologies.technology = 'WordPress' AND + date = '2024-06-01') +JOIN ( + SELECT + client, + page AS url, + ARRAY_TO_STRING(ARRAY_AGG(technologies.technology ORDER BY technologies.technology), ', ') AS page_builders + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'Page builders' AND + date = '2024-06-01' + GROUP BY + client, + url) +USING + (client, url) +GROUP BY + client, + page_builders +ORDER BY + pct DESC diff --git a/sql/2024/cms/wordpress_resources.sql b/sql/2024/cms/wordpress_resources.sql new file mode 100644 index 00000000000..4377c489e05 --- /dev/null +++ b/sql/2024/cms/wordpress_resources.sql @@ -0,0 +1,67 @@ +#standardSQL +# Distribution OF WordPress resource types BY path +# wordpress_resources.sql + +SELECT + percentile, + client, + path, + APPROX_QUANTILES(freq, 1000)[OFFSET(percentile * 10)] AS freq +FROM ( + SELECT + client, + page, + REGEXP_EXTRACT(url, r'/(themes|plugins|wp-includes)/') AS path, + COUNT(0) AS freq + FROM ( + SELECT + client, + page + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + technologies.technology = 'WordPress' AND + date = '2024-06-01') + JOIN ( + SELECT + client, + cast(json_value(summary, '$.pageid') AS INT64) AS pageid, + page + FROM + `httparchive.all.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + date = '2024-06-01') + USING + (client, + page) + JOIN ( + SELECT + client, + cast(json_value(summary, '$.pageid') AS INT64) AS pageid, + page AS url + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01') + USING + (client, + pageid) + GROUP BY + client, + page, + path + HAVING + path IS NOT NULL), + UNNEST([10, 25, 50, 75, 90, 100]) AS percentile +GROUP BY + percentile, + client, + path +ORDER BY + percentile, + client, + path From e753d6109ac3e41e53fc81abe7eeac5bb43c6ba6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 9 Nov 2024 13:28:45 +0000 Subject: [PATCH 03/19] Bump puppeteer from 23.6.1 to 23.7.1 in /src (#3835) Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 23.6.1 to 23.7.1. - [Release notes](https://github.com/puppeteer/puppeteer/releases) - [Changelog](https://github.com/puppeteer/puppeteer/blob/main/release-please-config.json) - [Commits](https://github.com/puppeteer/puppeteer/compare/puppeteer-v23.6.1...puppeteer-v23.7.1) --- updated-dependencies: - dependency-name: puppeteer dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/package-lock.json | 78 +++++++++++++++++++++---------------------- src/package.json | 2 +- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/package-lock.json b/src/package-lock.json index fd2e4fb3dd3..9182844e2de 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -15,7 +15,7 @@ "node-fetch": "3.3.2", "node-watch": "0.7.4", "prettier": "3.3.3", - "puppeteer": "23.6.1", + "puppeteer": "23.7.1", "rainbow-code": "2.1.7", "recursive-readdir": "2.2.3", "run-script-os": "1.1.6", @@ -186,12 +186,12 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.4.0.tgz", - "integrity": "sha512-x8J1csfIygOwf6D6qUAZ0ASk3z63zPb7wkNeHRerCMh82qWKUrOgkuP005AJC8lDL6/evtXETGEJVcwykKT4/g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.4.1.tgz", + "integrity": "sha512-0kdAbmic3J09I6dT8e9vE2JOCSt13wHCW5x/ly8TSt2bDtuIWe2TgLZZDHdcziw9AVCzflMAXCrVyRIhIs44Ng==", "dev": true, "dependencies": { - "debug": "^4.3.6", + "debug": "^4.3.7", "extract-zip": "^2.0.1", "progress": "^2.0.3", "proxy-agent": "^6.4.0", @@ -214,9 +214,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "22.8.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.2.tgz", - "integrity": "sha512-NzaRNFV+FZkvK/KLCsNdTvID0SThyrs5SHB6tsD/lajr22FGC73N2QeDPM2wHtVde8mgcXuSsHQkH5cX1pbPLw==", + "version": "22.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", + "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", "dev": true, "optional": true, "dependencies": { @@ -1459,17 +1459,17 @@ } }, "node_modules/puppeteer": { - "version": "23.6.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.6.1.tgz", - "integrity": "sha512-8+ALGQgwXd3P/tGcuSsxTPGDaOQIjcDIm04I5hpWZv/PiN5q8bQNHRUyfYrifT+flnM9aTWCP7tLEzuB6SlIgA==", + "version": "23.7.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.7.1.tgz", + "integrity": "sha512-jS6XehagMvxQ12etwY/4EOYZ0Sm8GAsrtGhdQn4AqpJAyHc3RYl7tGd4QYh/MmShDw8sF9FWYQqGidhoXaqokQ==", "dev": true, "hasInstallScript": true, "dependencies": { - "@puppeteer/browsers": "2.4.0", + "@puppeteer/browsers": "2.4.1", "chromium-bidi": "0.8.0", "cosmiconfig": "^9.0.0", "devtools-protocol": "0.0.1354347", - "puppeteer-core": "23.6.1", + "puppeteer-core": "23.7.1", "typed-query-selector": "^2.12.0" }, "bin": { @@ -1480,12 +1480,12 @@ } }, "node_modules/puppeteer-core": { - "version": "23.6.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.6.1.tgz", - "integrity": "sha512-DoNLAzQfGklPauEn33N4h9cM9GubJSINEn+AUMwAXwW159Y9JLk5y34Jsbv4c7kG8P0puOYWV9leu2siMZ/QpQ==", + "version": "23.7.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.7.1.tgz", + "integrity": "sha512-Om/qCZhd+HLoAr7GltrRAZpS3uOXwHu7tXAoDbNcJADHjG2zeAlDArgyIPXYGG4QB/EQUHk13Q6RklNxGM73Pg==", "dev": true, "dependencies": { - "@puppeteer/browsers": "2.4.0", + "@puppeteer/browsers": "2.4.1", "chromium-bidi": "0.8.0", "debug": "^4.3.7", "devtools-protocol": "0.0.1354347", @@ -1811,9 +1811,9 @@ } }, "node_modules/tslib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true }, "node_modules/typed-query-selector": { @@ -2190,12 +2190,12 @@ } }, "@puppeteer/browsers": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.4.0.tgz", - "integrity": "sha512-x8J1csfIygOwf6D6qUAZ0ASk3z63zPb7wkNeHRerCMh82qWKUrOgkuP005AJC8lDL6/evtXETGEJVcwykKT4/g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.4.1.tgz", + "integrity": "sha512-0kdAbmic3J09I6dT8e9vE2JOCSt13wHCW5x/ly8TSt2bDtuIWe2TgLZZDHdcziw9AVCzflMAXCrVyRIhIs44Ng==", "dev": true, "requires": { - "debug": "^4.3.6", + "debug": "^4.3.7", "extract-zip": "^2.0.1", "progress": "^2.0.3", "proxy-agent": "^6.4.0", @@ -2212,9 +2212,9 @@ "dev": true }, "@types/node": { - "version": "22.8.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.2.tgz", - "integrity": "sha512-NzaRNFV+FZkvK/KLCsNdTvID0SThyrs5SHB6tsD/lajr22FGC73N2QeDPM2wHtVde8mgcXuSsHQkH5cX1pbPLw==", + "version": "22.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", + "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", "dev": true, "optional": true, "requires": { @@ -3123,26 +3123,26 @@ "dev": true }, "puppeteer": { - "version": "23.6.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.6.1.tgz", - "integrity": "sha512-8+ALGQgwXd3P/tGcuSsxTPGDaOQIjcDIm04I5hpWZv/PiN5q8bQNHRUyfYrifT+flnM9aTWCP7tLEzuB6SlIgA==", + "version": "23.7.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.7.1.tgz", + "integrity": "sha512-jS6XehagMvxQ12etwY/4EOYZ0Sm8GAsrtGhdQn4AqpJAyHc3RYl7tGd4QYh/MmShDw8sF9FWYQqGidhoXaqokQ==", "dev": true, "requires": { - "@puppeteer/browsers": "2.4.0", + "@puppeteer/browsers": "2.4.1", "chromium-bidi": "0.8.0", "cosmiconfig": "^9.0.0", "devtools-protocol": "0.0.1354347", - "puppeteer-core": "23.6.1", + "puppeteer-core": "23.7.1", "typed-query-selector": "^2.12.0" } }, "puppeteer-core": { - "version": "23.6.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.6.1.tgz", - "integrity": "sha512-DoNLAzQfGklPauEn33N4h9cM9GubJSINEn+AUMwAXwW159Y9JLk5y34Jsbv4c7kG8P0puOYWV9leu2siMZ/QpQ==", + "version": "23.7.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.7.1.tgz", + "integrity": "sha512-Om/qCZhd+HLoAr7GltrRAZpS3uOXwHu7tXAoDbNcJADHjG2zeAlDArgyIPXYGG4QB/EQUHk13Q6RklNxGM73Pg==", "dev": true, "requires": { - "@puppeteer/browsers": "2.4.0", + "@puppeteer/browsers": "2.4.1", "chromium-bidi": "0.8.0", "debug": "^4.3.7", "devtools-protocol": "0.0.1354347", @@ -3396,9 +3396,9 @@ } }, "tslib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true }, "typed-query-selector": { diff --git a/src/package.json b/src/package.json index a0daef3a346..8da772219eb 100644 --- a/src/package.json +++ b/src/package.json @@ -41,7 +41,7 @@ "node-fetch": "3.3.2", "node-watch": "0.7.4", "prettier": "3.3.3", - "puppeteer": "23.6.1", + "puppeteer": "23.7.1", "rainbow-code": "2.1.7", "recursive-readdir": "2.2.3", "run-script-os": "1.1.6", From 0a512e8f77dd5e94acb7b4dbafa33d0b094442a7 Mon Sep 17 00:00:00 2001 From: Estela Franco Date: Sat, 9 Nov 2024 20:42:19 +0100 Subject: [PATCH 04/19] Jamstack 2024 chapter (#3834) * Add jamstack 2024 sql queries * Add jamstack queries * Update jamstack-overview query * Update jamstack queries * Added Jamstack content * small tweaks and added authors, reviewers, editors, and analysts * small content tweak * Resolved SQL lint issue * Fix sql lint issue * added contributors * Added bio * Formatting * Normalise numbers to 2 significant figures * Retake images * Chapter quotes and prerendered * Rename images * Retake CSS size image * Final tweaks --------- Co-authored-by: Mike Neumegen Co-authored-by: Kevin Farrugia Co-authored-by: Barry Pollard --- sql/2024/jamstack/hugo_astro_next.sql | 236 ++++++++ sql/2024/jamstack/jamstack-overview.sql | 228 +++++++ .../jamstack_distribution_by_rank.sql | 191 ++++++ sql/2024/jamstack/js_frameworks.sql | 238 ++++++++ sql/2024/jamstack/paas.sql | 236 ++++++++ sql/2024/jamstack/ssg.sql | 236 ++++++++ src/config/2024.json | 3 +- src/config/contributors.json | 44 ++ src/content/en/2024/jamstack.md | 562 +++++++++++++++++- .../2024/jamstack/astro-hugo-next-js-size.png | Bin 0 -> 19516 bytes .../astro-hugo-next-transfer-size.png | Bin 0 -> 20645 bytes .../images/2024/jamstack/core-web-vitals.png | Bin 0 -> 19011 bytes src/static/images/2024/jamstack/css-size.png | Bin 0 -> 17825 bytes .../images/2024/jamstack/global-adoption.png | Bin 0 -> 19610 bytes .../jamstack/hybrid-high-traffic-adoption.png | Bin 0 -> 21083 bytes .../hybrid-static-site-generators.png | Bin 0 -> 21349 bytes .../2024/jamstack/javascript-frameworks.png | Bin 0 -> 29849 bytes .../images/2024/jamstack/javascript-size.png | Bin 0 -> 19141 bytes .../2024/jamstack/page-transfer-size.png | Bin 0 -> 20038 bytes .../prerendered-high-traffic-adoption.png | Bin 0 -> 22849 bytes .../prerendered-static-site-generators.png | Bin 0 -> 26241 bytes .../images/2024/jamstack/total-requests.png | Bin 0 -> 17723 bytes .../jamstack/transfer-excluding-css-js.png | Bin 0 -> 22132 bytes 23 files changed, 1960 insertions(+), 14 deletions(-) create mode 100644 sql/2024/jamstack/hugo_astro_next.sql create mode 100644 sql/2024/jamstack/jamstack-overview.sql create mode 100644 sql/2024/jamstack/jamstack_distribution_by_rank.sql create mode 100644 sql/2024/jamstack/js_frameworks.sql create mode 100644 sql/2024/jamstack/paas.sql create mode 100644 sql/2024/jamstack/ssg.sql create mode 100644 src/static/images/2024/jamstack/astro-hugo-next-js-size.png create mode 100644 src/static/images/2024/jamstack/astro-hugo-next-transfer-size.png create mode 100644 src/static/images/2024/jamstack/core-web-vitals.png create mode 100644 src/static/images/2024/jamstack/css-size.png create mode 100644 src/static/images/2024/jamstack/global-adoption.png create mode 100644 src/static/images/2024/jamstack/hybrid-high-traffic-adoption.png create mode 100644 src/static/images/2024/jamstack/hybrid-static-site-generators.png create mode 100644 src/static/images/2024/jamstack/javascript-frameworks.png create mode 100644 src/static/images/2024/jamstack/javascript-size.png create mode 100644 src/static/images/2024/jamstack/page-transfer-size.png create mode 100644 src/static/images/2024/jamstack/prerendered-high-traffic-adoption.png create mode 100644 src/static/images/2024/jamstack/prerendered-static-site-generators.png create mode 100644 src/static/images/2024/jamstack/total-requests.png create mode 100644 src/static/images/2024/jamstack/transfer-excluding-css-js.png diff --git a/sql/2024/jamstack/hugo_astro_next.sql b/sql/2024/jamstack/hugo_astro_next.sql new file mode 100644 index 00000000000..95c3508918a --- /dev/null +++ b/sql/2024/jamstack/hugo_astro_next.sql @@ -0,0 +1,236 @@ +-- Temporary function to extract max-age from cache-control +CREATE TEMPORARY FUNCTION GET_MAX_AGE(response_headers ARRAY>) RETURNS INT64 AS ( + SAFE_CAST( + REGEXP_EXTRACT( + ( + SELECT + value + FROM + UNNEST(response_headers) AS header + WHERE + LOWER(header.name) = 'cache-control' + LIMIT 1 + ), + r'max-age=(\d+)' + ) AS INT64 + ) +); + +-- Temporary function to check if revalidation is required +CREATE TEMPORARY FUNCTION REQUIRES_REVALIDATION(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM + UNNEST(response_headers) AS header + WHERE + (LOWER(header.name) = 'cache-control' AND REGEXP_CONTAINS(LOWER(header.value), r'(must-revalidate|no-cache)')) OR + (LOWER(header.name) IN ('etag', 'last-modified', 'expires')) + ) +); + +-- Temporary function to check for dynamic content via Set-Cookie +CREATE TEMPORARY FUNCTION HAS_SET_COOKIE(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM UNNEST(response_headers) AS header + WHERE LOWER(header.name) = 'set-cookie' + ) +); + +-- Temporary function to check for Vary headers that indicate dynamic content +CREATE TEMPORARY FUNCTION HAS_DYNAMIC_VARY(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM UNNEST(response_headers) AS header + WHERE LOWER(header.name) = 'vary' AND REGEXP_CONTAINS(LOWER(header.value), r'(user-agent|cookie)') + ) +); + +-- Temporary function to detect presence of ETag +CREATE TEMPORARY FUNCTION HAS_ETAG(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM UNNEST(response_headers) AS header + WHERE LOWER(header.name) = 'etag' + ) +); + +-- Temporary function to check if the page uses https +CREATE TEMPORARY FUNCTION IS_HTTPS(url STRING) RETURNS BOOL AS ( + LOWER(SUBSTR(url, 1, 5)) = 'https' +); + +WITH potential_jamstack_sites AS ( + SELECT + p.date, + p.client, + p.page AS url, + IS_HTTPS(p.page) AS is_https, + p.technologies, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) AS ttfb, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.reqTotal') AS INT64) AS total_requests, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.bytesTotal') AS INT64) AS bytes_total, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.bytesJS') AS INT64) AS bytes_js, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.bytesCss') AS INT64) AS bytes_css, + GET_MAX_AGE(r.response_headers) AS max_age, + REQUIRES_REVALIDATION(r.response_headers) AS req_revalidation, + + -- Calculate SSG Score + MAX( + CASE + WHEN tech.technology = 'Next.js' THEN 30 + WHEN tech.technology = 'Nuxt.js' THEN 30 + WHEN tech.technology = 'Gatsby' THEN 30 + WHEN tech.technology = 'Hugo' THEN 100 + WHEN tech.technology = 'Astro' THEN 50 + WHEN tech.technology = 'Jekyll' THEN 100 + WHEN tech.technology = 'Docusaurus' THEN 100 + WHEN tech.technology = 'Hexo' THEN 100 + WHEN tech.technology = 'VuePress' THEN 100 + WHEN tech.technology = 'Gridsome' THEN 100 + WHEN tech.technology = 'Nextra' THEN 70 + WHEN tech.technology = 'Mintlify' THEN 70 + WHEN tech.technology = 'Eleventy' THEN 100 + WHEN tech.technology = 'Scully' THEN 70 + WHEN tech.technology = 'Pelican' THEN 100 + WHEN tech.technology = 'Octopress' THEN 100 + WHEN tech.technology = 'Retype' THEN 100 + WHEN tech.technology = 'Bridgetown' THEN 100 + ELSE 0 + END + ) AS ssg_score, + + -- Calculate PaaS Score + MAX(CASE + WHEN tech.technology = 'Vercel' THEN 30 + WHEN tech.technology = 'Netlify' THEN 30 + WHEN tech.technology = 'GitHub Pages' THEN 100 + WHEN tech.technology = 'Tiiny Host' THEN 100 + ELSE 0 + END) AS paas_score, + + -- Calculate TTFB_Score + CASE + WHEN SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) <= 800 THEN 50 + WHEN SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) > 800 AND SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) <= 1800 THEN 25 + ELSE 0 + END AS ttfb_score, + + -- Calculate Cache Score + (CASE + WHEN GET_MAX_AGE(r.response_headers) >= 604800 AND NOT REQUIRES_REVALIDATION(r.response_headers) THEN 100 + WHEN GET_MAX_AGE(r.response_headers) >= 604800 AND REQUIRES_REVALIDATION(r.response_headers) THEN 50 + ELSE 0 + END) + + (CASE WHEN HAS_ETAG(r.response_headers) THEN 10 ELSE 0 END) AS cache_score, + + -- Penalties for dynamic content + CASE + WHEN HAS_SET_COOKIE(r.response_headers) THEN -10 + ELSE 0 + END + CASE WHEN HAS_DYNAMIC_VARY(r.response_headers) THEN -15 ELSE 0 END AS dynamic_penalty + FROM + `httparchive.all.pages` p, + UNNEST(p.technologies) AS tech + LEFT JOIN + `httparchive.all.requests` r + ON + p.date = r.date AND p.client = r.client AND p.page = r.page + WHERE + p.date IN ('2022-06-01', '2023-06-01', '2024-06-01') AND + p.client = 'mobile' AND + p.is_root_page AND + r.is_root_page AND + r.is_main_document + GROUP BY + p.date, p.client, p.page, p.technologies, r.response_headers, p.summary +), +-- Combine all the information and calculate total_score +total_sites AS ( + SELECT + p.date, + p.client, + p.url, + p.technologies, + p.is_https, + p.total_requests, + p.bytes_total, + p.bytes_js, + p.bytes_css, + p.ssg_score, + p.paas_score, + p.ttfb_score, + p.max_age, + p.req_revalidation, + p.cache_score, + p.dynamic_penalty, + + -- Calculate Total_Score as the sum of Cache_Score, TTFB_Score, SSG_Score, and paas_score, minus dynamic penalties + ( + p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty + ) AS total_score, + ( + CASE + WHEN (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) >= 100 THEN 'jamstack' + WHEN (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) >= 50 AND + (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) < 100 + THEN 'jamstacky' + WHEN (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) < 50 THEN 'no-jamstack' + ELSE 'no-jamstack' + END + ) AS is_jamstack + FROM + potential_jamstack_sites p +), + +filtered_sites AS ( + SELECT + date, + url, + tech.technology AS technology, + is_jamstack, + bytes_js, + bytes_css, + bytes_total, + total_requests + FROM + total_sites, + UNNEST(technologies) AS tech + WHERE + EXISTS ( + SELECT 1 + FROM + UNNEST(tech.categories) AS category + ) AND + is_jamstack IN ('jamstack') + GROUP BY + date, + url, + is_jamstack, + technology, + bytes_js, + bytes_css, + bytes_total, + total_requests + ORDER BY + date ASC +) + +SELECT + date, + technology, + APPROX_QUANTILES(ROUND(bytes_js / 1024, 2), 1000)[OFFSET(500)] AS median_js_kb, + APPROX_QUANTILES(ROUND(bytes_css / 1024, 2), 1000)[OFFSET(500)] AS median_css_kb, + APPROX_QUANTILES(ROUND(bytes_total / 1024, 2), 1000)[OFFSET(500)] AS median_total_weight_kb, + APPROX_QUANTILES(total_requests, 1000)[OFFSET(500)] AS median_requests, + COUNT(DISTINCT url) AS pages +FROM + filtered_sites +WHERE + technology IN ('Hugo', 'Next.js', 'Astro') +GROUP BY + date, + technology +ORDER BY + date ASC, + pages DESC diff --git a/sql/2024/jamstack/jamstack-overview.sql b/sql/2024/jamstack/jamstack-overview.sql new file mode 100644 index 00000000000..6aed1b36b39 --- /dev/null +++ b/sql/2024/jamstack/jamstack-overview.sql @@ -0,0 +1,228 @@ +-- Temporary function to extract max-age from cache-control +CREATE TEMPORARY FUNCTION GET_MAX_AGE(response_headers ARRAY>) RETURNS INT64 AS ( + SAFE_CAST( + REGEXP_EXTRACT( + ( + SELECT + value + FROM + UNNEST(response_headers) AS header + WHERE + LOWER(header.name) = 'cache-control' + LIMIT 1 + ), + r'max-age=(\d+)' + ) AS INT64 + ) +); + +-- Temporary function to check if revalidation is required +CREATE TEMPORARY FUNCTION REQUIRES_REVALIDATION(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM + UNNEST(response_headers) AS header + WHERE + (LOWER(header.name) = 'cache-control' AND REGEXP_CONTAINS(LOWER(header.value), r'(must-revalidate|no-cache)')) OR + (LOWER(header.name) IN ('etag', 'last-modified', 'expires')) + ) +); + +-- Temporary function to check for dynamic content via Set-Cookie +CREATE TEMPORARY FUNCTION HAS_SET_COOKIE(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM UNNEST(response_headers) AS header + WHERE LOWER(header.name) = 'set-cookie' + ) +); + +-- Temporary function to check for Vary headers that indicate dynamic content +CREATE TEMPORARY FUNCTION HAS_DYNAMIC_VARY(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM UNNEST(response_headers) AS header + WHERE LOWER(header.name) = 'vary' AND REGEXP_CONTAINS(LOWER(header.value), r'(user-agent|cookie)') + ) +); + +-- Temporary function to detect presence of ETag +CREATE TEMPORARY FUNCTION HAS_ETAG(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM UNNEST(response_headers) AS header + WHERE LOWER(header.name) = 'etag' + ) +); + +-- Temporary function to check if the page uses https +CREATE TEMPORARY FUNCTION IS_HTTPS(url STRING) RETURNS BOOL AS ( + LOWER(SUBSTR(url, 1, 5)) = 'https' +); + +-- Temporary function that checks if a CWV is good +CREATE TEMP FUNCTION IS_GOOD (good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS ( + SAFE_DIVIDE(good, (good + needs_improvement + poor)) >= 0.75 +); + +WITH potential_jamstack_sites AS ( + SELECT + p.date, + p.client, + p.page AS url, + IS_HTTPS(p.page) AS is_https, + p.technologies, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) AS ttfb, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.reqTotal') AS INT64) AS total_requests, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.bytesTotal') AS INT64) AS bytes_total, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.bytesJS') AS INT64) AS bytes_js, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.bytesCss') AS INT64) AS bytes_css, + GET_MAX_AGE(r.response_headers) AS max_age, + REQUIRES_REVALIDATION(r.response_headers) AS req_revalidation, + + -- Calculate SSG Score + MAX( + CASE + WHEN tech.technology = 'Next.js' THEN 30 + WHEN tech.technology = 'Nuxt.js' THEN 30 + WHEN tech.technology = 'Gatsby' THEN 30 + WHEN tech.technology = 'Hugo' THEN 100 + WHEN tech.technology = 'Astro' THEN 50 + WHEN tech.technology = 'Jekyll' THEN 100 + WHEN tech.technology = 'Docusaurus' THEN 100 + WHEN tech.technology = 'Hexo' THEN 100 + WHEN tech.technology = 'VuePress' THEN 100 + WHEN tech.technology = 'Gridsome' THEN 100 + WHEN tech.technology = 'Nextra' THEN 70 + WHEN tech.technology = 'Mintlify' THEN 70 + WHEN tech.technology = 'Eleventy' THEN 100 + WHEN tech.technology = 'Scully' THEN 70 + WHEN tech.technology = 'Pelican' THEN 100 + WHEN tech.technology = 'Octopress' THEN 100 + WHEN tech.technology = 'Retype' THEN 100 + WHEN tech.technology = 'Bridgetown' THEN 100 + ELSE 0 + END + ) AS ssg_score, + + -- Calculate PaaS Score + MAX(CASE + WHEN tech.technology = 'Vercel' THEN 30 + WHEN tech.technology = 'Netlify' THEN 30 + WHEN tech.technology = 'GitHub Pages' THEN 100 + WHEN tech.technology = 'Tiiny Host' THEN 100 + ELSE 0 + END) AS paas_score, + + -- Calculate TTFB_Score + CASE + WHEN SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) <= 800 THEN 50 + WHEN SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) > 800 AND SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) <= 1800 THEN 25 + ELSE 0 + END AS ttfb_score, + + -- Calculate Cache Score + (CASE + WHEN GET_MAX_AGE(r.response_headers) >= 604800 AND NOT REQUIRES_REVALIDATION(r.response_headers) THEN 100 + WHEN GET_MAX_AGE(r.response_headers) >= 604800 AND REQUIRES_REVALIDATION(r.response_headers) THEN 50 + ELSE 0 + END) + + (CASE WHEN HAS_ETAG(r.response_headers) THEN 10 ELSE 0 END) AS cache_score, + + -- Penalties for dynamic content + CASE + WHEN HAS_SET_COOKIE(r.response_headers) THEN -10 + ELSE 0 + END + CASE WHEN HAS_DYNAMIC_VARY(r.response_headers) THEN -15 ELSE 0 END AS dynamic_penalty + FROM + `httparchive.all.pages` p, + UNNEST(p.technologies) AS tech + LEFT JOIN + `httparchive.all.requests` r + ON + p.date = r.date AND p.client = r.client AND p.page = r.page + WHERE + p.date IN ('2022-06-01', '2023-06-01', '2024-06-01') AND + p.client = 'mobile' AND + p.is_root_page AND + r.is_root_page AND + r.is_main_document + GROUP BY + p.date, p.client, p.page, p.technologies, r.response_headers, p.summary +), +-- Combine all the information and calculate total_score +total_sites AS ( + SELECT + p.date, + p.client, + p.url, + p.is_https, + p.total_requests, + p.bytes_total, + p.bytes_js, + p.bytes_css, + p.ssg_score, + p.paas_score, + p.ttfb_score, + p.max_age, + p.req_revalidation, + p.cache_score, + p.dynamic_penalty, + ( + IS_GOOD(c.fast_inp, c.avg_inp, c.slow_inp) IS NOT FALSE AND + IS_GOOD(c.fast_lcp, c.avg_lcp, c.slow_lcp) AND + IS_GOOD(c.small_cls, c.medium_cls, c.large_cls)) AS cwv_ok, + c.p75_lcp, + c.p75_cls, + c.p75_inp, + + -- Calculate Total_Score as the sum of Cache_Score, TTFB_Score, SSG_Score, and paas_score, minus dynamic penalties + ( + p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty + ) AS total_score, + ( + CASE + WHEN (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) >= 100 THEN 'jamstack' + WHEN (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) >= 50 AND + (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) < 100 + THEN 'jamstacky' + WHEN (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) < 50 THEN 'no-jamstack' + ELSE 'no-jamstack' + END + ) AS is_jamstack + FROM + potential_jamstack_sites p + JOIN + `chrome-ux-report.materialized.device_summary` c + ON + p.url = CONCAT(c.origin, '/') AND + p.date = c.date AND + ( + (p.client = 'mobile' AND c.device = 'phone') OR + (p.client = 'desktop' AND c.device = 'desktop') OR + c.device IS NULL + ) +) + +SELECT + date, + client, + is_jamstack, + APPROX_QUANTILES(ROUND(bytes_js / 1024, 2), 1000)[OFFSET(500)] AS median_js_kb, + APPROX_QUANTILES(ROUND(bytes_css / 1024, 2), 1000)[OFFSET(500)] AS median_css_kb, + APPROX_QUANTILES(ROUND(bytes_total / 1024, 2), 1000)[OFFSET(500)] AS median_total_weight_kb, + APPROX_QUANTILES(total_requests, 1000)[OFFSET(500)] AS median_requests, + COUNTIF(cwv_ok) AS total_cwv_ok, + COUNTIF(is_https) AS total_https, + APPROX_QUANTILES(p75_lcp, 1000)[OFFSET(500)] AS median_lcp, + APPROX_QUANTILES(p75_inp, 1000)[OFFSET(500)] AS median_inp, + CAST(APPROX_QUANTILES(p75_cls, 1000)[OFFSET(500)] AS NUMERIC) AS median_cls, + COUNT(0) AS pages +FROM + total_sites +GROUP BY + date, + client, + is_jamstack +ORDER BY + date ASC diff --git a/sql/2024/jamstack/jamstack_distribution_by_rank.sql b/sql/2024/jamstack/jamstack_distribution_by_rank.sql new file mode 100644 index 00000000000..e60fa566689 --- /dev/null +++ b/sql/2024/jamstack/jamstack_distribution_by_rank.sql @@ -0,0 +1,191 @@ +-- Temporary function to extract max-age from cache-control +CREATE TEMPORARY FUNCTION GET_MAX_AGE(response_headers ARRAY>) RETURNS INT64 AS ( + SAFE_CAST( + REGEXP_EXTRACT( + ( + SELECT + value + FROM + UNNEST(response_headers) AS header + WHERE + LOWER(header.name) = 'cache-control' + LIMIT 1 + ), + r'max-age=(\d+)' + ) AS INT64 + ) +); + +-- Temporary function to check if revalidation is required +CREATE TEMPORARY FUNCTION REQUIRES_REVALIDATION(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM + UNNEST(response_headers) AS header + WHERE + (LOWER(header.name) = 'cache-control' AND REGEXP_CONTAINS(LOWER(header.value), r'(must-revalidate|no-cache)')) OR + (LOWER(header.name) IN ('etag', 'last-modified', 'expires')) + ) +); + +-- Temporary function to check for dynamic content via Set-Cookie +CREATE TEMPORARY FUNCTION HAS_SET_COOKIE(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM UNNEST(response_headers) AS header + WHERE LOWER(header.name) = 'set-cookie' + ) +); + +-- Temporary function to check for Vary headers that indicate dynamic content +CREATE TEMPORARY FUNCTION HAS_DYNAMIC_VARY(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM UNNEST(response_headers) AS header + WHERE LOWER(header.name) = 'vary' AND REGEXP_CONTAINS(LOWER(header.value), r'(user-agent|cookie)') + ) +); + +-- Temporary function to detect presence of ETag +CREATE TEMPORARY FUNCTION HAS_ETAG(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM UNNEST(response_headers) AS header + WHERE LOWER(header.name) = 'etag' + ) +); + +WITH potential_jamstack_sites AS ( + SELECT + p.date, + p.client, + p.rank, + p.page AS url, + p.technologies, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) AS ttfb, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.reqTotal') AS INT64) AS total_requests, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.bytesTotal') AS INT64) AS bytes_total, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.bytesJS') AS INT64) AS bytes_js, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.bytesCss') AS INT64) AS bytes_css, + GET_MAX_AGE(r.response_headers) AS max_age, + REQUIRES_REVALIDATION(r.response_headers) AS req_revalidation, + + -- Calculate SSG Score + MAX( + CASE + WHEN tech.technology = 'Next.js' THEN 30 + WHEN tech.technology = 'Nuxt.js' THEN 30 + WHEN tech.technology = 'Gatsby' THEN 30 + WHEN tech.technology = 'Hugo' THEN 100 + WHEN tech.technology = 'Astro' THEN 50 + WHEN tech.technology = 'Jekyll' THEN 100 + WHEN tech.technology = 'Docusaurus' THEN 100 + WHEN tech.technology = 'Hexo' THEN 100 + WHEN tech.technology = 'VuePress' THEN 100 + WHEN tech.technology = 'Gridsome' THEN 100 + WHEN tech.technology = 'Nextra' THEN 70 + WHEN tech.technology = 'Mintlify' THEN 70 + WHEN tech.technology = 'Eleventy' THEN 100 + WHEN tech.technology = 'Scully' THEN 70 + WHEN tech.technology = 'Pelican' THEN 100 + WHEN tech.technology = 'Octopress' THEN 100 + WHEN tech.technology = 'Retype' THEN 100 + WHEN tech.technology = 'Bridgetown' THEN 100 + ELSE 0 + END + ) AS ssg_score, + + -- Calculate PaaS Score + MAX(CASE + WHEN tech.technology = 'Vercel' THEN 30 + WHEN tech.technology = 'Netlify' THEN 30 + WHEN tech.technology = 'GitHub Pages' THEN 100 + WHEN tech.technology = 'Tiiny Host' THEN 100 + ELSE 0 + END) AS paas_score, + + -- Calculate TTFB_Score + CASE + WHEN SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) <= 800 THEN 50 + WHEN SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) > 800 AND SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) <= 1800 THEN 25 + ELSE 0 + END AS ttfb_score, + + -- Calculate Cache Score + (CASE + WHEN GET_MAX_AGE(r.response_headers) >= 604800 AND NOT REQUIRES_REVALIDATION(r.response_headers) THEN 100 + WHEN GET_MAX_AGE(r.response_headers) >= 604800 AND REQUIRES_REVALIDATION(r.response_headers) THEN 50 + ELSE 0 + END) + + (CASE WHEN HAS_ETAG(r.response_headers) THEN 10 ELSE 0 END) AS cache_score, + + -- Penalties for dynamic content + CASE + WHEN HAS_SET_COOKIE(r.response_headers) THEN -10 + ELSE 0 + END + CASE WHEN HAS_DYNAMIC_VARY(r.response_headers) THEN -15 ELSE 0 END AS dynamic_penalty + FROM + `httparchive.all.pages` p, + UNNEST(p.technologies) AS tech + LEFT JOIN + `httparchive.all.requests` r + ON + p.date = r.date AND p.client = r.client AND p.page = r.page + WHERE + p.date IN ('2022-06-01', '2023-06-01', '2024-06-01') AND + p.client = 'mobile' AND + p.is_root_page AND + r.is_root_page AND + r.is_main_document + GROUP BY + p.date, p.client, p.rank, p.page, p.technologies, r.response_headers, p.summary +), +-- Combine all the information and calculate total_score +total_sites AS ( + SELECT + p.date, + p.url, + p.client, + p.rank, + p.total_requests, + p.bytes_total, + p.bytes_js, + p.bytes_css, + p.ssg_score, + p.paas_score, + p.ttfb_score, + p.max_age, + p.req_revalidation, + p.cache_score, + p.dynamic_penalty, + + -- Calculate Total_Score as the sum of Cache_Score, TTFB_Score, SSG_Score, and paas_score, minus dynamic penalties + ( + p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty + ) AS total_score, + ( + CASE + WHEN (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) >= 100 THEN 'jamstack' + WHEN (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) >= 50 AND + (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) < 100 + THEN 'jamstacky' + WHEN (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) < 50 THEN 'no-jamstack' + ELSE 'no-jamstack' + END + ) AS is_jamstack + FROM + potential_jamstack_sites p +) + +SELECT + date, + client, + rank, + is_jamstack, + COUNT(0) AS pages +FROM + total_sites +GROUP BY + date, client, rank, is_jamstack +ORDER BY + date ASC diff --git a/sql/2024/jamstack/js_frameworks.sql b/sql/2024/jamstack/js_frameworks.sql new file mode 100644 index 00000000000..62a82000fd2 --- /dev/null +++ b/sql/2024/jamstack/js_frameworks.sql @@ -0,0 +1,238 @@ +-- Temporary function to extract max-age from cache-control +CREATE TEMPORARY FUNCTION GET_MAX_AGE(response_headers ARRAY>) RETURNS INT64 AS ( + SAFE_CAST( + REGEXP_EXTRACT( + ( + SELECT + value + FROM + UNNEST(response_headers) AS header + WHERE + LOWER(header.name) = 'cache-control' + LIMIT 1 + ), + r'max-age=(\d+)' + ) AS INT64 + ) +); + +-- Temporary function to check if revalidation is required +CREATE TEMPORARY FUNCTION REQUIRES_REVALIDATION(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM + UNNEST(response_headers) AS header + WHERE + (LOWER(header.name) = 'cache-control' AND REGEXP_CONTAINS(LOWER(header.value), r'(must-revalidate|no-cache)')) OR + (LOWER(header.name) IN ('etag', 'last-modified', 'expires')) + ) +); + +-- Temporary function to check for dynamic content via Set-Cookie +CREATE TEMPORARY FUNCTION HAS_SET_COOKIE(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM UNNEST(response_headers) AS header + WHERE LOWER(header.name) = 'set-cookie' + ) +); + +-- Temporary function to check for Vary headers that indicate dynamic content +CREATE TEMPORARY FUNCTION HAS_DYNAMIC_VARY(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM UNNEST(response_headers) AS header + WHERE LOWER(header.name) = 'vary' AND REGEXP_CONTAINS(LOWER(header.value), r'(user-agent|cookie)') + ) +); + +-- Temporary function to detect presence of ETag +CREATE TEMPORARY FUNCTION HAS_ETAG(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM UNNEST(response_headers) AS header + WHERE LOWER(header.name) = 'etag' + ) +); + +-- Temporary function to check if the page uses https +CREATE TEMPORARY FUNCTION IS_HTTPS(url STRING) RETURNS BOOL AS ( + LOWER(SUBSTR(url, 1, 5)) = 'https' +); + +WITH potential_jamstack_sites AS ( + SELECT + p.date, + p.client, + p.page AS url, + IS_HTTPS(p.page) AS is_https, + p.technologies, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) AS ttfb, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.reqTotal') AS INT64) AS total_requests, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.bytesTotal') AS INT64) AS bytes_total, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.bytesJS') AS INT64) AS bytes_js, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.bytesCss') AS INT64) AS bytes_css, + GET_MAX_AGE(r.response_headers) AS max_age, + REQUIRES_REVALIDATION(r.response_headers) AS req_revalidation, + + -- Calculate SSG Score + MAX( + CASE + WHEN tech.technology = 'Next.js' THEN 30 + WHEN tech.technology = 'Nuxt.js' THEN 30 + WHEN tech.technology = 'Gatsby' THEN 30 + WHEN tech.technology = 'Hugo' THEN 100 + WHEN tech.technology = 'Astro' THEN 50 + WHEN tech.technology = 'Jekyll' THEN 100 + WHEN tech.technology = 'Docusaurus' THEN 100 + WHEN tech.technology = 'Hexo' THEN 100 + WHEN tech.technology = 'VuePress' THEN 100 + WHEN tech.technology = 'Gridsome' THEN 100 + WHEN tech.technology = 'Nextra' THEN 70 + WHEN tech.technology = 'Mintlify' THEN 70 + WHEN tech.technology = 'Eleventy' THEN 100 + WHEN tech.technology = 'Scully' THEN 70 + WHEN tech.technology = 'Pelican' THEN 100 + WHEN tech.technology = 'Octopress' THEN 100 + WHEN tech.technology = 'Retype' THEN 100 + WHEN tech.technology = 'Bridgetown' THEN 100 + ELSE 0 + END + ) AS ssg_score, + + -- Calculate PaaS Score + MAX(CASE + WHEN tech.technology = 'Vercel' THEN 30 + WHEN tech.technology = 'Netlify' THEN 30 + WHEN tech.technology = 'GitHub Pages' THEN 100 + WHEN tech.technology = 'Tiiny Host' THEN 100 + ELSE 0 + END) AS paas_score, + + -- Calculate TTFB_Score + CASE + WHEN SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) <= 800 THEN 50 + WHEN SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) > 800 AND SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) <= 1800 THEN 25 + ELSE 0 + END AS ttfb_score, + + -- Calculate Cache Score + (CASE + WHEN GET_MAX_AGE(r.response_headers) >= 604800 AND NOT REQUIRES_REVALIDATION(r.response_headers) THEN 100 + WHEN GET_MAX_AGE(r.response_headers) >= 604800 AND REQUIRES_REVALIDATION(r.response_headers) THEN 50 + ELSE 0 + END) + + (CASE WHEN HAS_ETAG(r.response_headers) THEN 10 ELSE 0 END) AS cache_score, + + -- Penalties for dynamic content + CASE + WHEN HAS_SET_COOKIE(r.response_headers) THEN -10 + ELSE 0 + END + CASE WHEN HAS_DYNAMIC_VARY(r.response_headers) THEN -15 ELSE 0 END AS dynamic_penalty + FROM + `httparchive.all.pages` p, + UNNEST(p.technologies) AS tech + LEFT JOIN + `httparchive.all.requests` r + ON + p.date = r.date AND + p.client = r.client AND + p.page = r.page + WHERE + p.date IN ('2022-06-01', '2023-06-01', '2024-06-01') AND + p.client = 'mobile' AND + p.is_root_page AND + r.is_root_page AND + r.is_main_document + GROUP BY + p.date, + p.client, + p.page, + p.technologies, + r.response_headers, + p.summary +), + +-- Combine all the information and calculate total_score +total_sites AS ( + SELECT + p.date, + p.client, + p.url, + p.technologies, + p.is_https, + p.total_requests, + p.bytes_total, + p.bytes_js, + p.bytes_css, + p.ssg_score, + p.paas_score, + p.ttfb_score, + p.max_age, + p.req_revalidation, + p.cache_score, + p.dynamic_penalty, + + -- Calculate Total_Score as the sum of Cache_Score, TTFB_Score, SSG_Score, and paas_score, minus dynamic penalties + ( + p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty + ) AS total_score, + ( + CASE + WHEN (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) >= 100 THEN 'jamstack' + WHEN (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) >= 50 AND + (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) < 100 + THEN 'jamstacky' + WHEN (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) < 50 THEN 'no-jamstack' + ELSE 'no-jamstack' + END + ) AS is_jamstack + FROM + potential_jamstack_sites p +), + +filtered_sites AS ( + SELECT + date, + url, + tech.technology AS technology, + is_jamstack + FROM + total_sites, + UNNEST(technologies) AS tech + WHERE + ( + EXISTS ( + SELECT 1 + FROM UNNEST(tech.categories) AS category + WHERE category = 'JavaScript frameworks' + ) + OR + tech.technology = 'Next.js' + ) AND + is_jamstack IN ('jamstack', 'jamstacky') + GROUP BY + date, + url, + is_jamstack, + tech.technology + ORDER BY + date ASC +) + +SELECT + date, + technology, + is_jamstack, + COUNT(DISTINCT url) AS pages +FROM + filtered_sites +GROUP BY + date, + is_jamstack, + technology +HAVING + COUNT(DISTINCT url) >= 10 +ORDER BY + date ASC, + pages DESC diff --git a/sql/2024/jamstack/paas.sql b/sql/2024/jamstack/paas.sql new file mode 100644 index 00000000000..2d558f923b9 --- /dev/null +++ b/sql/2024/jamstack/paas.sql @@ -0,0 +1,236 @@ +-- Temporary function to extract max-age from cache-control +CREATE TEMPORARY FUNCTION GET_MAX_AGE(response_headers ARRAY>) RETURNS INT64 AS ( + SAFE_CAST( + REGEXP_EXTRACT( + ( + SELECT + value + FROM + UNNEST(response_headers) AS header + WHERE + LOWER(header.name) = 'cache-control' + LIMIT 1 + ), + r'max-age=(\d+)' + ) AS INT64 + ) +); + +-- Temporary function to check if revalidation is required +CREATE TEMPORARY FUNCTION REQUIRES_REVALIDATION(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM + UNNEST(response_headers) AS header + WHERE + (LOWER(header.name) = 'cache-control' AND REGEXP_CONTAINS(LOWER(header.value), r'(must-revalidate|no-cache)')) OR + (LOWER(header.name) IN ('etag', 'last-modified', 'expires')) + ) +); + +-- Temporary function to check for dynamic content via Set-Cookie +CREATE TEMPORARY FUNCTION HAS_SET_COOKIE(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM UNNEST(response_headers) AS header + WHERE LOWER(header.name) = 'set-cookie' + ) +); + +-- Temporary function to check for Vary headers that indicate dynamic content +CREATE TEMPORARY FUNCTION HAS_DYNAMIC_VARY(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM UNNEST(response_headers) AS header + WHERE LOWER(header.name) = 'vary' AND REGEXP_CONTAINS(LOWER(header.value), r'(user-agent|cookie)') + ) +); + +-- Temporary function to detect presence of ETag +CREATE TEMPORARY FUNCTION HAS_ETAG(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM UNNEST(response_headers) AS header + WHERE LOWER(header.name) = 'etag' + ) +); + +-- Temporary function to check if the page uses https +CREATE TEMPORARY FUNCTION IS_HTTPS(url STRING) RETURNS BOOL AS ( + LOWER(SUBSTR(url, 1, 5)) = 'https' +); + +WITH potential_jamstack_sites AS ( + SELECT + p.date, + p.client, + p.page AS url, + IS_HTTPS(p.page) AS is_https, + p.technologies, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) AS ttfb, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.reqTotal') AS INT64) AS total_requests, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.bytesTotal') AS INT64) AS bytes_total, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.bytesJS') AS INT64) AS bytes_js, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.bytesCss') AS INT64) AS bytes_css, + GET_MAX_AGE(r.response_headers) AS max_age, + REQUIRES_REVALIDATION(r.response_headers) AS req_revalidation, + + -- Calculate SSG Score + MAX( + CASE + WHEN tech.technology = 'Next.js' THEN 30 + WHEN tech.technology = 'Nuxt.js' THEN 30 + WHEN tech.technology = 'Gatsby' THEN 30 + WHEN tech.technology = 'Hugo' THEN 100 + WHEN tech.technology = 'Astro' THEN 50 + WHEN tech.technology = 'Jekyll' THEN 100 + WHEN tech.technology = 'Docusaurus' THEN 100 + WHEN tech.technology = 'Hexo' THEN 100 + WHEN tech.technology = 'VuePress' THEN 100 + WHEN tech.technology = 'Gridsome' THEN 100 + WHEN tech.technology = 'Nextra' THEN 70 + WHEN tech.technology = 'Mintlify' THEN 70 + WHEN tech.technology = 'Eleventy' THEN 100 + WHEN tech.technology = 'Scully' THEN 70 + WHEN tech.technology = 'Pelican' THEN 100 + WHEN tech.technology = 'Octopress' THEN 100 + WHEN tech.technology = 'Retype' THEN 100 + WHEN tech.technology = 'Bridgetown' THEN 100 + ELSE 0 + END + ) AS ssg_score, + + -- Calculate PaaS Score + MAX(CASE + WHEN tech.technology = 'Vercel' THEN 30 + WHEN tech.technology = 'Netlify' THEN 30 + WHEN tech.technology = 'GitHub Pages' THEN 100 + WHEN tech.technology = 'Tiiny Host' THEN 100 + ELSE 0 + END) AS paas_score, + + -- Calculate TTFB_Score + CASE + WHEN SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) <= 800 THEN 50 + WHEN SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) > 800 AND SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) <= 1800 THEN 25 + ELSE 0 + END AS ttfb_score, + + -- Calculate Cache Score + (CASE + WHEN GET_MAX_AGE(r.response_headers) >= 604800 AND NOT REQUIRES_REVALIDATION(r.response_headers) THEN 100 + WHEN GET_MAX_AGE(r.response_headers) >= 604800 AND REQUIRES_REVALIDATION(r.response_headers) THEN 50 + ELSE 0 + END) + + (CASE WHEN HAS_ETAG(r.response_headers) THEN 10 ELSE 0 END) AS cache_score, + + -- Penalties for dynamic content + CASE + WHEN HAS_SET_COOKIE(r.response_headers) THEN -10 + ELSE 0 + END + CASE WHEN HAS_DYNAMIC_VARY(r.response_headers) THEN -15 ELSE 0 END AS dynamic_penalty + FROM + `httparchive.all.pages` p, + UNNEST(p.technologies) AS tech + LEFT JOIN + `httparchive.all.requests` r + ON + p.date = r.date AND + p.client = r.client AND + p.page = r.page + WHERE + p.date IN ('2022-06-01', '2023-06-01', '2024-06-01') AND + p.client = 'mobile' AND + p.is_root_page AND + r.is_root_page AND + r.is_main_document + GROUP BY + p.date, + p.client, + p.page, + p.technologies, + r.response_headers, + p.summary +), + +-- Combine all the information and calculate total_score +total_sites AS ( + SELECT + p.date, + p.client, + p.url, + p.technologies, + p.is_https, + p.total_requests, + p.bytes_total, + p.bytes_js, + p.bytes_css, + p.ssg_score, + p.paas_score, + p.ttfb_score, + p.max_age, + p.req_revalidation, + p.cache_score, + p.dynamic_penalty, + + -- Calculate Total_Score as the sum of Cache_Score, TTFB_Score, SSG_Score, and paas_score, minus dynamic penalties + ( + p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty + ) AS total_score, + ( + CASE + WHEN (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) >= 100 THEN 'jamstack' + WHEN (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) >= 50 AND + (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) < 100 + THEN 'jamstacky' + WHEN (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) < 50 THEN 'no-jamstack' + ELSE 'no-jamstack' + END + ) AS is_jamstack + FROM + potential_jamstack_sites p +), + +filtered_sites AS ( + SELECT + date, + url, + tech.technology AS technology, + is_jamstack + FROM + total_sites, + UNNEST(technologies) AS tech + WHERE + EXISTS ( + SELECT 1 + FROM + UNNEST(tech.categories) AS category + WHERE + category = 'PaaS' + ) AND + is_jamstack IN ('jamstack', 'jamstacky') + GROUP BY + date, + url, + is_jamstack, + tech + ORDER BY + date ASC +) + +SELECT + date, + technology, + is_jamstack, + COUNT(DISTINCT url) AS pages +FROM + filtered_sites +GROUP BY + date, + is_jamstack, + technology +HAVING + COUNT(DISTINCT url) >= 10 +ORDER BY + date ASC, + pages DESC diff --git a/sql/2024/jamstack/ssg.sql b/sql/2024/jamstack/ssg.sql new file mode 100644 index 00000000000..c04bfde4b63 --- /dev/null +++ b/sql/2024/jamstack/ssg.sql @@ -0,0 +1,236 @@ +-- Temporary function to extract max-age from cache-control +CREATE TEMPORARY FUNCTION GET_MAX_AGE(response_headers ARRAY>) RETURNS INT64 AS ( + SAFE_CAST( + REGEXP_EXTRACT( + ( + SELECT + value + FROM + UNNEST(response_headers) AS header + WHERE + LOWER(header.name) = 'cache-control' + LIMIT 1 + ), + r'max-age=(\d+)' + ) AS INT64 + ) +); + +-- Temporary function to check if revalidation is required +CREATE TEMPORARY FUNCTION REQUIRES_REVALIDATION(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM + UNNEST(response_headers) AS header + WHERE + (LOWER(header.name) = 'cache-control' AND REGEXP_CONTAINS(LOWER(header.value), r'(must-revalidate|no-cache)')) OR + (LOWER(header.name) IN ('etag', 'last-modified', 'expires')) + ) +); + +-- Temporary function to check for dynamic content via Set-Cookie +CREATE TEMPORARY FUNCTION HAS_SET_COOKIE(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM UNNEST(response_headers) AS header + WHERE LOWER(header.name) = 'set-cookie' + ) +); + +-- Temporary function to check for Vary headers that indicate dynamic content +CREATE TEMPORARY FUNCTION HAS_DYNAMIC_VARY(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM UNNEST(response_headers) AS header + WHERE LOWER(header.name) = 'vary' AND REGEXP_CONTAINS(LOWER(header.value), r'(user-agent|cookie)') + ) +); + +-- Temporary function to detect presence of ETag +CREATE TEMPORARY FUNCTION HAS_ETAG(response_headers ARRAY>) RETURNS BOOL AS ( + EXISTS( + SELECT 1 + FROM UNNEST(response_headers) AS header + WHERE LOWER(header.name) = 'etag' + ) +); + +-- Temporary function to check if the page uses https +CREATE TEMPORARY FUNCTION IS_HTTPS(url STRING) RETURNS BOOL AS ( + LOWER(SUBSTR(url, 1, 5)) = 'https' +); + +WITH potential_jamstack_sites AS ( + SELECT + p.date, + p.client, + p.page AS url, + IS_HTTPS(p.page) AS is_https, + p.technologies, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) AS ttfb, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.reqTotal') AS INT64) AS total_requests, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.bytesTotal') AS INT64) AS bytes_total, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.bytesJS') AS INT64) AS bytes_js, + SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.bytesCss') AS INT64) AS bytes_css, + GET_MAX_AGE(r.response_headers) AS max_age, + REQUIRES_REVALIDATION(r.response_headers) AS req_revalidation, + + -- Calculate SSG Score + MAX( + CASE + WHEN tech.technology = 'Next.js' THEN 30 + WHEN tech.technology = 'Nuxt.js' THEN 30 + WHEN tech.technology = 'Gatsby' THEN 30 + WHEN tech.technology = 'Hugo' THEN 100 + WHEN tech.technology = 'Astro' THEN 50 + WHEN tech.technology = 'Jekyll' THEN 100 + WHEN tech.technology = 'Docusaurus' THEN 100 + WHEN tech.technology = 'Hexo' THEN 100 + WHEN tech.technology = 'VuePress' THEN 100 + WHEN tech.technology = 'Gridsome' THEN 100 + WHEN tech.technology = 'Nextra' THEN 70 + WHEN tech.technology = 'Mintlify' THEN 70 + WHEN tech.technology = 'Eleventy' THEN 100 + WHEN tech.technology = 'Scully' THEN 70 + WHEN tech.technology = 'Pelican' THEN 100 + WHEN tech.technology = 'Octopress' THEN 100 + WHEN tech.technology = 'Retype' THEN 100 + WHEN tech.technology = 'Bridgetown' THEN 100 + ELSE 0 + END + ) AS ssg_score, + + -- Calculate PaaS Score + MAX(CASE + WHEN tech.technology = 'Vercel' THEN 30 + WHEN tech.technology = 'Netlify' THEN 30 + WHEN tech.technology = 'GitHub Pages' THEN 100 + WHEN tech.technology = 'Tiiny Host' THEN 100 + ELSE 0 + END) AS paas_score, + + -- Calculate TTFB_Score + CASE + WHEN SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) <= 800 THEN 50 + WHEN SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) > 800 AND SAFE_CAST(JSON_EXTRACT_SCALAR(p.summary, '$.TTFB') AS INT64) <= 1800 THEN 25 + ELSE 0 + END AS ttfb_score, + + -- Calculate Cache Score + (CASE + WHEN GET_MAX_AGE(r.response_headers) >= 604800 AND NOT REQUIRES_REVALIDATION(r.response_headers) THEN 100 + WHEN GET_MAX_AGE(r.response_headers) >= 604800 AND REQUIRES_REVALIDATION(r.response_headers) THEN 50 + ELSE 0 + END) + + (CASE WHEN HAS_ETAG(r.response_headers) THEN 10 ELSE 0 END) AS cache_score, + + -- Penalties for dynamic content + CASE + WHEN HAS_SET_COOKIE(r.response_headers) THEN -10 + ELSE 0 + END + CASE WHEN HAS_DYNAMIC_VARY(r.response_headers) THEN -15 ELSE 0 END AS dynamic_penalty + FROM + `httparchive.all.pages` p, + UNNEST(p.technologies) AS tech + LEFT JOIN + `httparchive.all.requests` r + ON + p.date = r.date AND + p.client = r.client AND + p.page = r.page + WHERE + p.date IN ('2022-06-01', '2023-06-01', '2024-06-01') AND + p.client = 'mobile' AND + p.is_root_page AND + r.is_root_page AND + r.is_main_document + GROUP BY + p.date, + p.client, + p.page, + p.technologies, + r.response_headers, + p.summary +), + +-- Combine all the information and calculate total_score +total_sites AS ( + SELECT + p.date, + p.client, + p.url, + p.technologies, + p.is_https, + p.total_requests, + p.bytes_total, + p.bytes_js, + p.bytes_css, + p.ssg_score, + p.paas_score, + p.ttfb_score, + p.max_age, + p.req_revalidation, + p.cache_score, + p.dynamic_penalty, + + -- Calculate Total_Score as the sum of Cache_Score, TTFB_Score, SSG_Score, and paas_score, minus dynamic penalties + ( + p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty + ) AS total_score, + ( + CASE + WHEN (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) >= 100 THEN 'jamstack' + WHEN (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) >= 50 AND + (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) < 100 + THEN 'jamstacky' + WHEN (p.cache_score + p.ttfb_score + p.ssg_score + p.paas_score + p.dynamic_penalty) < 50 THEN 'no-jamstack' + ELSE 'no-jamstack' + END + ) AS is_jamstack + FROM + potential_jamstack_sites p +), + +filtered_sites AS ( + SELECT + date, + url, + tech.technology AS technology, + is_jamstack + FROM + total_sites, + UNNEST(technologies) AS tech + WHERE + EXISTS ( + SELECT 1 + FROM + UNNEST(tech.categories) AS category + WHERE + category = 'Static site generator' + ) AND + is_jamstack IN ('jamstack', 'jamstacky') + GROUP BY + date, + url, + is_jamstack, + tech + ORDER BY + date ASC +) + +SELECT + date, + technology, + is_jamstack, + COUNT(DISTINCT url) AS pages +FROM + filtered_sites +GROUP BY + date, + is_jamstack, + technology +HAVING + COUNT(DISTINCT url) >= 10 +ORDER BY + date ASC, + pages DESC diff --git a/src/config/2024.json b/src/config/2024.json index a1abf227497..5905b661341 100644 --- a/src/config/2024.json +++ b/src/config/2024.json @@ -150,8 +150,7 @@ "chapter_number": "18", "title": "Jamstack", "slug": "jamstack", - "hero_dir": "2020", - "todo": true + "hero_dir": "2020" }, { "part": "III", diff --git a/src/config/contributors.json b/src/config/contributors.json index ffa0bdb38f0..ccdb0acada4 100644 --- a/src/config/contributors.json +++ b/src/config/contributors.json @@ -1138,6 +1138,19 @@ "twitter": "theobto", "website": "https://www.lookzook.com" }, + "avidlarge": { + "avatar_url": "87678248", + "github": "David-Large", + "linkedin": "david-large-4875b81b2", + "mastodon": "https://fosstodon.org/@avidlarge", + "name": "David Large", + "teams": { + "2024": [ + "editors" + ] + }, + "twitter": "avidlarge" + }, "demianrenzulli": { "avatar_url": "15170359", "github": "demianrenzulli", @@ -1368,6 +1381,20 @@ "twitter": "akanygren", "website": "https://erik.nygren.org/" }, + "guaca": { + "avatar_url": "7644895", + "github": "guaca", + "linkedin": "estelafranco", + "mastodon": "https://toot.cafe/@guaca", + "name": "Estela Franco", + "teams": { + "2024": [ + "analysts" + ] + }, + "twitter": "guaca", + "website": "https://estelafranco.com/" + }, "estelle": { "avatar_url": "69888", "github": "estelle", @@ -2777,6 +2804,20 @@ "twitter": "mikegeyser", "website": "https://mikerambl.es" }, + "mikeneu": { + "avatar_url": "312386", + "github": "mneumegen", + "linkedin": "mneumegen", + "mastodon": "https://fosstodon.org/@mikeneu", + "name": "Mike Neumegen", + "teams": { + "2024": [ + "authors" + ] + }, + "twitter": "mikeneumegen", + "website": "https://mikeneumegen.com/" + }, "mgechev": { "avatar_url": "455023", "github": "mgechev", @@ -3906,6 +3947,9 @@ "teams": { "2021": [ "reviewers" + ], + "2024": [ + "reviewers" ] }, "twitter": "thomkrupa", diff --git a/src/content/en/2024/jamstack.md b/src/content/en/2024/jamstack.md index 5d15f0eb404..c8e8589d9c0 100644 --- a/src/content/en/2024/jamstack.md +++ b/src/content/en/2024/jamstack.md @@ -1,18 +1,556 @@ --- #See https://github.com/HTTPArchive/almanac.httparchive.org/wiki/Authors'-Guide#metadata-to-add-at-the-top-of-your-chapters title: Jamstack -description: Jamstack chapter of the 2024 Web Almanac covers quantifying Jamstack sites, the growth of Jamstack, Jamstack-y frameworks and hosting. -authors: [] -reviewers: [] -editors: [] -analysts: [] +description: Jamstack chapter of the 2024 Web Almanac covers quantifying Pre-Rendered and Hybrid sites and the growth of build tools powering them. +authors: [mikeneu] +reviewers: [thomkrupa] +editors: [avidlarge] +analysts: [guaca] translators: [] results: https://docs.google.com/spreadsheets/d/1wKswSnp8TuN4aZb63ir7hE5eCikIu8zEdQYPp4Xo6O0/ -featured_quote: -featured_stat_1: -featured_stat_label_1: -featured_stat_2: -featured_stat_label_2: -featured_stat_3: -featured_stat_label_3: +featured_quote: The standout this year is the combined 67% growth of prerendered and hybrid architectures in the top 10k high-traffic websites in 2024. Given how much of the web is inherently static, this trend is promising. +featured_stat_1: 43% +featured_stat_label_1: Percentage smaller Prerendered sites are than Dyanmic sites. +featured_stat_2: 3x +featured_stat_label_2: Growth of Astro for Prerendered sites in 2024 +featured_stat_3: 42% +featured_stat_label_3: Percentage less JavaScript Prerendered sites use than Dyanmic sites. +mikeneu_bio: Mike Neumegen passionate about building a web that's accessible, fast, simple, and secure and grounded in strong fundamentals. He's the co-founder of CloudCannon, a content management platform that brings Git-based workflows to content editors. --- + +## Introduction + +Remember Jamstack? While the term itself may not be widely used anymore, the core concepts remain as relevant as ever. + +At its heart, Jamstack is a delivery architecture that promotes prerendering pages whenever possible. For the 2024 Web Almanac Jamstack chapter, we'll explore the three main delivery architectures commonly used today: + +1. **Prerendered**: Build pages ahead of time and serve them as static files. +2. **Hybrid**: mix of static and dynamic pages, using technologies like Incremental Static Regeneration (ISR) and Edge Functions to blur the lines between them. +3. **Dynamic**: Pages are generated on the server for each request. + +It's become more common to take a **Static-first** approach as the more static a website is, the faster, more scalable, secure, and eco-friendly it tends to be. Prerendering, hybrid, and dynamic approaches are valuable tools in a web developer's toolkit and are each suited to different situations. Let's see how these categories are evolving. + +## Defining the dataset + +So, how do we determine which delivery approach a site is taking? It would be ideal if there were a clear marker to neatly classify every site in one of our categories. Unfortunately, there is no such marker and it's one of the biggest challenges of reporting on these architectures. + +Previous Jamstack Web Almanac chapter have taken two approaches: + +1. Focus on websites with a detectable Static Site Generator. This gave us an accurate picture as we could be sure these sites were using targeted technologies. The problem is that many Static Site Generators don't leave a fingerprint by default, so the dataset skews toward frameworks like Next.js and Nuxt that do. To complicate things further, these heavier JavaScript frameworks are capable of both prerendering pages and dynamically rendering them, so which category do we put them in? + +2. The second approach, pioneered in the [2022 Jamstack chapter](../2022/jamstack) used thresholds for [Largest Contentful Paint](https://web.dev/articles/lcp), [Cumulative Layout Shift](https://web.dev/articles/cls), and Caching to build the dataset. This approach broadens the dataset by including more prerendered sites that don't have a clear Static Site Generator fingerprint. The downside is that it blurs the definition of prerendering by focusing on frontend performance. Prerendering will often improve delivery speed, but that's where the scope ends in our view. What happens after delivery like a faster LCP is a happy byproduct. + +Both approaches have merit: the first uses data that clearly defines a prerendered site, while the second relies on indicators. This year, we're combining the two with a scoring system to get the best of both worlds. We developed this scoring system to reflect our confidence level in whether a site is prerendered. Strong indicators, like being generated by 11ty or hosted on GitHub Pages, earn 100 points, while softer signals, such as a fast Time to First Byte (TTFB), receive lower points—50 in this case. + +We then total up the points and put them in one of the following categories: + +### Prerendered + +If a site scores 100 points or over, we call it Prerendered. It means the site is statically generated or shows multiple signs of being decoupled. This is a high bar and contains \~0.5% of total sites in 2024\. + +### Hybrid + +If a site scores between 50 and 99 points, we put it in the Hybrid category. These are websites that might be static but don't have enough fingerprints for us to tell, or they may not be purely static but share some shared approaches and philosophies. For example, a Nuxt site hosted on Netlify or a Gatsby site with fast TTFB. While Hybrid is a more lenient category, it's still a high bar representing \~5% of sites in the data set in 2024\. + +### Dynamic + +Anything scoring below 50 points falls into the Dynamic category. These sites either rely on server-side rendering or don't have enough fingerprints to put in the other categories. Dynamic represents the majority of the web and \~94.5% of the dataset. + +## Scoring + +Let's dive into how scoring works. + +### Detectable Static Site Generator + +This is a huge tell. Based on the SSG, we can give a score on how likely the website is prerendered. These are ballparks so while we can't confidently say that 30% of Next.js sites are purely static, it's one data point that when combined with others, gives us confidence. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SSGPoints
Astro50
Bridgetown100
Docusarus100
Eleventy100
Gatsby30
Gridsome100
Hexo100
Hugo100
Jekyll100
Mintlify70
Next.js30
Nextra70
Nuxt30
Octopress100
Pelican100
Retype100
Scully70
VuePress100
+
+ {{ figure_link( + caption="SSG Points Distribution." + ) }} +
+
+ + +### Hosting Providers + +GitHub Pages can only serve static content so we know if it's hosted on that platform, it must be prerendered. Netlify and Vercel both have many static websites, but also have dynamic functionality. We've tried to account for this in the scoring. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Hosting ProviderPoints
GitHub Pages100
Netlify30
Tiiny Host100
Vercel30
+
+ {{ figure_link( + caption="Hosting Provider Points Distribution." + ) }} +
+
+ +### TTFB + +[Time to First Byte](https://web.dev/articles/ttfb) is how long the server took to return anything to the browser. Our thinking behind using this metric is that if all the server needs to do is return a static file, the TTFB will be very fast, whereas if the server needs to do dynamic processing to generate the page, it will take longer. Of course TTFB can be gamed if the server sends *something* while it takes its time generating the page, which is why we're giving a good TTFB a score of 50 and not 100\. + +
+ + + + + + + + + + + + + + + + + + + + + +
Server Response TimePoints
Less than or equal to 800ms50
More than 800ms and less than or equal to 1800ms25
More than 1800ms0
+
+ {{ figure_link( + caption="Server Response Time Points Distribution." + ) }} +
+
+ + +### Caching + +Caching gives us a good sense of how static a site might be. If a site uses aggressive caching headers, it's a strong sign that the server is doing minimal work, which feels very static-like. On the other hand, sites with long but less aggressive headers still suggest a static approach, but with less certainty. + +
+ + + + + + + + + + + + + + + + + +
Cache headerPoints
max-age of two weeks or older and does not require revalidation.100
max-age oftwo weeks or older and requires revalidation.50
+
+ {{ figure_link( + caption="Cache Header Points Distribution." + ) }} +
+
+ + +### ETag + +ETags help with cache validation by letting the browser check if a resource has changed since it was last fetched. We see this as a small nudge toward a static approach since it shows the server is leaning on cached content instead of regenerating it every time. + +
+ + + + + + + + + + + + + + + + + +
EtagPoints
ETag present10
No ETag0
+
+ {{ figure_link( + caption="Etag Points Distribution." + ) }} +
+
+ + +### `Set-Cookie` + +A `Set-Cookie` header nudges toward dynamic behavior. It typically means the server is handling things like sessions which suggests the content isn't purely static. + +
+ + + + + + + + + + + + + + + + + +
Set CookiePoints
Set-Cookie present-10
No Set-Cookie0
+
+ {{ figure_link( + caption="Set Cookie Points Distribution." + ) }} +
+
+ +### Limitations in the dataset + +It's worth reiterating, this segmentation is hard. These are rough estimates based on the data available and some miscategorization is inevitable. It's also the first year we've used this scoring method and is something we can refine in years to come. + +To minimize this, we've set a high bar for what qualifies as Prerendered and Hybrid. It's likely these categories are larger than represented in this report. + +## Analysis + +Now that our categories are defined, let's see how they're trending in 2024. + +### Static Site Generators + +SSGs are the technology that performs the prerendering, which makes them a natural starting point for our analysis. Keep in mind not all Static Site Generators leave a fingerprint. Tools like 11ty, for example, don't leave any trace by default, so they aren't reflected in this dataset. + +{{ figure_markup( + image="prerendered-static-site-generators.png", + caption="Static Site Generator usage for Prerendered sites.", + description="Bar chart showing the static site generator usage for prerendered sites. In 2024, Hugo is used by 18% of mobile pages, Next.js is used by 13% and Astro is used by 5%", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vTzPcqcOjo0RTaHjgSQCXZYJRyquXzzd6qOsD6PysgZZdGXlR8pP5i2Reoa_WJwJLjFHniXA2DWwDq1/pubchart?oid=1868506505&format=interactive", + sheets_gid="1131487846", + sql_file="ssg.sql" + ) +}} + +We see Hugo leading the Prerendering category by a sizable margin for the past 3 years. Hugo is known for being a fast and flexible SSG with a community that values performance so it's not surprising to see it at the top of the list. + +Next.js continues its dominance on the web and is steadily closing the gap on Hugo in the Prerendering category. It's worth noting that with our scoring, we're considering almost all known Hugo sites as Prerendered, whereas Next.js needs multiple indicators to be considered Prerendered. + +Meanwhile, Jekyll, Gatsby, and Hexo have seen stable or declining usage in the Prerendered category, which reflects the reduced development going into these frameworks. + +Docusaurus is on a steady rise which is impressive considering it's only used for documentation. + +The real stand out here is Astro though which grew 3x in 2024\! It's now a major player in the Prerendered category and could become the dominant framework if this trend continues. + +Let's take a look at the Hybrid category: + +{{ figure_markup( + image="hybrid-static-site-generators.png", + caption="Static Site Generator usage for Hybrid sites.", + description="Bar chart showing the static site generator usage for Hybrid sites. In 2024, Next.js is used by 23% of mobile pages, Nuxt is used by 9% and Astro is used by 1%", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vTzPcqcOjo0RTaHjgSQCXZYJRyquXzzd6qOsD6PysgZZdGXlR8pP5i2Reoa_WJwJLjFHniXA2DWwDq1/pubchart?oid=633489729&format=interactive", + sheets_gid="1131487846", + sql_file="ssg.sql" + ) +}} + +We see Next.js extending its lead in the Hybrid category with a 39% increase in the past year. Next.js is a highly flexible framework capable of Prerendering, Dynamic Rendering, and Incremental Static Regeneration (updating specific static pages on-demand without requiring a full site rebuild). Its versatility for everything from an information website to a fully-fledged web application is one of the big reasons we're seeing its growing usage. + +Nuxt continued to grow steadily within the Hybrid category, while Astro saw rapid growth in 2024\. + +### Performance + +Prerendered sites are known for their performance because the server can respond instantly rather than dynamically rendering a response for each request. This results in faster load times and less strain on the server. Let's see how that plays out in our analysis. + +The median site page transfer size is an interesting place to start as we would expect it to be a significant factor in overall site performance. + +{{ figure_markup( + image="page-transfer-size.png", + caption="Transfer size by year.", + description="Column chart showing a break down of transfer sizes by year for each category - Prerendered, Hybrid, and Dynamic. In 2024, Prerendered sites have a median of 1,427 KB, Hybrid sites have a median of 2,083 KB, and Dynamic sites have a median of 2,434 KB.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vTzPcqcOjo0RTaHjgSQCXZYJRyquXzzd6qOsD6PysgZZdGXlR8pP5i2Reoa_WJwJLjFHniXA2DWwDq1/pubchart?oid=1985928033&format=interactive", + sheets_gid="1131487846", + sql_file="jamstack-overview.sql" + ) +}} + +On average, Prerendered sites have much smaller transfer sizes coming in at 43% of the Dynamic sites. + +The jump between Prerendered and Hybrid sites likely reflects their different use cases with Prerendered sites more likely to be static, informational sites, while Hybrid sites might lean more into eCommerce and web applications which can lead to larger transfer sizes. + + +Let's break down where this extra weight is coming from. + +{{ figure_markup( + image="total-requests.png", + caption="Total requests by year.", + description="Column chart showing the number of requests per year for each category - Prerendered, Hybrid, and Dynamic. In 2024, Prerendered sites have a median of 42, Hybrid sites have a median of 65, and Dynamic sites have a median of 72.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vTzPcqcOjo0RTaHjgSQCXZYJRyquXzzd6qOsD6PysgZZdGXlR8pP5i2Reoa_WJwJLjFHniXA2DWwDq1/pubchart?oid=136070557&format=interactive", + sheets_gid="1131487846", + sql_file="jamstack-overview.sql" + ) +}} + +Looking at the total number of requests could explain some of the differences in total page weight between categories. From 2022 to 2024 we see the total requests stay about the same for Prerendered sites, a slight increase with Dynamic, and the largest increase in the Hybrid category (16% in 2024). + +{{ figure_markup( + image="css-size.png", + caption="CSS size by year.", + description="Column chart showing the median size of CSS per year for each category - Prerendered, Hybrid, and Dynamic. In 2024, Prerendered sites have a median of 26 KB, Hybrid sites have a median of 41 KB, and Dynamic sites have a median of 77 KB.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vTzPcqcOjo0RTaHjgSQCXZYJRyquXzzd6qOsD6PysgZZdGXlR8pP5i2Reoa_WJwJLjFHniXA2DWwDq1/pubchart?oid=2011541229&format=interactive", + sheets_gid="1131487846", + sql_file="jamstack-overview.sql" + ) +}} + +The total transfer of CSS provides another perspective and shows a slight upward trend across all categories. The notable jump between Hybrid and Dynamic sites stands out. While further analysis is needed to pinpoint the exact cause, a likely explanation is that Prerendered and Hybrid sites tend to be hand-crafted by web developers. In contrast, Dynamic sites often rely on themes, website builders, and plugins which are notorious for having bloated web assets. + +{{ figure_markup( + image="javascript-size.png", + caption="JavaScript size by year.", + description="Column chart showing the median size of JavaScript per year for each category - Prerendered, Hybrid, and Dynamic. In 2024, Prerendered sites have a median of 330 KB, Hybrid sites have a median of 674 KB, and Dynamic sites have a median of 574 KB.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vTzPcqcOjo0RTaHjgSQCXZYJRyquXzzd6qOsD6PysgZZdGXlR8pP5i2Reoa_WJwJLjFHniXA2DWwDq1/pubchart?oid=1540077714&format=interactive", + sheets_gid="1131487846", + sql_file="jamstack-overview.sql" + ) +}} + +The total transfer of JavaScript offers one of the most interesting insights with a sharp increase in JavaScript size for Hybrid sites, surpassing that of the Dynamic category in 2024. + +{{ figure_markup( + image="javascript-frameworks.png", + caption="JavaScript Frameworks used by Prerendered and Hybrid sites", + description="Bar chart showing the most common JavaScript frameworks used by Prerendered and Hybrid sites in 2024.React is the most popular with 23% of prerendered sites and 39% of Hybrid, Vue.js comes in next with 8% of Prerendered and 13% of Hybrid.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vTzPcqcOjo0RTaHjgSQCXZYJRyquXzzd6qOsD6PysgZZdGXlR8pP5i2Reoa_WJwJLjFHniXA2DWwDq1/pubchart?oid=1961429073&format=interactive", + sheets_gid="1131487846", + sql_file="js_frameworks.sql" + ) +}} + +When we break down the JavaScript frameworks used by Prerendered and Hybrid websites, we see heavier frameworks like React are more commonly used in the Hybrid category. + +{{ figure_markup( + image="transfer-excluding-css-js.png", + caption="Transfer size excluding CSS and JavaScript by year", + description="Column chart showing the median size of Non JavaScript and CSS transfer size per year for each category - Prerendered, Hybrid, and Dynamic. In 2024, Prerendered sites have a median of 1,071 KB, Hybrid sites have a median of 1,368 KB, and Dynamic sites have a median of 1,783 KB.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vTzPcqcOjo0RTaHjgSQCXZYJRyquXzzd6qOsD6PysgZZdGXlR8pP5i2Reoa_WJwJLjFHniXA2DWwDq1/pubchart?oid=919021609&format=interactive", + sheets_gid="1131487846", + sql_file="jamstack-overview.sql" + ) +}} + +If we remove CSS and JavaScript from the total transfer size, we're left with HTML, images, fonts, and other media. When we compare this filtered total median transfer size, there's still a noticeable gap between each category. This corresponds to the total number of requests made in each category, which likely reflects a higher usage of images and fonts in those categories. + +{{ figure_markup( + image="astro-hugo-next-transfer-size.png", + caption="Astro vs Hugo vs Next.js: Transfer size by year", + description="Column chart showing the median total transfer size of Astro, Hugo, and Next.js sites in the prerendered category per year. In 2024, Astro sites have a median of 889 KB, Hugo sites have a median of 1,174 KB, and Next.js have a median of 1,659 KB.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vTzPcqcOjo0RTaHjgSQCXZYJRyquXzzd6qOsD6PysgZZdGXlR8pP5i2Reoa_WJwJLjFHniXA2DWwDq1/pubchart?oid=1751742689&format=interactive", + sheets_gid="1131487846", + sql_file="hugo_astro_next.sql" + ) +}} + +Focusing on the three standout Static Site Generators in the Prerendered category—Astro, Hugo, and Next.js—gives us another lens to analyze page weight. Note: this analysis only includes sites in the Prerendered category to keep the comparison fair. + +Astro takes numerous steps to ship only the minimal data required, from Astro Islands and zero JavaScript by default to an asset optimization pipeline. It's great to see its dedication to performance reflected in the data. + +Hugo sees a step up from Astro in page weight. Hugo has many of the same types of asset optimization pipeline as Astro, though the Astro pipeline is more deeply integrated into the framework, which could explain the difference. + +Next.js shows a sizable increase in page weight. Next.js ships with its bundled runtime for routing and hydration, as well as the React library, both of which contribute to a higher page weight baseline. + +{{ figure_markup( + image="astro-hugo-next-js-size.png", + caption="Astro vs Hugo vs Next.js: JavaScript size by year", + description="Column chart showing the median JavaScript transfer size of Astro, Hugo, and Next.js sites in the prerendered category per year. In 2024, Astro sites have a median of 164 KB, Hugo sites have a median of 210 KB, and Next.js have a median of 583 KB.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vTzPcqcOjo0RTaHjgSQCXZYJRyquXzzd6qOsD6PysgZZdGXlR8pP5i2Reoa_WJwJLjFHniXA2DWwDq1/pubchart?oid=823335659&format=interactive", + sheets_gid="1131487846", + sql_file="hugo_astro_next.sql" + ) +}} + +Breaking this down to purely the JavaScript shipped, we can see how heavy the JavaScript bundle is for Next.js coming in at 3.5x larger than Astro's. + +{{ figure_markup( + image="core-web-vitals.png", + caption="Sites with Good Core Web Vitals by year", + description="Column chart showing the percentage of sites in each category that have a good Core Web Vitals score for each year. In 2024, 41% of Prerendered sites, 31% of Hybrid, and 33% of Dynamic sites have a good Core Web Vitals score.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vTzPcqcOjo0RTaHjgSQCXZYJRyquXzzd6qOsD6PysgZZdGXlR8pP5i2Reoa_WJwJLjFHniXA2DWwDq1/pubchart?oid=275245520&format=interactive", + sheets_gid="1131487846", + sql_file="jamstack-overview.sql" + ) +}} + +Let's see how the delivery approaches impact Core Web Vitals. We use [Google's definition of having Good Core Web Vitals](https://web.dev/articles/vitals#core-web-vitals) where a site has: + +* **Largest Contentful Paint** (LCP) under 2.5 seconds for 75% of users +* **Cumulative Layout Shift** (CLS) less than 0.1 for 75% of users +* **Interaction to Next Paint** (INP) under 200 milliseconds for 75% of users + +Prerendering typically results in a faster Time to First Byte (TTFB), which will naturally improve LCP: the faster the browser receives the HTML, the sooner it can start fetching assets and render the page. These sites also tend to receive more attention to details like CLS, as they are often handcrafted by developers. Hybrid has a heavy use of JavaScript frameworks and largest JavaScript payloads, which likely explains it having the lowest percentage of Good Core Web Vitals. + +### Growth + +So, how are these architectures being adopted across the web? + +{{ figure_markup( + image="global-adoption.png", + caption="Global Growth of Prerendered and Hybrid sites", + description="Column chart showing the percentage of total sites that a prerendered and hybrid by year. In 2024, .5% of sites are Prerendered and 5% are Hybrid", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vTzPcqcOjo0RTaHjgSQCXZYJRyquXzzd6qOsD6PysgZZdGXlR8pP5i2Reoa_WJwJLjFHniXA2DWwDq1/pubchart?oid=1749178863&format=interactive", + sheets_gid="1131487846", + sql_file="jamstack-overview.sql" + ) +}} + +Looking at the full dataset, we see that while Prerendered and Hybrid architectures are on the rise, they're still relatively niche compared to the rest of the web. This makes sense, as most websites rely on website builders or GUIs, rather than the developer-focused tools common in the Prerendered and Hybrid categories. + +We see more growth if we zoom into the sites with the most traffic: + +{{ figure_markup( + image="prerendered-high-traffic-adoption.png", + caption="Prerendered Adoption Among High-traffic Websites", + description="Column chart showing the percentage of the most high traffic websites that are prerendered by year. In 2024, .8% of the most popular 1k and 10k sites were prerendered, along with .6% of the top 100k sites.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vTzPcqcOjo0RTaHjgSQCXZYJRyquXzzd6qOsD6PysgZZdGXlR8pP5i2Reoa_WJwJLjFHniXA2DWwDq1/pubchart?oid=959672300&format=interactive", + sheets_gid="1131487846", + sql_file="jamstack_distribution_by_rank.sql" + ) +}} + +There's been significant growth in Prerendered adoption among the top 1k and 10k most popular sites with growth leveling off at the 1M mark and beyond. These high-traffic sites care a great deal about performance, SEO, security, and stability, principles that align perfectly with the Prerendered approach. + +{{ figure_markup( + image="hybrid-high-traffic-adoption.png", + caption="Hybrid Adoption Among High-traffic Websites", + description="Column chart showing the percentage of the most high traffic websites that are hybrid by year. In 2024, 11.7% of the most popular 1k sites were Hybrid, 12.7% of the top 10k, 6.1% of the top 100k, and 4.4% of the top 1M.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vTzPcqcOjo0RTaHjgSQCXZYJRyquXzzd6qOsD6PysgZZdGXlR8pP5i2Reoa_WJwJLjFHniXA2DWwDq1/pubchart?oid=214828640&format=interactive", + sheets_gid="1131487846", + sql_file="jamstack_distribution_by_rank.sql" + ) +}} + +It's a similar story with Hybrid which now powers over 12% of the most popular 10k websites. + +## Conclusion + +The standout this year is the combined 67% growth of Prerendered and Hybrid architectures in the top 10k high-traffic websites in 2024—over 12% of these popular sites now use these approaches. While Prerendering and Hybrid delivery remains niche in the context of the entire web, it's rapidly gaining traction where its benefits are most valued. + +Given how much of the web is inherently static, this trend is promising. By adopting a static-first model and limiting dynamic rendering to dynamic content, the web could not only be faster, and lighter weight, but also significantly more environmentally friendly. + +Hugo continues to lead as the top Static Site Generator in the Prerendering space, with Next.js gaining ground. Astro saw the largest growth of any Prerendering framework in 2024, an impressive feat considering it's one of the newest frameworks in this space. + +The growing presence of Next.js and Astro in both Prerendered and Hybrid categories signals a shift toward hybrid architectures that give developers more control over static and dynamic content generation. Astro's focus on improving performance and reducing page weight looks to be paying off and has made serious inroads in catching up on Next.js. + +While the term Jamstack may no longer be widely used, its evolution continues to shape the future in powering top-tier websites, paving the way for a faster, more stable, secure, and eco-friendly web. diff --git a/src/static/images/2024/jamstack/astro-hugo-next-js-size.png b/src/static/images/2024/jamstack/astro-hugo-next-js-size.png new file mode 100644 index 0000000000000000000000000000000000000000..8f7a45fd2e4c9a5be14db91093a30ac3547614d0 GIT binary patch literal 19516 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ⅇ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�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 N@vNI&9WwapKLFKRYx4jA literal 0 HcmV?d00001 diff --git a/src/static/images/2024/jamstack/astro-hugo-next-transfer-size.png b/src/static/images/2024/jamstack/astro-hugo-next-transfer-size.png new file mode 100644 index 0000000000000000000000000000000000000000..135951ce412b972df45b94a9198f011f256beae3 GIT binary patch literal 20645 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 QXK#lfr_MW8+6N^61x>tli~s-t literal 0 HcmV?d00001 diff --git a/src/static/images/2024/jamstack/hybrid-high-traffic-adoption.png b/src/static/images/2024/jamstack/hybrid-high-traffic-adoption.png new file mode 100644 index 0000000000000000000000000000000000000000..3df11a4ec6136ce3354d20d9dcd81f0a169afc92 GIT binary patch literal 21083 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 IM6N<$f`={}R{#J2 literal 0 HcmV?d00001 diff --git a/src/static/images/2024/jamstack/hybrid-static-site-generators.png b/src/static/images/2024/jamstack/hybrid-static-site-generators.png new file mode 100644 index 0000000000000000000000000000000000000000..647d1a6f9e1a37d06922068601601216ec43f9a4 GIT binary patch literal 21349 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 literal 0 HcmV?d00001 diff --git a/src/static/images/2024/jamstack/javascript-size.png b/src/static/images/2024/jamstack/javascript-size.png new file mode 100644 index 0000000000000000000000000000000000000000..80a691483d281b8bae632850479adfd574d7b171 GIT binary patch literal 19141 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 VWT8wB7{Ue`El=A*YfX_?{srHI5()qS literal 0 HcmV?d00001 diff --git a/src/static/images/2024/jamstack/prerendered-high-traffic-adoption.png b/src/static/images/2024/jamstack/prerendered-high-traffic-adoption.png new file mode 100644 index 0000000000000000000000000000000000000000..ba85a2983d936c2e6267c3befee2a216e11077c7 GIT binary patch literal 22849 zcmcG#1yEd3w>8+fySuvum*B2}VCkTZJ0w7GZ`|EINPq?!4GxV2cPChI55XmnA^Bdt z`sc5CHB(bFwq(@$>UPJw1g+#ytN19Tl4p z9vyf7>*DV2{^ab})z$Ul%0^sb%FXRvc3weCTYE)Sb##0ZvygWGx53G&>G6rll=Q5w zZWy$=C%2$DBRjXOqH1Jxysn{XduOMhxa8aD?D5HIVse_Mk=yn4&BD_1?*8%e+V=3s z=*+^Ze|TnOO#Jf7%IVqJ?A-jp;qi~Ht)$fSk;#Rv-9v7P_a)^O4XypEK$nA~v(?qL zl$^@gw333dMkmjh_01oBgOe%wwNYtbK9`n58oIJS*QaG>?;jlQ?d@-D?ImPG+B&+v z)V5i<$9MLQH8g!~?-`z$Uj8;T91vZo1M*DG$UZtgF8W;d^XECNZ@}0taB61OBRJ*! z*VWw8#>M3|zpSyjQ;4{lrHrO+aYb`=ZCzD0G`px)RLQKlW3Z;KAuuZYgKxaGYj`=d zr|D}e(9+i}I5RyTGCsT3Gcd8XzR}t>6rNDv;+ML%b?6?DWbd6+3Tf$q^(AGMuY6w( zPb!H|F9pZud4;5Thv$}5ceGI-Zvg=B^i7Q&ruxc+L73J6KV#~6S@De`^CejTPP?du^uG&%x z0qdt_#BHG=7^+!3Xz6wg%-9Q|_B_#8+ucG}tt9Y4pxuvM{=(gO=jEORqN+rx~CfYU@QWL|oaNW|Tp zQ~ItQ#@;(a#<73_VC^r0>HL|=4^ZCJrhdbIvy_e91@qwhxEf@Xy{O1S?hE_<#bo93 zR?!4GTx3H3l9zq^W^|CjQF*V>T(jHMH-t!ZUGzOaTr|=5Bh$L1nu`?gYNt-W)u4!* zDHqc>)Qw9Zy{W1*!zQ!1pBKy3u#u#hY6<@rBzNwzL-H zVjUf{Q_UDWr=ch9#mKbNY%Hh?qK~m{seVnJwzy={7C$FZ9G(caM*~d43w31C4_H%5 z&*f-Sv_E;gZy;HiD;yPL?w4JhoOe~1owDMI7&@P|YD{P!v2t?kT-20V;s?G`I(swB zB^HZOZjt8(Yz^YkRV7Eh^8{iwhNi>{YeG@fE*JxTvLOG@>?Q#i&a7XDrmh_?+# zC13w>JcQ`}jly0vV(gV{1nU5z+RXGQ@|(PPsZpd51@xgt>ff!bR*LQu6Ap_9R!;2^ zX+O9lUw<_ib3SXO&9Z_y&X^$svLzAme07kggjl5y>gE6pYfW3Q`z9=X#pdJxkW2fSfdmry3kW?hFFR(tp0fBd zHM=0I7>BJ-Wjw!`qBgqsO2QNxzu$E$d4pU9+jWFGKrbeTbh_ns{)#7t_^!T+ZyQRr zGDwSx?pPN#g(Ab$T2?a)?y+I)Y&9EiVQt(WE~}g|7W$C3h*vA+!wKK(n8V5nt9;-DLQjXXPdk7aHLozTgM|VNzF| zeIuyeb+9c3M74_uMpDk7M&{tAYh0saQmu3XL^WsRL6z&k_(z|7(C!6N$&q1*6};sq z%qdL^u+`MGU)fb8(maUmk{loMF8U4x;ZqD{z1l=_Aw+`Ih}&*sdn@e_ zZ`b0(c9g2RA8rt&ULPh47^p~U91Gvh$=M5k_eDlB5KK{Lp zaN2{nox)b3+Skv{z96wkqhvOCwi9u@-Kb*4Zi_QoX`GW|g@^rv%` zS~2MKrLt@nE6?+_vpYwk_odAfpT&RL2+!gZTn9L8X}IoEA(rrSgmH^*VK1ywLFnHb z2dsEEbsRh|&0+8R+3N#EgY!`B)ngDTjRSoB|n7@pC=WlcGbV();kg=n+HE#)pS7 zshBbJ$qGfKBajl~%BPd!2e&IZfZbEPkSUvX9N6R@HAO$zYDZ1Y$WW*njthn$c7*pp zw9X&X&nZI;2Pi)v-2uEAj6h$&cyfD?40vijuwL@)^C1w;6>3RI~a0GvmVBSqs1C@O0pJ3_f!dgC4X3NUO@i}sMoeA@WWJ) zOW6@%EdWG*bjz0;Oy>TDb#O~oQC+^*IQ>S(2O; zp{`BYMydQ$NgzKq+tc}H|yxp!_bXh zRAXW3<7BGtH%gs`%L!6eB|Mj!66N_0KEBvvWnl$jwY8Kigr4(^gF#4a%fKpw`=kR2`1-XS3o1JA zN#{M0IQ+af?{8eAp2HJ&T?Sujd2~=aF!)L;BT;_c)%aBu@~AJlp%-+|Pq%_mTV`@E zpQ0o=FbTxwu8}`XBt=q_!pn7Gxwn)GHk^d!)7X|hQu(eC5p#BNo1!ha;1+Lrc9B5F z5;|Y@wc@@R+Bzt$Cw&kwUI@zCJSggBBQw|Zi%k01n^3s+(t+YMKhLHMunX(h@^?2u z3cS+asDHada_{|nRWEspkp+M%#Mckh1<4k7fhoo_5azg)tpx0~8#awkbo#<8Eb zx&6GQ6C5th1h`&t0Kgi95M-2NB(M>nN6L|>Q6?nKZCpDyrCxuzyf#u1InWDQbN?fO zUM#x^w&D%GL0tgKr*~VqqhjdiYfQLo2Zwx`?7}yu76E?UY?1#l5i5H$3iDC?PU^T& zIWLk{zDG$9jDCE&MCTqpj$-1w=d@vhyp+f56b~d{`P1|7>y zBfce7lM+BpN*QWhTYgMD0BN(?y4HEUDPL3xGe#g$xyXT2FHjc7gJ-cE8`UQ5m^>*|UH zW5iMJw2_iRFfdE1c9!ByLU%&P`+Q8_nZUIi&ZNG3n<<#W_N<+%?9sp?0CcDMuv((j zwof;?XF}2F3mrM$vxZA$dViP*f)R#2lm60zX+N@Jy03BpgZHJ5-)fl$fTd+_iaO4B zLGMo#beS*gOCoU66~cve<+~bpZ$L5$C&*u%u$+9j-6M@Z7qmlny}<*_0?aZh5SC%7 zMDADXAU$3nSY3LHdpWrK>|V;>qZ({K1i9iM#6-{$0G_DRI@M&oN zkJ!Q3TqM*{8_JZNKrOkg7+7}Uhw_9cWEff=OKr!G#gGA;HcbOTgfLF!2y|jgtyjpb zwyjhzpS@)!H&^)lA_bqoM9tzGpaB6wJ~4DMB0$+|B(?eJI#mn{F}DgLQcf==8WPyF z*L6OH+hhpQRlj)O84P`+a1D&ac4gL^t~~av3ax+oiQ*6(x+RPnen6^zL|*gh28$SY zU;{VvBP4BhstUmjhMr>x`eGQqG$srz8r_DWXC)S;ZOWOKgCvS^87SlxW#n-%7shcV z6zSeM4E2_KpSOlS2cHb~g*0s-pHg!Ul;80$5ktQJ*gz#_6fm0YCWg@CzY73wlKVH^ zU=te^XZ+G}vG~n@Lcytw5<7AV)Al_O8grsB*C1CmM&xk!762l# zmv0UDA4wE&;!zZj%A;ZHqdPKl1+f5M$!2_{ZvNMw62QU*i62qUSj7E42UF3WC>X>$ zCF|dkHq+IFj46vNl0a#jA>ufZsgbBJ0^0yL+uF+^KYkC0+g~aU7(x7 zI5+obCzOy=ibf@NMH79}V@8TMT&?-_iTu+Y}a83X+<*BOIl@LnQWg zfrtq8d*YFGi;j4hetfv*P7mvR$=k`FIzuTuY%N&`yG zvzjIba719HT&0FQhq>^trythru1oVGp($N9=MvtOS2gdfw?j;OED#^t4l)J#*VJVT z?|!J@&La{$|AKKTY z&I~&re`TC5S_}}LeA|Nb*V5%2BKeKoZ+0rsBb!l$54fQvPlI+><90rU zxO(;Ddn$F!Fh_}6GUh@sYf87P;)n)`XeV4UBb8#c3;*Wb4vW7Lg^4~kVK25sXKh9@ z3%**iJE`!!$FcwoK{ugDiE5pWbLmX^ThUsTWJZDG&m$Zw-%e-~-Xf?Zmq-)WzZTQe^4b^f z%%Twj>bXG4k&8R5TNqX7l24LZ6J?7gdEQ+-WPsBqXh%RQ$%GT2+qm_p+26| zie!l^m|FjgyWF{}Mhn&Cw}L+{$Qj;ZhF;+ce{(9Z0Qy^o7u)@8DeK%<0sQPC#QR= zS;!a}=~WqTt7Kc=Ea>Cm(KQmovcSI zwpYM#S?6ViCJ(d)QJ?CeIbUn^mnOhKaO%WgshQT-Ec`6@b00E}jx2U1f<|nU?ER%` zb~cHdywn+I!G&-yg}Pm{h;3nfq!iO#Kqk3_;TN;)oUEb6*#izF@el`$ALN=4Pl%%* zs8hgeXSOOiT3(Q)L0tA4XrT#BEdrJzcP=gn0yu}A947?k;@W#FKOw)+NAZctn=z+ABhJzzKBXx^c0L4sk2-mv+!LPts{G)<8(f+M*1cjE zRzWRE&0lwSAF4%XI`r!J5e^qfm^4)9jY<6b7u3hQKKrXU5U4+gBucz+(l~+9puVBi z&xa5)uk<|+J&7U+<2j1Mv^s6J{2e-=pL}ntdY#Ia=ni+@@}&X?sUNqAp0xyxW`87< zFh6G@M{ay(kP8{;L{MMaP1k7D=zx(I%L$+7QTLO>eL1~m*x!uuUtUUW4^4LWQ*ANx zE)yH;pJOv~+%#Z$1yl$UM_2rmCZp6x0m(m}8H)>CZr{i#D;A00-awJ-UNz1vdG9Wr z5lQc?(?|0oJPQ)49vdZq$H=Z_2#lIcmmKbYKHgjF%zv~{BhcSmueJGpOYL#9)3+>Y zv%l1s8#`8dEzx$=pVH_5xZwy``)r9*?>f+s1q7=#jg*?sa6?TRtHj-sgPZURWTc$t zr>-fO)lq}aK2p-WQQ_s?OWy6YWH0Tl(?!=)#c+zBV%JdNgO-KZe;91cSzSJ_pvCex zp|e*3xF;qFO)DsE$o1{s5LPI!i^+jp~fR66d@mMu#IO(JH}c;=^pJNJwsR5ilyzj`|o+YNmai# zal>dD+Lb`FOP8OG>~J<5lnHJi((Y8rF+y1+3#aIXHE z?A?l+HMu4i7qL;Drbm@n7JbyxA6qGj%kg$@aw|uRDiwS5q|#<} zvLueKQy^J2wff%Sp|sM~;U2Gb!hfF5?ofTUl>(*ds4Y}nSAvAMvM>4E=#zR-J41CF zUB1i86hpqu{Ao8jWVA)O{SPDaM(H%IOV3 zSj|b;ILU2y*#Z(qXa=8a2H=LO14J3OxaboVL(W;XOH}aC5?SdL=n+e?6|!~NKL1{e z`T2`i2-(BN)4Iw0=R5URgLjmDt30;~Zz9p5^kFerQnGQSfr>!kO_Dzjy#{~@+B9;J z9ud}n)y7BcDb>(0_JGe&pFi?Iy{oZqE(ph>6E)!iE^DHq8=sf7+6oLvJsE`m6bq#e zhX3$Xi{^kzI`YLPo&4$wZtw<&Us?>$TK}#V{g@g!y@8)j+p9Vgl13l5r`rPOvvY|! zS6w*o@5EAaA;-@QIZ3=pgww{JT4jLj6aG=xa9T0fj9B)fvT+x2>>7&sdSRDnUX5I< zmUKv@r5s8mhaknz=r}n;xXURbP@dFV-{2<;96mbTZ}!#&64CmKq?D)*gj#8yf_r^h zixO-8bi7CwkruNRJY;%>PVG7W=eH_y&?6E0u@c%V?#D(s65tfW%b^y>v53j#Dtyg5 z`E|jdkF<@Gm0+w1f+R7g`5Iu*{K#o|)?>8T)!4zSp|+))(>aX}<)dTyr9t=L8r0)~ zkGTxJZQiVAa(l+2MMtZ9E>u15bKKtv22q>7{@M%xrr_ZbQ32w0)^+@!$SJ;U;F$>u zAGWerw5ksBy{$=y+azqDhfI4twh~gZh%x>)0tWG(#T;{8U2&%GxwjyVh&$~*yz$u? zghqXF464`z0*Nza>tiS4 zr&WUvEC1#1Fg~omv$zw7tYa2_%hK{amAapt44L(zsbUH;=Tr9w zWSDdok0owWNUv)GS3F1?+J9gb^n^TTL$!&us&7Zt&Ywg85JMNVf`R!61QEyZ8J$1& zMQ5Gud_nW}Ejkj9+eMId@S`-4ALC1A<8HQ^Wai-jd~Ox20|l5T4V+j!rU+6r0v@5H z@5U6@mzx7RQWV|TcK{iKZ#Lw)r|2%0un2@u*F<_)Fsc++QES;oh$v3cSWi($Rq(Pp z3(L<(vJCjVD&XBDopQIDt(p3EkoCskB0NNoD{AC*vZM|EEIVhieh2@mCrXzf#l%J* zMPMhigw!j>l97Z9{*(!-#>WDO=8u`3cDA~HxGM}T^=pcKU>{iP>&vR_=@&Mz!Cb9} zu43c##~B#`y*Y*!Q6L?Dq}+A_EMSb1-ySxZBMP79LDnPi@fwmO(h6uXB)N|7eF%)s zTuU)G`MDuk!BgXA9^N59rC z$g;TY6hfIaNrDDJOyh-#bGP_j@5084{4eoItNxu6M%uZcMi9lAyQ#*rj8RrB}O> za+tlR8h>FdB;oN_2a$g9L%NvWklb5U$7wHyfoFBMC=TIyHmda#+?H63V|=_yvp=4y z$c$+tEa+hGS4c7?Yj=&M4D>O{|FT87^ggG=(sctTg}IDyBZghDTT$>S7;zTT^eM zto}tgnY@bkMHYOD*WF~;Cp`CL?I4)VyLy;vj;}hf>`yjKa5EB$KfeKwplwuLd*N-> z!&HkH+5tac(cAX@&6M8LXlWmeI?&$GY&d>HggcStr4poYDNr*}AY$|ZLOhvY6%#*Q z<*0r7a?A~dGcMVUZdzqLdKIQoI7_YPiS3uk;UgBv zo0N0PChKL5bT(PTISvS!NP~LIhbHkj=x(`tAm(hu2x}x#w_r6rkSooCy3lnQf6&*? zmp4Y)T!fZYY%NgckG_%HhLy54OS2yz1u6%=8)~{U8a7fVU^t*|-td1nwve-Wk@M;k zTt}RIOaTY=3w)Nb8B?z| zQU;SH?vK1%BVK0@)4LX^BC1!ce;U*hZW2W>89T*j4@e=+`_})4uilTnSB$@e{qS=a zH34yTA;`3Xjy^NGlLKMfYL#Nu96Xy4=;@;( z`-=I8(_3#4eQ%{3SXUxl7eR8O%H<1Q0dvFc%WIt6yWyc0K9yH^rA6|F!J1rOSvWf) zp(_B^-Y+HE?54xb$WLXRXH0_l6Nv`Yup4zvoClzMp zQqbYFbn~LAPnUHhYtH)v;HMufOY|df5_e_sj%V%UlN139@gL+r>PID*w5R z5#l+kmm-)5?8er3AQ;oApnAy3{bV}Jm^mwxkq~c@Fp}iSAncIiTO~!|ZhAnv_^LiI zz4ComOqxKuR~f?21IhTg&qi0BAbH&0J6?eJgGM9hfM?HEAlo!D2LFkAB1q6qfPB36 zGtTeAja~%KHQ0=;KzAxVpU@Msbq~@%8{@8l)dN!Q0kH^U46faSHJug?}aU(wd zew!f)O<4<1W)A-rzQj0h{wh&OP&v#5F--qli}gw&T1nyxgp&+L`Snw%J;jOA^H*Gv z;g9=Vl!r&OfGl-24*LJ+*9FNs2@K2I1W|a`4li=3`ug64ZZ%TL6Jt%Q-eisK0-oMg z&A;{CiNuAzLEQQ|)*kl8b$9}==ZZv|5A-De5y3OYUp6?yq4VoD?IV8QXAh}RBJ7n; z&&SN~F1H38cL+RZgudtz?WQ+O-1@F=Rt9nYk&&PHVGkj>U&Essh!}-34|HGYtXWjz ziS0j20?BqxYWVTKCIb0$?N&l!8JL@ASImr(zlhNR)>2Xr&NR(&m;aUFXiBM+$$ zxsDge@x}8F$x5(vt5uZjSC5FjnZWek&AlXr*vmUR&8Y++Own&QAhHn zke*`Pj;DJ~4cecgE*Il}CHzy&-D5Mll<4Sl2YX}@0R z3nqN_nn+wVYe$jAitc)|7KtgT~DUk%r%lL)@%laeY(i=o$!RF7hlPed?cu#$sfKMejB7K?+U*G8@ZuK zE?*9>Ix`Ys{H_I+r({Atu6jBQrgF_R=4w+8%h{2;&HV}D5OFp(9&f3eP}uvw0oI1+26ZrK+{IewKN zhzPOD5bncStX1pi=|vJn_eUCC`x&x2-o;DW;&yF2LBxrt@RGyfIdl#q4F z{2pi3Eg#(ER3Fh05hDz#I+@KP+f-88X&wYwJub^@Hn6t4Nie)#BkS|=1mM-FqA#SN ziF$|V_9rM~4i5qzc)g`OCmf({j1kJGb>aONznM-Y$!^V%h#1RuvTI-J&Xq!P$!6|Z z!%dQni&vEk()&6zjt(IZN)q`Dcm6H$bXBw#c9gtF0jat_p04vhTBmi`SJvAe7?vys z`yRcJ+?e|ilO}BBr;Y5R({SyCQTqDd$|E_be&cdL59R$#rK>rVAq^I{dtW{w8VD1k z_2qIPIw;Z9m#Bw>kYBW@fSi6cNW|$OoyNS7URc6cn|SN(71M@GzH( z=PiEnvh+F~5#8qkPPRaCuCPS;cJveHEMd>=NQ&XH`kjAcy(CPZ;8t5-_GE5-2+^;V zVE;NgyBa{QThWi)OJay1w>n(zLQUZILKy)kVurdO>gM0w$B!lFI``nsjikm{4gu}v z;XJ?v3>!i(^uLyKu<9Nr;K=ppK%=R!J>(*XT-NeI@0k!s!KO%Rf#I?{%|5jtHX!|< z7+3K1p>vT^3!3InLU81&zG;^q_c^uj_H;RXLjJa5hnJo_2`AqFe%((vQ#CLWhQX0O zb1RdK(4q~03!!CnjFw(3EF2#C68?a}6+B1VC^DDuMuD5iIr#3!CFX5@g4@J{>;HOQ zvq@vGBn+3>E7M8^AX`lfK`Qy+0YoQG?CsNM14?6`)~`CC5huz#9*QGkC>K%F0i~&5 zd|n1}jF2WcNS?9`G-wP457hXt+5Z}A=rO zRMZ2*h}KbDzJogq407l2c)~M-44* z1~B^=?biB1g9g%GQt?^!9`5Z|dOqo)7qcSw=Qpi{f^4ej$%Q9+xss{fP2C=tKzW;8*`ri9wr|J1 z+}NW&=4I4;GVEEWR0zb=qOGZ7R;F`HP7U;_UbR~%ZA0!p4Qr0G$lo4=KCS({-up^h zYyo}a?cV$Fi_T0UGTOS~pwFWU71+&~f-Nn7UH8WOH#P_43`$&FtVP3EjQk-wNRY%0 zi@q}E)5r?^SHJcKr?$Gg#_%>g!LYi;_+UoghtBr|*#{JDnPR)Lx~|ZOCXa>{5~6q9 zF@3)~KT5)MaNin3bOOu-TwV%8;o5TC+ zhJ8b5v_In6O)slH#}dC>VM^qKooNUL5O{{7@6kLOtbiiu1ri)Wnr91CW>)R5UK;e+ zm`q@_XbL|lt%t$)o^W<3YlcMHo9A7SGJGule$gXK%hdgrbj348v(YxOQwkYxzF%y2 zky-yCcBZHPH1~a9t7}H5run+GeA7$8V!z7sr4Vf*FJSQfPAErv<A)+vtNz!n1mb}v zn$TbE|8JYr>*lPiH0~8P{2eDJ*@t6A*=+W@rKN=_?TW;!)51*!EnFCw_6t{tu_RjwJ#9K}@Uet<>dfX5Xwn%#%I@2kZayMXYJBxjz3KaPg{EyCJaZT!~fN_aa%; zsMI6?k&cBjzcq=(HciM{_01Te=x5SRkyJk&mgCdPU} z#ew=Vr?FvaV$5A1ixDL9oV${t`-MmvQrgxZ?tuOWr-^kjrzegi0x1X;p|Yz7ykt++X`RS7B%u8 zYhkQ?dyw)IH|kB?r{wHtej(l|+QnB~r@WePMXWvCXN;W#rE$ds7gX%ov&H*+;Jv|i zgWJL|Zlw#2{(q9n%#(~Ut&H-YEd0JS$yy(e{#2o+L(C&TW)vinpa!w-JE$L~uxv9K z-eVVP1oSl;=rOrf=w-gqesno+$v%noJS5j?v!r5ZV!~`3ngi>xiK(0>gkUW^++jN0 znAn0(K>9hWa)>Hy&oRj_>C}xgBOh5(WC9sHd5?ED%Te9!At`gZtI2|dZ)_PBlY z8#2}s3LI(S|D&N`D`)dfSR!-%ESlm#mP5}*7p^41ts+VH3ZJY5dBf%F%L){2?PVL&3DVcz1+47K+OlU zpM+HdlA|;KP5m2gQn26b^+~SZd<@`K*HW7>vDPFx)gftEMx^J3np*Iv6ujdcm;50- zm=Yo*^hS%E`~8THZdZD3h%zQ*aYeQ%dGvyhRuh(99>FsBF0{+=KXC(cr$4SjhK-Hwafs@ zNL}V|!g44G?ubA^eoyn77*n4unF9G%`u^wbQC7h*lA6*PKE|xzO-duVA`4&vlNxH# zw@KC$IhKw=%aWD)XFI|N))t~nslK?RITI^G)1!%O;T}&$=#ThL>GZ?v8X-spF=tfl zA$hxsfkvsGZ?B}xekcqpG2Z7ul892T{K|q0h)*{9LU0u?6AuDP*{|_?`Hd)ZPij59 zmE3kzxS)LZB9lG+uS~g4ML0GvlUVsGuLgjT!`Z13q~gf=msu1{7UFW9)3<=(*-1-E z#91Bw5+w95hzzXao1Ip4IW*!UZea(MICO8$;))L%_JFBQzR}z-pmja}2jSfJaCZ}a zjSA`rq~72JngZD;=v)u}na(he?f+mNr zfQ~yseWxK!jH1TJ0&3=<)|W;Iuz>nq`T{R+@R>2=r?b;A^siSal^8K1DMdyFJyIK= z${x-CYn zum|Z;EJ!097s!i4iwD97{&r@7C7WUW)e<$Z6rintaoY6bm;mzNHbC}3mL;>(lT}mq zxx}KmUb7aNnD|7z=;Jcw1k3IhF&@(bxt*Tnzt+=!_Oo*z(2wjmm5^@{H(ya*-us3R z1@oI&D5(@=aIX0&2}8SzT{9XQvn^a;m6W>>^_P-D7MFBpV13tCG%l)VHJb5t+s&-e z9FEr{$L7~R;OS8&1LB^ThVrD7G3Ym*4y9I%E1@sO#At{t!|^NR-C@+brLFiGu7B{q~CYNo~l&hS7}kATu3m! zD?BmzcEhNrvOAV6np^r)B6WUrDZhlhLTH$vHRN`8=T%m4y*JtS6kVoy{u@!&l$4>w zcSVl>i4mOO1!X!Tvwj4O>{&T#YNzQM8zCCSBl3)D3GrC?CRdiUjiO{SMg(!}D6r;a z{FR_hG;H&pFORLw{TdwY@gJw7ydoQ_eHF=|dY^wp`aY!&9jGE>&a%s$|FpUgjokdh zw>%8HAmfx>{+B}X@sY?d{Zi>Is*~y86r!4BOnH?g=0Q(<%`6qFmF3(GF8R=d*kqPM z$ba-+XB&4O*x-?hUp0h2;G)M+kApO4=58+Pf9L72T}ypv%>RH87aqnrI3-J=-&6KN zITK&(T#nDOEfTbCsU6|A=@#OtSo^)}HM@v`v5~D11n)?Nvz;gPM8!u=42nra!9a;l zk)ASd>^YiI$1GTGc1;~9zPtJEjE9R$gCSA$*6DOj5Tz)usmU<1Zq}VgkbJ?R9#A?8 zOktKfjA*-CVE*tWgXmAjxyF3|yHmwY@ADYa(N_0GwOo$LWH&8h;;+nt+=otR^R?Tr zM)9vpvjtA*KIq7o;o5*5k4EH{->qiPwUpp6X&(+urZd_D7v(Mg{HTdk@0+E%g&S=U z>+P|7+UFDc2V>`=AfDEC*Y$&CEe#xgttuaHp(O9I*-G#TH=5Bc*4$KyQwXhZ5v=f5 z$>`V7Ff$Ypy7T8n@Nd`77<{ko&4a@zNcI60g(>`i8@eo?x3lsPqe zGjd^7vD1^O#|+hd=*d=sj4PBYP`Tod)Nd`6>@ihG4#J(k7Z*PN?48t%R)wn$^xTpH zVWp4m;wy~?$Gvrh`{($Li7T=kdlKos6+!foUOR?-VI0){RJ5`5;yhlbfu3hbD%Pnd zU3DePio%d-^pbr?$?bqnm<_wnyvMgc0dr8vho2(vNRluz6Yhh;LPqtMQx1S_@*B7Y zkQ9N#>04%!mx}Tndbo>q8;T1ywsGfsMw087abrFHqJajfvp4m|>C%D&H)B&u)5z*0 z5&T!6_^K({iB})z;!GmTVH_njyCuJ+#$>d6jMctVd^06rvIkUNwt@HNz zTK}yW&JA?$`wdk4dNbsFDx3%#n7}j_wzXKibK0m`vByj_oT3c|MZNI zlxz!S$DLbWG%}~3t>ehM?bfJy=pDIq_h>$ryM0ybsUD+_t?K@dV~5wG1#j37mBnBJ zb{8o(;b1*M@ZmwX;OZA2lj28<6fb)kDU%5Pq&J!(<8T9vP*H?2V@2ZbN z{@m*I&$9Y*|KMv4hHs6Y5V4f<<3EwJb^Z2)zTvAwZExoB(Loy_MUl$kR`R*bj4DP_ z!OKvV23L~_J1isY;0LK#qwFFaR60QBKwK0>lYNw%6n6fvxKCOH8y9Mn0+4+tVSJY+ zEMTyo9=s>6j7raJM2-W#9#0xhVVJ4-_50&5Hu@S@c% zC3_F6fudnYf-`-HQcT}nWdgHz|AJdw^YI{ytq=Ex@b7-Bu$!1&jNoA0Kj+bBsTGlu z2)CJueexKMexc5o6TvXvQKlwy1=6V7dcR;^CX=&fMA*0yja>Ze1HFa1@|NxfPbnTJ z`L~3FE-7>VbN81J4BH3XK5i$u;L zmlF~Nan9YVx7>=!v8wl~15{EGhNXU`Tk!>b)!JR!9|tFY=(Cwtv~2Hxs7kF(RsJsj zVqYzle>f~!?p*Y_O~d}GYNr;3nV1tdOieFR`Vy6PAu7Kx-8=IV=*E_$0C3?ad`)7& zoR9PMg&<0t^~10O!Q?*{_2g%f$q!Q9Q}q<7{YP(@RQh#C-uWDJmIOY{8e@#E{iQyv zZh&?@F?vg0Zd_f+l(LsLwF^JzCJ57Hib$=p?{bu;{O)g6H;vqV`k-X^aCY$Jqr@aV zPa1C!gj1V#K1Qy_;iSCrEv)^E+S+%3M_Ejze`2wKS=%>f)dE3wk?2<4{6fd?S$KsB zM0~~;Ql(g2oWiP*-}l#PXp@3BIxAlo_g?^{k2eu9auS>3Cq zu0WfM^X2UGk)Z05^dRfp=mo$47;wc$OT+DSX4BJ!HvNK88MZsb+BX*8#h-OV{>V1p zdtv$1hoMgRKrdDAKljwy3gN6SM?78Mv19 zBM>Abp_-G%ND!xbr1N0d&fBXG6kdc$=A8=1-m9+!E7Y0(#Udh!^173{`AS>5%_> z`q#KX0-pVlog%qNei6-UF=+3Dy({? zUj8=uA4ab5sC087kCKPLMcaR7N~*s~d(QSx4jmg;h7AbMLWNWdr=(UT;yNb&1JCfD zE9eZgc47#(x(GhHSE81yAST{W2isxTvOwV61BpAK!5{1%;696@j3tPrYL=H2}L-N!0KLZ&qx>A zVnyHlnq`K~$SesJ+QO)Ia{Tpn3SH00eO6Y6kR({Ps??$VLs86B7)|G}rS|8NL_4m_ zZnue_6qL>rX3R06yF1*;_RtZ}*};$D)K6b9r-vmN=Rs*d%Mx}@mlO7uqtGUYss1x_ zVI$UhSwarESeyGSf?K}0nD)yrwmtJ1N*i19Hhfc)wd{4Ct@!I-rf9Sk-b5(H$$fUX zER*A>5$!Sd&|=E6y!E-A0!Llf7LO+_f03Jp9Yy6@oN4JpQ#6;)lwv+iCAxcgZJzH~s<6EP&V^nmM6uYVvi*s{*VO(OpZ|hQ z^p{|_;sx#h!>JkB@eaG%4#Ed@`wUl(#bsJ_bX>pd@?9}p?Bw`x1fSUh1OefbBE2b~v`B9PDo9C?8Umq5=?NeZ zniPTX0~7?M_fAkCK%{qwQluzI2kD*Aq)8K4+}+vzemgs}f9&l3bLY-H_c`x-p6A?m z?wong1(;E=uXeS$K5H!{JIvoVlQlqJ9aQ%HH?X5CxYCQ%-X|=DLbALE`$5 z2~A+M7|o6T?qx(!e+F zP5cf^6(iYkhBJgiK;W@>i?~a>vpHV&e%--kIj4lEILfTyNSP>@_K2I4S{8`B_v0Zy zbW{r1&W?MgGW{bf-tdq0%&4vH`#6q9v;=)$hpaQ{F=D>Rwn^D&Rzty4=}t5y>ailt+NWnJ>46?-tVpMoKEQG58GNZ=SL1i zpNX*uPW%1M=F{Gms(U53-&Rg(orBXiij{PGanb#W9a;-Yt*Dz=JHOiC?v_ z!pZxFBMweB#+uv?^|7b%vJ=Rh7xaNbbfa3_)x~}j*cbaWPImu+{va%)tY4xo{YE=i zw>U)$w8*(dhfKL%WGrhC^&p(0wSUq{kcYb_a}+%ga>q}Bz7- zLPwl4*-ORVHt}AypcPycwEM8uS^m=vlk1XJ>|~;0UF>ajqzPnRBZjHSQYef=!LYy^ z`_CZq;{lHsGI5U>t+YJC@uFBYlF143thy@tipmZaX4+Gi`7fk%#A=KSN$^wFaIdvX zIhHk+@DKD<_fl0GL}0EShJ%(x9`W&U+mOWcj08`U;;E&Af=0t-!8-!eiNbOULhEHl z_1$2w54J}~7xKTLtUo(ijea2H1oks-d~g*osX((kKka{vcsgFMmQP7`H!@E|a+8)J zRGW!X8vyUgxxB@i2Yom*g}yJp-)9o^f0=i(|IG29e7lgz{#UYyf$0U_BLClX`)}MC z>;N4#?f%K+?Fi`Ti7vz}jvK-~^1t#;<;866+u7R1r&lxl3eIjw-Z+`v@=dsM9zE!= zeYmew{=j*lHEs6!1I82;*=n_EES3DOB( z?Z#BnfpodjFQ%7c?#okvgRmhHJ1B7{Mxj}Yol+mApW_86xpm16HT9l^-5Tj$x_TXC zeA#qCFYckaTCM(fPVX-+hUuQuf|k$NK6K3!o#^f_$rkA}xW@BP%tb$AEpO*t$SsJ%u{ojKRbYLjGo)0+tiO_1mmtwuND3ZTaz zn>VIN6aBvR@vcf8>u8DIZO$*`XOf*Mb}YUR{q;IoE6G6VU8Za{ZzMWd|90tPC|0tU zK2V{elOCkSpcMF_JZ~$f8;Uq>nb|4m*%jz82&jmd%))Zc%xMAK^&XWXTUf&*_1mc% zyz)cD`!54nbvP*qEFCrBL3N4lqa?D0wSD72GY_rACJk@paEL)>KxCxF>CZ^A|G8PqhyJ(e zj0a2Zl-6{=($iNIdZ?q8t#sE|d99rQ@f-Ou*wbtIj`}8B^svR*4$4qcuOKw>fcR)z zzBo4H>xAsd^>tF>B0{~n7=^`ZG=(9J{kUa_bUW#un?oEx5#opmaAwgj%|RH>!+i1v z&}-@N!U`Zlgh990{NMDifDU9lUu8#Qn2(6+B4Wx5jGRJ6yZ&`i<)`I&h>qss<*Gez zUM}43;dvWo8Luh7sRuyuG{tZZ1|#mMq-XEeEVy~)q5XzSU_l{#%FjZrJZ#ZO)jJoZ z`P@KM2~ZvAmq=c2o<@PXQ!glrb|iR=+SKPa8{zY;0^_yWeYzmuR?3-}Cc`02xDO`G zrF93dex^*lY8uq`xS4!cgAnNl^O{#KQ`lLlG$bfSmtT|1K@mKRbh~z5)a!y6jayu-oCooL27Qjkj^ko?Sl;e5#-&Rdj5~hlFVBk5&K_ql(7< zb2I!@5?xY|KlMy3r&K*ZPIzHgp4!;wM?{(N>{6WDJ7<}(5yqBVGSvBq5m>0E!YwY* z!@CetJJTy3wegu&vD)WU9zr<=mOk~_FIJ-niSa2Kllk@D?uWoScA$uf$9&?a?w;s4RUh9$ zq0J7T8sSC6dV8t~^?M9fvV#R#fl%1?!b_6`se!=XR`Pw@%a7TC+Q7D+@+;>*?Id{ zNI*pf2ujuu+>zxHoepj-9g*V_wR{M>DLSUyRuirg9f}3H3HWU44}Nh8$!&De0c^~K zh8R!UwwKZS-ivgGu@Si(h2ayFM%Aa(?szk|drmCBJ|XJs5(aQ3N14w-zdb&F3Ebz+ zf4q%bpK4J2TZQ>ka2De>a*E(0j_TIwY2F+Z3SVPK(ml@i_vYoivU@tFdFzI8KX$Em z-pXxmw9KUK9!Ce6P8>H@p2|2hr+2sbMfuS7A!D}}6IDZbPcGIzVlEa|Gq{CHi%#fV zk<|_^#>FhF))?OWs{Up*w#ve}#~&#HV1Vw57&>$0`G(Fat;`v%vYK{f*__4=`p9m^ zFQ^_BXH=G$03~og=eEaqEzNbkXWNe;oDSBXV-c{M z!+GTXhTcp$x(;e+&dyXnz8C41j18?!xTQxTIo9s<$^SmGy8+%?d63Y9T5__&-xOIu zg;*W<9;o-QyT z#n$=dr7(O1p(m1=D^YnWzxLzz6YjvNiy{Uw7R<(0JmRI~5{@tP<(jEp^IQ!VSxVp_ptPek(f_*{oNb4caTESFEsMZzMVe~|Hy+sylZ zlfT)5<2Ug_FexPB2lDPmm%2b@lY9Qp=5C3n%)t#m5^e06HD3!IKV`tRibe$xYUavhpW9;DR>SJBm6TXIhSfL`)F!H;TSw{TI zc!OGcjgmUeIH>(1q$27Wvx!XGp00ppQ*(x8#6n5EUn(Q{qRwbREMf0X5u)DYn=1ou z2W?SWy)FkOKz1f}Q(PJ-%u}yQES0#&sdEZPBA9KKV7#}Y+}J0ua#Y8K03FE@ehMrI z5EMy+l!`d=5H~zEW(i~T%|I$OFOth~Wiw2Wm$ZwT4i-gLS$|YC zA1%{{RDjeUff0Ne60|JB?Bk8=)m!d1F}JayGMFs>E^!^qA+rB1B3`Zl>w^K5wv^LJ z?@$8m98nAn37_4^m&9pl(h=43bz_YVmAX{#dzM>x4dW0ez5wtYcYL@280}_d{gC*0 zU#dZW7(&B&7Rlwr!fs$b9Pzr~uj0snO6$E3kMq4i5{87&KKxtkW`?&-&mUX%o%YxI z(lk0Yg;`atu!5v9Q1EIBd56+zWILfJgEhtCbMYsw^u?D@Ge!8fl?=CkxW^%yC--j{ z<&h$GC^sa$&Icr9%T%^_YRf+o*dP9Aaorzlx=f!|5=%ZSAz=h#mfNC6zvUsksyqN4 zZx9obqMFcBWrDXc9?6N?`Xyjw%R^TcoHg8`MXIyT#NI7aNckr3y;U*YJ{lZz0L2UA zdBWD8kh8{c6&3J6ex@+ve4imS@Bx@(qRHVjVx4u&{x=+qx7spQJJVu;`pLn~%}l4l zWZ@3SrUc|;y~Y#im z=elu-yt`W2Ed3~}pDNlc=$!~i7<2#VYNxld>6?Ch9+|1BwGf_ z?5~zdP9GwA;q|p?If9>OsT~8(vXqnLGxFS?-dhSI6C%T^2VvXsseT|-Sea1KsS}~ul9!=qCn81IPENb(qtWR|J@CoZGWKB zSNB6OK89f7!x3-qjbGsub~$cs<$DP_>cu2xs8`QWi2M?UtIVj1z{dNjk`^c|`idhH zd9%!pG1eKFMLP#vzo|ciewGkG7NZ#aV3A^w1_D zIg|JgkD~}4Ic$M7DbI}Y0ZnoIT{`^bgtOH&<7^x+ zm~gtDWO5S6e!=P%lPU8mx8W0vMeY2WWF2RGAW1n7B8o?p2=p@OC~&!#|ea;;@- zB6Q|uWylOxYSWprde5T}(;*MCI8*2`u!zpK*H;v&cQxT{ydrR@qbo|h);bavCnd*n z*AYuS5*G3TuS-l;CQT-H4!qwM|P3lpo z7ujE(ga!&E$XEO;by8X|%|Rknym1xZz+?-}xV3r_>GyZ7SygCOWy2rUQJv-km858@ z1g;`l-_Dj>zsRs}5O%t>O%#1Aa%1E>T0DRaCb%ty$P9Y;mSQ$Qn^gRut?i{TUiZ2$ zB|d8VDdbO)a&!P_XC^t=XUbOFMlLWVL8ds?r1KC8Z%GObCHuBSez_F08}gmLoR&(z zbGHM*Y3idN3-c8x*~b=8+S>-FUSH0kMXZE5es`o9EC3)t+HurJl)PG4uWL|sXBw3h zR(M_K$_pY{VZFZD@SIHYNujw+^EKlN2UL#VKk_F6e>LB#KM$EK1mzt%n9)dN-oJef># zJ*9~XkPYalwXuaWUF~I8{e?v1>Ot$eib=qQjWv(ZKNj@2@RvbK;KR<5Y=FQS}Vck>0K=ArUu{npVMzShOH?5!yYYBC8XiUDg1 z6;{)lDm){A1wi;T$vFPvGXK@|q$vg2eDnP$GN0Re@>j<0+8L!Pst07J9x}Ob?Q^yD zoVfK{c=xk@E*%=!gQ4p+%##%pNnW~WoW4reKKK~DVjoZWPwkw+4+2Qae(c+|qioIo O0AO|9$7QMr%)bC<%h9|5 literal 0 HcmV?d00001 diff --git a/src/static/images/2024/jamstack/prerendered-static-site-generators.png b/src/static/images/2024/jamstack/prerendered-static-site-generators.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8ca98ea37aee633b572c30d3e3d90314fed65d GIT binary patch literal 26241 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ðWV5e;va<8q8^0d1^Ok56Gd(JF#sF$!9xu{UW+Gt0J7A|n{#F8c@Z2~zwg_@I za}$6I<3cyXfS17GTlPMALXLsn?U8dU6K-3t=+3#5$5hB!LOLHX)6baUQR#jye4CVc zStZ~&-_PY~GuV(Fuv@zoLu#^xjKj%g%OESDHu`v|274s{a8XK{d%G<1_4%J@wCk!Y zaDpE%2x(PlP0fTC)`$S*#}^M_QJPE_09(W<#HwTfZ47Aomt?ZVB=wTUIV^2 z5jMXc)!rO?B}n1xrBZk8qFc8`?05^CW3q%1kqQ~RH($V99h0{Bo#If8M)Nq;8YhwG zjjl;Qr~}b`i)KY{V;h&YAfy?`S#AoXDVQ7VtafXoGH4S_KF&N4AhVk>K*7FV`s2kTm0rKSMH?z-n&4yl30#D@ zgm!zDRy;!U3WpS$=4rG9mK)r-U9fzwXYQ%SNAJ5pUujaYS{Lj&a(YFvgNp#p>|40; z>gjs5Ylu`I>!3Ygh(q%&@QuNBfakk0Q94Vj6p;{69SQi3!Y&DVV7cYA%BcV#%m?|(KP`9W7P`iv zH1LHAHlt3=JOqOjRYA*)HbMX`5*JaHftPuV;Ka^`S0gSXYZwG^GuMj>)`Iy2LB|Qs zY!wIM1&yJ?4^c0p>f@r+JU3Qvt#!R>h#JzC5~|2$C>u!F8_BPVM!&i%+F`+!rmQee zZJtNMK;-0KDA#x)1b};jdh{{3-NUgPJu8C9)9LeRSN+=?IY!!nN$Ied#X!Xg22-WC z{xp?&d#{JF#SakEK6mTmIU^1mj(E55iE_7U+3zRnH#l+oYhP@?Miy86fI!y=h+Gwy zOS0BVRDgLvY7;LFW}923D226Hbp7$`V4iRL9I{orv75pMVA|7DQRNF|qv;iW2^Q-t z(3Rf|?;lt@SY2xjov`WuW2bhsSIMH*IQG*V#~*F4%$>LFZ4{R{aUHrWX7%7a`sexF z>5D&;Z#W7%R?E89V>qQwz{46xax3wSTETr*wXDdlC<$aA=x6qex7NX4oqDE$JqI)d z%tf0l;xJ_E?K8z|XCsL78mdVhQ{`r69A$R#MxWA!MW4~aw@qARoYjfj%`5YXC(bPO z)K+(6n$;#XJC8_&3S4x$|9bis9!$0x2|uvB!#3dxjzI2gWW2k5Uiu*xnHP>fH&h*e zZ5JEz<8HC2SyI^$gp5Tl9M@Hpewb30iaPP;gv&Y$d5yymUVPfB

fjONBuhm(1T) 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 literal 0 HcmV?d00001 From fd87798f08f61f79f84ff901cab68280bd96ac09 Mon Sep 17 00:00:00 2001 From: Stefan Judis Date: Sat, 9 Nov 2024 20:46:05 +0100 Subject: [PATCH 05/19] Media 2024 queries (#3738) * Add web almanac 2024 SQL queries * Update video_source_types.todo.sql Linter prefers ' * Update video_media.sql Fixing inconsistencies in linter * Update video_media.sql Linter * Update video_formats.sql removing TABLESAMPLE SYSTEM (0.001 PERCENT) --------- Co-authored-by: Mike Gifford --- sql/2024/media/animated_gif_bpp.sql | 82 +++++++++ sql/2024/media/animated_gif_count.sql | 39 ++++ sql/2024/media/animated_gif_framecount.sql | 50 +++++ sql/2024/media/at_least_one_image_request.sql | 13 ++ sql/2024/media/at_least_one_img.sql | 31 ++++ sql/2024/media/bytes_and_dimensions.sql | 174 ++++++++++++++++++ .../media/bytes_and_dimensions_by_format.sql | 174 ++++++++++++++++++ sql/2024/media/color_spaces_and_depth.sql | 74 ++++++++ sql/2024/media/image_0x0.sql | 48 +++++ sql/2024/media/image_1x1.sql | 48 +++++ sql/2024/media/image_alt.sql | 49 +++++ sql/2024/media/image_cdn_usage.sql | 37 ++++ sql/2024/media/image_decode_usage.sql | 48 +++++ sql/2024/media/image_layout_widths.sql | 42 +++++ .../media/image_sizes_attribute_strings.sql | 24 +++ .../image_sizes_per_page_accuracy_impact.sql | 89 +++++++++ .../image_sizing_extrinsic_intrinsic.sql | 37 ++++ sql/2024/media/image_srcset_candidates.sql | 39 ++++ sql/2024/media/image_srcset_densities.sql | 41 +++++ sql/2024/media/image_srcset_descriptor.sql | 41 +++++ sql/2024/media/image_srcset_sizes.sql | 39 ++++ .../media/image_srcset_sizes_accuracy_pct.sql | 39 ++++ ...srcset_sizes_per_image_accuracy_impact.sql | 67 +++++++ sql/2024/media/img_sizes_explicit_errors.sql | 44 +++++ sql/2024/media/img_with_dimensions.sql | 53 ++++++ sql/2024/media/img_xdomain.sql | 36 ++++ sql/2024/media/imgs_per_page.sql | 39 ++++ .../media/largest_image_per_page_bytes.sql | 44 +++++ .../media/largest_image_per_page_layout.sql | 44 +++++ .../media/largest_image_per_page_pixels.sql | 44 +++++ .../media/lazy_loading_adoption_over_time.sql | 19 ++ sql/2024/media/lcp_element_data.sql | 96 ++++++++++ sql/2024/media/media_formats.sql | 54 ++++++ sql/2024/media/picture_distribution.sql | 24 +++ .../media/picture_format_distribution.sql | 59 ++++++ sql/2024/media/picture_orientation.sql | 40 ++++ sql/2024/media/picture_switching.sql | 33 ++++ .../media/picture_using_min_resolution.sql | 41 +++++ sql/2024/media/pixel_volume.sql | 59 ++++++ sql/2024/media/portrait_landscape_square.sql | 64 +++++++ sql/2024/media/score_progressive_jpeg.sql | 22 +++ sql/2024/media/srcset_density_coverage.sql | 76 ++++++++ sql/2024/media/top_aspect_ratios.sql | 71 +++++++ sql/2024/media/video_adoption.sql | 20 ++ sql/2024/media/video_attribute_count.sql | 67 +++++++ sql/2024/media/video_attribute_names.sql | 46 +++++ sql/2024/media/video_attribute_widths.sql | 59 ++++++ sql/2024/media/video_autoplay_muted.sql | 43 +++++ sql/2024/media/video_durations.sql | 59 ++++++ sql/2024/media/video_ext.todo.sql | 9 + sql/2024/media/video_formats.sql | 46 +++++ sql/2024/media/video_media.sql | 65 +++++++ sql/2024/media/video_number_of_sources.sql | 62 +++++++ sql/2024/media/video_preload_values.todo.sql | 46 +++++ sql/2024/media/video_source_formats.sql | 64 +++++++ sql/2024/media/video_source_types.todo.sql | 22 +++ sql/2024/media/video_styles.sql | 58 ++++++ .../media/video_tag_and_js_player.todo.sql | 65 +++++++ 58 files changed, 3018 insertions(+) create mode 100644 sql/2024/media/animated_gif_bpp.sql create mode 100644 sql/2024/media/animated_gif_count.sql create mode 100644 sql/2024/media/animated_gif_framecount.sql create mode 100644 sql/2024/media/at_least_one_image_request.sql create mode 100644 sql/2024/media/at_least_one_img.sql create mode 100644 sql/2024/media/bytes_and_dimensions.sql create mode 100644 sql/2024/media/bytes_and_dimensions_by_format.sql create mode 100644 sql/2024/media/color_spaces_and_depth.sql create mode 100644 sql/2024/media/image_0x0.sql create mode 100644 sql/2024/media/image_1x1.sql create mode 100644 sql/2024/media/image_alt.sql create mode 100644 sql/2024/media/image_cdn_usage.sql create mode 100644 sql/2024/media/image_decode_usage.sql create mode 100644 sql/2024/media/image_layout_widths.sql create mode 100644 sql/2024/media/image_sizes_attribute_strings.sql create mode 100644 sql/2024/media/image_sizes_per_page_accuracy_impact.sql create mode 100644 sql/2024/media/image_sizing_extrinsic_intrinsic.sql create mode 100644 sql/2024/media/image_srcset_candidates.sql create mode 100644 sql/2024/media/image_srcset_densities.sql create mode 100644 sql/2024/media/image_srcset_descriptor.sql create mode 100644 sql/2024/media/image_srcset_sizes.sql create mode 100644 sql/2024/media/image_srcset_sizes_accuracy_pct.sql create mode 100644 sql/2024/media/image_srcset_sizes_per_image_accuracy_impact.sql create mode 100644 sql/2024/media/img_sizes_explicit_errors.sql create mode 100644 sql/2024/media/img_with_dimensions.sql create mode 100644 sql/2024/media/img_xdomain.sql create mode 100644 sql/2024/media/imgs_per_page.sql create mode 100644 sql/2024/media/largest_image_per_page_bytes.sql create mode 100644 sql/2024/media/largest_image_per_page_layout.sql create mode 100644 sql/2024/media/largest_image_per_page_pixels.sql create mode 100644 sql/2024/media/lazy_loading_adoption_over_time.sql create mode 100644 sql/2024/media/lcp_element_data.sql create mode 100644 sql/2024/media/media_formats.sql create mode 100644 sql/2024/media/picture_distribution.sql create mode 100644 sql/2024/media/picture_format_distribution.sql create mode 100644 sql/2024/media/picture_orientation.sql create mode 100644 sql/2024/media/picture_switching.sql create mode 100644 sql/2024/media/picture_using_min_resolution.sql create mode 100644 sql/2024/media/pixel_volume.sql create mode 100644 sql/2024/media/portrait_landscape_square.sql create mode 100644 sql/2024/media/score_progressive_jpeg.sql create mode 100644 sql/2024/media/srcset_density_coverage.sql create mode 100644 sql/2024/media/top_aspect_ratios.sql create mode 100644 sql/2024/media/video_adoption.sql create mode 100644 sql/2024/media/video_attribute_count.sql create mode 100644 sql/2024/media/video_attribute_names.sql create mode 100644 sql/2024/media/video_attribute_widths.sql create mode 100644 sql/2024/media/video_autoplay_muted.sql create mode 100644 sql/2024/media/video_durations.sql create mode 100644 sql/2024/media/video_ext.todo.sql create mode 100644 sql/2024/media/video_formats.sql create mode 100644 sql/2024/media/video_media.sql create mode 100644 sql/2024/media/video_number_of_sources.sql create mode 100644 sql/2024/media/video_preload_values.todo.sql create mode 100644 sql/2024/media/video_source_formats.sql create mode 100644 sql/2024/media/video_source_types.todo.sql create mode 100644 sql/2024/media/video_styles.sql create mode 100644 sql/2024/media/video_tag_and_js_player.todo.sql diff --git a/sql/2024/media/animated_gif_bpp.sql b/sql/2024/media/animated_gif_bpp.sql new file mode 100644 index 00000000000..7aa492a9bd3 --- /dev/null +++ b/sql/2024/media/animated_gif_bpp.sql @@ -0,0 +1,82 @@ +#standardSQL +# what is the bpp of animated vs non-animated GIFs? +# animated_gif_bpp.sql + + +# ImageMagick reports big images as having, e.g., "1.29097M" pixels. This means ~1.2 million pixels, but BigQuery doesn't know that. +CREATE TEMPORARY FUNCTION magickPixels(imageMagickNumberString STRING) +RETURNS INT64 +LANGUAGE js AS r''' + +if (!imageMagickNumberString) { return null; } +const matched = imageMagickNumberString.match(/([\d\.]+)(\w+)?$/); +const multiples = { + 'K': 1e3, + 'M': 1e6, + 'G': 1e9, + 'T': 1e12 +} +if ( matched && matched[1] ) { + return Math.round( + parseFloat( matched[1] ) * ( multiples[ matched[2] ] || 1 ) + ); +} else { + return null; +} + +'''; + +# ImageMagick reports bytesizes in a friendly, human readable format. Just return bytes +CREATE TEMPORARY FUNCTION magickBytes(imageMagickNumberString STRING) +RETURNS INT64 +LANGUAGE js AS r''' + +if (!imageMagickNumberString) { return 0; } +const matched = imageMagickNumberString.match(/([\d\.]+)(\w+)$/); +const multiples = { + 'B': 1, + 'KB': 1e3, + 'MB': 1e6, + 'GB': 1e9, + 'TB': 1e12 +} +if ( matched && matched[1] && matched[2] ) { + return Math.round( + parseFloat( matched[1] ) * multiples[ matched[2] ] + ); +} else { + return null; +} + +'''; + +WITH gifs AS ( + SELECT + _TABLE_SUFFIX AS client, + CAST(JSON_VALUE(payload, '$._image_details.animated') AS BOOL) AS is_animated, + (magickBytes(JSON_VALUE(payload, '$._image_details.magick.filesize')) * 8) / + magickPixels(JSON_VALUE(payload, '$._image_details.magick.numberPixels')) AS bits_per_pixel + FROM + `requests.2024_06_01_*` + WHERE + JSON_VALUE(payload, '$._image_details.detected_type') = 'gif' AND + magickPixels(JSON_VALUE(payload, '$._image_details.magick.numberPixels')) > 1 AND + JSON_VALUE(payload, '$._image_details.animated') IS NOT NULL +) + +SELECT + percentile, + client, + is_animated, + APPROX_QUANTILES(bits_per_pixel, 1000)[OFFSET(percentile * 10)] AS bpp +FROM + gifs, + UNNEST([10, 25, 50, 75, 90]) AS percentile +GROUP BY + percentile, + client, + is_animated +ORDER BY + percentile, + client, + is_animated diff --git a/sql/2024/media/animated_gif_count.sql b/sql/2024/media/animated_gif_count.sql new file mode 100644 index 00000000000..01af1506452 --- /dev/null +++ b/sql/2024/media/animated_gif_count.sql @@ -0,0 +1,39 @@ +#standardSQL +# what percent of gifs are animated? +# animated_gif_count.sql + +# ImageMagick reports big images as having, e.g., "1.29097M" pixels. This means ~1.2 million pixels, but BigQuery doesn't know that. +CREATE TEMPORARY FUNCTION magickPixels(imageMagickNumberString STRING) +RETURNS INT64 +LANGUAGE js AS r''' + +if (!imageMagickNumberString) { return null; } +const matched = imageMagickNumberString.match(/([\d\.]+)(\w+)?$/); +const multiples = { + 'K': 1e3, + 'M': 1e6, + 'G': 1e9, + 'T': 1e12 +} +if ( matched && matched[1] ) { + return Math.round( + parseFloat( matched[1] ) * ( multiples[ matched[2] ] || 1 ) + ); +} else { + return null; +} + +'''; + +SELECT + _TABLE_SUFFIX AS client, + COUNT(0) AS total_gifs, + COUNTIF(CAST(JSON_VALUE(payload, '$._image_details.animated') AS BOOL)) AS total_animated_gifs, + COUNTIF(CAST(JSON_VALUE(payload, '$._image_details.animated') AS BOOL)) / COUNT(0) AS pct_animated_gifs +FROM + `requests.2024_06_01_*` +WHERE + JSON_VALUE(payload, '$._image_details.detected_type') = 'gif' AND + magickPixels(JSON_VALUE(payload, '$._image_details.magick.numberPixels')) > 1 +GROUP BY + client diff --git a/sql/2024/media/animated_gif_framecount.sql b/sql/2024/media/animated_gif_framecount.sql new file mode 100644 index 00000000000..531052b462b --- /dev/null +++ b/sql/2024/media/animated_gif_framecount.sql @@ -0,0 +1,50 @@ +#standardSQL +# distribution of animated GIF framecounts +# animated_gif_framecount.sql + +# ImageMagick reports big images as having, e.g., "1.29097M" pixels. This means ~1.2 million pixels, but BigQuery doesn't know that. +CREATE TEMPORARY FUNCTION magickPixels(imageMagickNumberString STRING) +RETURNS INT64 +LANGUAGE js AS r''' + +if (!imageMagickNumberString) { return null; } +const matched = imageMagickNumberString.match(/([\d\.]+)(\w+)?$/); +const multiples = { + 'K': 1e3, + 'M': 1e6, + 'G': 1e9, + 'T': 1e12 +} +if ( matched && matched[1] ) { + return Math.round( + parseFloat( matched[1] ) * ( multiples[ matched[2] ] || 1 ) + ); +} else { + return null; +} + +'''; + +WITH framecounts AS ( + SELECT + _TABLE_SUFFIX AS client, + CAST(JSON_VALUE(payload, '$._image_details.metadata.GIF.FrameCount') AS NUMERIC) AS framecount + FROM `requests.2024_06_01_*` + WHERE + JSON_VALUE(payload, '$._image_details.metadata.GIF.FrameCount') IS NOT NULL AND + magickPixels(JSON_VALUE(payload, '$._image_details.magick.numberPixels')) > 1 +) + +SELECT + percentile, + client, + APPROX_QUANTILES(framecount, 1000)[OFFSET(percentile * 10)] AS framecount +FROM + framecounts, + UNNEST([10, 25, 50, 75, 90, 100]) AS percentile +GROUP BY + percentile, + client +ORDER BY + percentile, + client diff --git a/sql/2024/media/at_least_one_image_request.sql b/sql/2024/media/at_least_one_image_request.sql new file mode 100644 index 00000000000..9d514b663b9 --- /dev/null +++ b/sql/2024/media/at_least_one_image_request.sql @@ -0,0 +1,13 @@ +#standardSQL +# What % of pages load at least one image? +# ✅ at_least_one_image_request.sql + +SELECT + _TABLE_SUFFIX AS client, + COUNTIF(reqImg > 0) AS atLeastOneImgReqCount, + COUNT(0) AS total, + SAFE_DIVIDE(COUNTIF(reqImg > 0), COUNT(0)) AS atLeastOneImgReqPct +FROM + `httparchive.summary_pages.2024_06_01_*` +GROUP BY + client diff --git a/sql/2024/media/at_least_one_img.sql b/sql/2024/media/at_least_one_img.sql new file mode 100644 index 00000000000..420af6df10f --- /dev/null +++ b/sql/2024/media/at_least_one_img.sql @@ -0,0 +1,31 @@ +#standardSQL +# What % of pages have at least one ? +# at_least_one_img.sql + +CREATE TEMPORARY FUNCTION numberOfImages(images_string STRING) +RETURNS INT64 +LANGUAGE js AS ''' +try { + return JSON.parse(images_string).filter( i => parseInt(i.approximateResourceWidth) > 1 && parseInt(i.approximateResourceWidth) > 1 ).length; +} catch { + return 0; +} +'''; + +WITH numImgs AS ( + SELECT + _TABLE_SUFFIX AS client, + numberOfImages(JSON_QUERY(JSON_VALUE(payload, '$._responsive_images'), '$.responsive-images')) AS numberOfImages + FROM + `httparchive.pages.2024_06_01_*` +) + +SELECT + client, + COUNTIF(numberOfImages > 0) AS atLeastOneCount, + COUNT(0) AS total, + SAFE_DIVIDE(COUNTIF(numberOfImages > 0), COUNT(0)) AS atLeastOnePct +FROM + numImgs +GROUP BY + client diff --git a/sql/2024/media/bytes_and_dimensions.sql b/sql/2024/media/bytes_and_dimensions.sql new file mode 100644 index 00000000000..9461f755995 --- /dev/null +++ b/sql/2024/media/bytes_and_dimensions.sql @@ -0,0 +1,174 @@ +#standardSQL +# Measuring img loaded bytes and dimensions +# bytes_and_dimensions.sql + +CREATE TEMPORARY FUNCTION getSrcsetInfo(responsiveImagesJsonString STRING) +RETURNS ARRAY> +LANGUAGE js AS ''' + +function pithyType( { contentType, url } ) { + const subtypeMap = { + 'svg+xml': 'svg', + 'svgz': 'svg', + 'jpeg': 'jpg', + 'jfif': 'jpg', + 'x-png': 'png', + 'vnd.microsoft.icon': 'ico', + 'x-icon': 'ico', + 'jxr': 'jxr', + 'vnd.ms-photo': 'jxr', + 'hdp': 'jxr', + 'wdp': 'jxr', + 'jpf': 'jp2', + 'jpx': 'jp2', + 'jpm': 'jp2', + 'mj2': 'jp2', + 'x-jp2-container': 'jp2', + 'x-jp2-codestream': 'jp2', + 'x-jpeg2000-image': 'jp2', + 'heic': 'heif', + 'x-ms-bmp': 'bmp', + 'x-pict': 'pict', + 'tif': 'tiff', + 'x-tif': 'tiff', + 'x-tiff': 'tiff', + 'vnd.mozilla.apng': 'apng', + // identities + 'apng': 'apng', + 'jpg': 'jpg', + 'jp2': 'jp2', + 'png': 'png', + 'gif': 'gif', + 'ico': 'ico', + 'webp': 'webp', + 'avif': 'avif', + 'tiff': 'tiff', + 'flif': 'flif', + 'heif': 'heif', + 'jxl': 'jxl', + 'avif-sequence': 'avif-sequence', // keep separate from single frames... + 'heic-sequence': 'heic-sequence', + 'bmp': 'bmp', + 'pict': 'pict' + }; + + function normalizeSubtype( subtype ) { + if ( subtypeMap[ subtype ] ) { + return subtypeMap[ subtype ]; + } + return 'unknown'; // switch between: + // `subtype` + // to see everything, check if there's anything else worth capturing + // `'unknown'` + // to make results manageable + } + + // if it's a data url, take the mime type from there, done. + if ( url && + typeof url === "string" ) { + const match = url.toLowerCase().match( /^data:image\\/([\\w\\-\\.\\+]+)/ ); + if ( match && match[ 1 ] ) { + return normalizeSubtype( match[ 1 ] ); + } + } + + // if we get a content-type header, use it! + if ( contentType && + typeof contentType === "string" ) { + const match = contentType.toLowerCase().match( /image\\/([\\w\\-\\.\\+]+)/ ); + if ( match && match[ 1 ] ) { + return normalizeSubtype( match[ 1 ] ); + } + } + + // otherwise fall back to extension in the URL + if ( url && + typeof url === "string" ) { + const splitOnSlashes = url.split("/"); + if ( splitOnSlashes.length > 1 ) { + const afterLastSlash = splitOnSlashes[ splitOnSlashes.length - 1 ], + splitOnDots = afterLastSlash.split("."); + if ( splitOnDots.length > 1 ) { + return normalizeSubtype( + splitOnDots[ splitOnDots.length - 1 ] + .toLowerCase() + .replace( /^(\\w+)[\\?\\&\\#].*/, '$1' ) // strip query params + ); + } + } + } + + // otherwise throw up our hands + return 'unknown'; + } + + const parsed = JSON.parse( responsiveImagesJsonString ); + if ( parsed && parsed.map ) { + const dataRegEx = new RegExp('^data'); + return parsed.map( d => ({ + imgURL: d.url, + approximateResourceWidth: Math.floor( d.approximateResourceWidth || 0 ), + approximateResourceHeight: Math.floor( d.approximateResourceHeight || 0 ), + byteSize: Math.floor( d.byteSize || 0 ), + bitsPerPixel: parseFloat( d.bitsPerPixel || 0 ), + isPixel: d.approximateResourceWidth == 1 && d.approximateResourceHeight == 1, + isDataURL: dataRegEx.test(d.url), + resourceFormat: pithyType({ contentType: d.mimeType, url: d.url }) + }) ); + } +'''; + +WITH imgs AS ( + SELECT + _TABLE_SUFFIX AS client, + url AS pageURL, + imgURL, + approximateResourceWidth, + approximateResourceHeight, + byteSize, + bitsPerPixel, + isPixel, + isDataURL, + (approximateResourceWidth * approximateResourceHeight) / 1000000 AS megapixels, + (approximateResourceWidth / approximateResourceHeight) AS aspectRatio, + resourceFormat + FROM + `httparchive.pages.2024_06_01_*`, + UNNEST(getSrcsetInfo(JSON_QUERY(JSON_VALUE(payload, '$._responsive_images'), '$.responsive-images'))) +), + +percentiles AS ( + SELECT + client, + APPROX_QUANTILES(approximateResourceWidth, 1000) AS resourceWidthPercentiles, + APPROX_QUANTILES(approximateResourceHeight, 1000) AS resourceHeightPercentiles, + APPROX_QUANTILES(aspectRatio, 1000) AS aspectRatioPercentiles, + APPROX_QUANTILES(megapixels, 1000) AS megapixelsPercentiles, + APPROX_QUANTILES(byteSize, 1000) AS byteSizePercentiles, + APPROX_QUANTILES(bitsPerPixel, 1000) AS bitsPerPixelPercentiles, + COUNT(0) AS imgCount + FROM + imgs + WHERE + approximateResourceWidth > 1 AND + approximateResourceHeight > 1 + GROUP BY + client +) + +SELECT + percentile, + client, + imgCount, + resourceWidthPercentiles[OFFSET(percentile * 10)] AS resourceWidth, + resourceHeightPercentiles[OFFSET(percentile * 10)] AS resourceHeight, + aspectRatioPercentiles[OFFSET(percentile * 10)] AS aspectRatio, + megapixelsPercentiles[OFFSET(percentile * 10)] AS megapixels, + byteSizePercentiles[OFFSET(percentile * 10)] AS byteSize, + bitsPerPixelPercentiles[OFFSET(percentile * 10)] AS bitsPerPixel +FROM + percentiles, + UNNEST([0, 10, 25, 50, 75, 90, 100]) AS percentile +ORDER BY + imgCount DESC, + percentile diff --git a/sql/2024/media/bytes_and_dimensions_by_format.sql b/sql/2024/media/bytes_and_dimensions_by_format.sql new file mode 100644 index 00000000000..8bca387cbf4 --- /dev/null +++ b/sql/2024/media/bytes_and_dimensions_by_format.sql @@ -0,0 +1,174 @@ +#standardSQL +# Measuring img loaded bytes and dimensions, broken down by detected format +# bytes_and_dimensions_by_format.sql + +CREATE TEMPORARY FUNCTION getSrcsetInfo(responsiveImagesJsonString STRING) +RETURNS ARRAY> +LANGUAGE js AS ''' + +function pithyType( { contentType, url } ) { + const subtypeMap = { + 'svg+xml': 'svg', + 'svgz': 'svg', + 'jpeg': 'jpg', + 'jfif': 'jpg', + 'x-png': 'png', + 'vnd.microsoft.icon': 'ico', + 'x-icon': 'ico', + 'jxr': 'jxr', + 'vnd.ms-photo': 'jxr', + 'hdp': 'jxr', + 'wdp': 'jxr', + 'jpf': 'jp2', + 'jpx': 'jp2', + 'jpm': 'jp2', + 'mj2': 'jp2', + 'x-jp2-container': 'jp2', + 'x-jp2-codestream': 'jp2', + 'x-jpeg2000-image': 'jp2', + 'heic': 'heif', + 'x-ms-bmp': 'bmp', + 'x-pict': 'pict', + 'tif': 'tiff', + 'x-tif': 'tiff', + 'x-tiff': 'tiff', + 'vnd.mozilla.apng': 'apng', + // identities + 'apng': 'apng', + 'jpg': 'jpg', + 'jp2': 'jp2', + 'png': 'png', + 'gif': 'gif', + 'ico': 'ico', + 'webp': 'webp', + 'avif': 'avif', + 'tiff': 'tiff', + 'flif': 'flif', + 'heif': 'heif', + 'jxl': 'jxl', + 'avif-sequence': 'avif-sequence', // keep separate from single frames... + 'heic-sequence': 'heic-sequence', + 'bmp': 'bmp', + 'pict': 'pict' + }; + + function normalizeSubtype( subtype ) { + if ( subtypeMap[ subtype ] ) { + return subtypeMap[ subtype ]; + } + return 'unknown'; // switch between: + // `subtype` + // to see everything, check if there's anything else worth capturing + // `'unknown'` + // to make results manageable + } + + // if it's a data url, take the mime type from there, done. + if ( url && typeof url === "string" ) { + const match = url.toLowerCase().match( /^data:image\\/([\\w\\-\\.\\+]+)/ ); + if ( match && match[ 1 ] ) { + return normalizeSubtype( match[ 1 ] ); + } + } + + // if we get a content-type header, use it! + if ( contentType && typeof contentType === "string" ) { + const match = contentType.toLowerCase().match( /image\\/([\\w\\-\\.\\+]+)/ ); + if ( match && match[ 1 ] ) { + return normalizeSubtype( match[ 1 ] ); + } + } + + // otherwise fall back to extension in the URL + if ( url && typeof url === "string" ) { + const splitOnSlashes = url.split("/"); + if ( splitOnSlashes.length > 1 ) { + const afterLastSlash = splitOnSlashes[ splitOnSlashes.length - 1 ], + splitOnDots = afterLastSlash.split("."); + if ( splitOnDots.length > 1 ) { + return normalizeSubtype( + splitOnDots[ splitOnDots.length - 1 ] + .toLowerCase() + .replace( /^(\\w+)[\\?\\&\\#].*/, '$1' ) // strip query params + ); + } + } + } + + // otherwise throw up our hands + return 'unknown'; + } + + const parsed = JSON.parse( responsiveImagesJsonString ); + if ( parsed && parsed.map ) { + const dataRegEx = new RegExp('^data'); + return parsed.map( d => ({ + imgURL: d.url, + approximateResourceWidth: Math.floor( d.approximateResourceWidth || 0 ), + approximateResourceHeight: Math.floor( d.approximateResourceHeight || 0 ), + byteSize: Math.floor( d.byteSize || 0 ), + bitsPerPixel: parseFloat( d.bitsPerPixel || 0 ), + isPixel: d.approximateResourceWidth == 1 && d.approximateResourceHeight == 1, + isDataURL: dataRegEx.test(d.url), + resourceFormat: pithyType({ contentType: d.mimeType, url: d.url }) + }) ); + } +'''; + +WITH imgs AS ( + SELECT + _TABLE_SUFFIX AS client, + url AS pageURL, + imgURL, + approximateResourceWidth, + approximateResourceHeight, + byteSize, + bitsPerPixel, + isPixel, + isDataURL, + (approximateResourceWidth * approximateResourceHeight) / 1000000 AS megapixels, + (approximateResourceWidth / approximateResourceHeight) AS aspectRatio, + resourceFormat + FROM + `httparchive.pages.2024_06_01_*`, + UNNEST(getSrcsetInfo(JSON_QUERY(JSON_VALUE(payload, '$._responsive_images'), '$.responsive-images'))) +), + +percentiles AS ( + SELECT + client, + resourceFormat, + APPROX_QUANTILES(approximateResourceWidth, 1000) AS resourceWidthPercentiles, + APPROX_QUANTILES(approximateResourceHeight, 1000) AS resourceHeightPercentiles, + APPROX_QUANTILES(aspectRatio, 1000) AS aspectRatioPercentiles, + APPROX_QUANTILES(megapixels, 1000) AS megapixelsPercentiles, + APPROX_QUANTILES(byteSize, 1000) AS byteSizePercentiles, + APPROX_QUANTILES(bitsPerPixel, 1000) AS bitsPerPixelPercentiles, + COUNT(0) AS imgCount + FROM + imgs + WHERE + approximateResourceWidth > 1 AND + approximateResourceHeight > 1 + GROUP BY + client, + resourceFormat +) + +SELECT + percentile, + client, + resourceFormat, + imgCount, + resourceWidthPercentiles[OFFSET(percentile * 10)] AS resourceWidth, + resourceHeightPercentiles[OFFSET(percentile * 10)] AS resourceHeight, + aspectRatioPercentiles[OFFSET(percentile * 10)] AS aspectRatio, + megapixelsPercentiles[OFFSET(percentile * 10)] AS megapixels, + byteSizePercentiles[OFFSET(percentile * 10)] AS byteSize, + bitsPerPixelPercentiles[OFFSET(percentile * 10)] AS bitsPerPixel +FROM + percentiles, + UNNEST([0, 10, 25, 50, 75, 90, 100]) AS percentile +ORDER BY + imgCount DESC, + percentile diff --git a/sql/2024/media/color_spaces_and_depth.sql b/sql/2024/media/color_spaces_and_depth.sql new file mode 100644 index 00000000000..3ba42cbac07 --- /dev/null +++ b/sql/2024/media/color_spaces_and_depth.sql @@ -0,0 +1,74 @@ +#standardSQL +# info on color depth and spaces – will need to be further filtered/aggregated, but this is everything +# color_spaces_and_depth.sql + +CREATE TEMPORARY FUNCTION magickMillions(imageMagickNumberString STRING) +RETURNS FLOAT64 +LANGUAGE js AS r''' + +if (!imageMagickNumberString) { return 0; } +const matched = imageMagickNumberString.match( /(\d+)\.?(\d+)?M$/ ); +if ( matched && matched[1] ) { + if ( matched[2] ) { + // input had a decimal (e.g. "1.23456M") + return `${ matched[1] }.${ matched[2] }e6`; + } else { + // input did not have a decimal (e.g. "1M") + return `${ matched[1] }e6`; + } +} else { + return imageMagickNumberString; +} + +'''; + +WITH color_info AS ( + SELECT + _TABLE_SUFFIX AS client, + JSON_EXTRACT(payload, '$._image_details.magick.depth') AS color_depth, + JSON_EXTRACT(payload, '$._image_details.magick.colorspace') AS color_space, + JSON_EXTRACT(payload, '$._image_details.magick.properties.icc:description') AS description + FROM + `requests.2024_06_01_*` + WHERE + JSON_QUERY(payload, '$._image_details.magick.colorspace') IS NOT NULL AND + magickMillions(JSON_VALUE(payload, '$._image_details.magick.numberPixels')) > 1 +), + +totals AS ( + SELECT + client, + COUNT(0) AS total + FROM + color_info + GROUP BY + client +), + +counts AS ( + SELECT + client, + color_depth, + color_space, + description, + COUNT(0) AS count + FROM + color_info + GROUP BY + client, + color_depth, + color_space, + description +) + +SELECT + *, + count / total AS pct +FROM + counts +JOIN + totals +USING + (client) +ORDER BY + count DESC diff --git a/sql/2024/media/image_0x0.sql b/sql/2024/media/image_0x0.sql new file mode 100644 index 00000000000..f23f2c2e0a8 --- /dev/null +++ b/sql/2024/media/image_0x0.sql @@ -0,0 +1,48 @@ +#standardSQL +# s whose sources have no dimensions (mostly not loaded because loading=lazy) +# image_0x0.sql + +CREATE TEMPORARY FUNCTION getPixelInfo(responsiveImagesJsonString STRING) +RETURNS ARRAY> +LANGUAGE js AS ''' +const parsed = JSON.parse(responsiveImagesJsonString); +if (parsed && parsed.map) { + const dataRegEx = new RegExp('^data'); + return parsed.map(d => ({ + isPixel: d.approximateResourceWidth == 0 && d.approximateResourceHeight == 0, + isDataURL: dataRegEx.test(d.url) + })); +} +'''; + +WITH imgs AS ( + SELECT + _TABLE_SUFFIX AS client, + isPixel, + isDataURL + FROM + `httparchive.pages.2024_06_01_*`, + UNNEST(getPixelInfo(JSON_QUERY(JSON_VALUE(payload, '$._responsive_images'), '$.responsive-images'))) +), + +counts AS ( + SELECT + client, + COUNT(0) AS total_imgs, + COUNTIF(isPixel) AS zero_pixel_imgs, + COUNTIF(isPixel AND isDataURL) AS zero_pixel_data_urls + FROM + imgs + GROUP BY + client +) + +SELECT + client, + total_imgs, + zero_pixel_imgs, + zero_pixel_data_urls, + SAFE_DIVIDE(zero_pixel_imgs, total_imgs) AS pct_zero_pixel_imgs, + SAFE_DIVIDE(zero_pixel_data_urls, total_imgs) AS pct_zero_pixel_data_urls +FROM + counts diff --git a/sql/2024/media/image_1x1.sql b/sql/2024/media/image_1x1.sql new file mode 100644 index 00000000000..9c78abd2649 --- /dev/null +++ b/sql/2024/media/image_1x1.sql @@ -0,0 +1,48 @@ +#standardSQL +# s whose sources are 1x1 (tracking beacons, mostly) +# image_1x1.sql + +CREATE TEMPORARY FUNCTION getPixelInfo(responsiveImagesJsonString STRING) +RETURNS ARRAY> +LANGUAGE js AS ''' +const parsed = JSON.parse(responsiveImagesJsonString); +if (parsed && parsed.map) { + const dataRegEx = new RegExp('^data'); + return parsed.map(d => ({ + isPixel: d.approximateResourceWidth == 1 && d.approximateResourceHeight == 1, + isDataURL: dataRegEx.test(d.url) + })); +} +'''; + +WITH imgs AS ( + SELECT + _TABLE_SUFFIX AS client, + isPixel, + isDataURL + FROM + `httparchive.pages.2024_06_01_*`, + UNNEST(getPixelInfo(JSON_QUERY(JSON_VALUE(payload, '$._responsive_images'), '$.responsive-images'))) +), + +counts AS ( + SELECT + client, + COUNT(0) AS total_imgs, + COUNTIF(isPixel) AS one_pixel_imgs, + COUNTIF(isPixel AND isDataURL) AS one_pixel_data_urls + FROM + imgs + GROUP BY + client +) + +SELECT + client, + total_imgs, + one_pixel_imgs, + one_pixel_data_urls, + SAFE_DIVIDE(one_pixel_imgs, total_imgs) AS pct_one_pixel_imgs, + SAFE_DIVIDE(one_pixel_data_urls, total_imgs) AS pct_one_pixel_data_urls +FROM + counts diff --git a/sql/2024/media/image_alt.sql b/sql/2024/media/image_alt.sql new file mode 100644 index 00000000000..7f722189b7b --- /dev/null +++ b/sql/2024/media/image_alt.sql @@ -0,0 +1,49 @@ +#standardSQL +# usage of alt text in images +# image_alt.sql + +CREATE TEMPORARY FUNCTION get_markup_info(markup_string STRING) +RETURNS STRUCT< + total INT64, + alt_missing INT64, + alt_blank INT64, + alt_present INT64, + decode_lazy INT64 +> LANGUAGE js AS ''' +var result = {}; +try { + var markup = JSON.parse(markup_string); + + if (Array.isArray(markup) || typeof markup != 'object') return result; + + result.total = markup.images.img.total; + result.alt_missing = markup.images.img.alt.missing; + result.alt_blank = markup.images.img.alt.blank; + result.alt_present = markup.images.img.alt.present; + result.decode_lazy = markup.images.img.decoding || 0; + +} catch (e) {} +return result; +'''; + +SELECT + client, + SAFE_DIVIDE(COUNTIF(markup_info.total > 0), COUNT(0)) AS pages_with_img_pct, + SAFE_DIVIDE(COUNTIF(markup_info.alt_missing > 0), COUNT(0)) AS pages_with_alt_missing_pct, + SAFE_DIVIDE(COUNTIF(markup_info.alt_blank > 0), COUNT(0)) AS pages_with_alt_blank_pct, + SAFE_DIVIDE(COUNTIF(markup_info.alt_present > 0), COUNT(0)) AS pages_with_alt_present_pct, + SUM(markup_info.total) AS img_total, + SAFE_DIVIDE(SUM(markup_info.alt_missing), SUM(markup_info.total)) AS imgs_alt_missing_pct, + SAFE_DIVIDE(SUM(markup_info.alt_blank), SUM(markup_info.total)) AS img_alt_blank_pct, + SAFE_DIVIDE(SUM(markup_info.alt_present), SUM(markup_info.total)) AS img_alt_present_pct +FROM ( + SELECT + _TABLE_SUFFIX AS client, + url, + get_markup_info(JSON_EXTRACT_SCALAR(payload, '$._markup')) AS markup_info + FROM + `httparchive.pages.2024_06_01_*`) +GROUP BY + client +ORDER BY + client diff --git a/sql/2024/media/image_cdn_usage.sql b/sql/2024/media/image_cdn_usage.sql new file mode 100644 index 00000000000..ef4540b7b5e --- /dev/null +++ b/sql/2024/media/image_cdn_usage.sql @@ -0,0 +1,37 @@ +#standardSQL +# Looking for some obvious signs in the URL that the image is dynamically resized +# image_cdn_usage.sql + +CREATE TEMPORARY FUNCTION get_images(images_string STRING) +RETURNS ARRAY> +LANGUAGE js AS ''' +var result = []; +try { + var images = JSON.parse(images_string); + for (const img of images){ + result.push({ + url: img.url + }) + } +} catch (e) {} +return result; +'''; + +SELECT + client, + COUNT(DISTINCT pageUrl) AS pages, + COUNT(0) AS images, + SAFE_DIVIDE(COUNTIF(imgcdn1), COUNT(0)) AS img_with_cdn1_pct, + SAFE_DIVIDE(COUNTIF(imgcdn2), COUNT(0)) AS img_with_cdn2_pct +FROM ( + SELECT + _TABLE_SUFFIX AS client, + a.url AS pageUrl, + imageurl.url, + REGEXP_CONTAINS(imageurl.url, r'.*[,\/]w_\d+.*') AS imgcdn1, + REGEXP_CONTAINS(imageurl.url, r'\?.*w=.*') AS imgcdn2 + FROM + `httparchive.pages.2024_06_01_*` AS a, + UNNEST(get_images(JSON_EXTRACT_SCALAR(payload, '$._Images'))) AS imageurl) +GROUP BY + client diff --git a/sql/2024/media/image_decode_usage.sql b/sql/2024/media/image_decode_usage.sql new file mode 100644 index 00000000000..e793b6285a2 --- /dev/null +++ b/sql/2024/media/image_decode_usage.sql @@ -0,0 +1,48 @@ +#standardSQL +# What percent of s have decode=async? +# image_decode_usage.sql + +CREATE TEMPORARY FUNCTION get_decode_info(images_string STRING) +RETURNS STRUCT< + total INT64, + decode_async INT64 +> LANGUAGE js AS ''' +let result = {}; +try { + let images = JSON.parse(images_string); + if (!Array.isArray(images)) { + return {}; + } + + result.total = images.length; + result.decode_async = 0; + + for(let img of images) { + if(img.decoding === 'async'){ + result.decode_async += 1 + } + } +} catch (e) {} +return result; +'''; + +SELECT + client, + COUNT(0) AS pages_total, + SAFE_DIVIDE(COUNTIF(images_info.total > 0), COUNT(0)) AS pages_with_img_pct, + COUNTIF(images_info.decode_async > 0) AS pages_with_decode_async, + SAFE_DIVIDE(COUNTIF(images_info.decode_async > 0), COUNT(0)) AS pages_with_decode_async_pct, + SUM(images_info.total) AS img_total, + SUM(images_info.decode_async) AS imgs_with_decode_async, + SAFE_DIVIDE(SUM(images_info.decode_async), SUM(images_info.total)) AS imgs_with_decode_async_pct +FROM ( + SELECT + _TABLE_SUFFIX AS client, + url, + get_decode_info(JSON_EXTRACT_SCALAR(payload, '$._Images')) AS images_info + FROM + `httparchive.pages.2024_06_01_*`) +GROUP BY + client +ORDER BY + client diff --git a/sql/2024/media/image_layout_widths.sql b/sql/2024/media/image_layout_widths.sql new file mode 100644 index 00000000000..8b81c957f21 --- /dev/null +++ b/sql/2024/media/image_layout_widths.sql @@ -0,0 +1,42 @@ +#standardSQL +# Distribution of image layout widths +# image_layout_widths.sql + +CREATE TEMPORARY FUNCTION layoutDimensions(payload STRING) +RETURNS ARRAY> +LANGUAGE js AS ''' +try { + var $ = JSON.parse(payload); + var responsiveImages = JSON.parse($._responsive_images); + responsiveImages = responsiveImages['responsive-images']; + + return responsiveImages.map(({clientWidth, clientHeight}) => ({ + clientWidth, + clientHeight + })); +} catch (e) { + return []; +} +'''; + +SELECT + percentile, + client, + APPROX_QUANTILES(image.clientWidth, 1000)[OFFSET(percentile * 10)] AS clientWidth +FROM ( + SELECT + _TABLE_SUFFIX AS client, + image + FROM + `httparchive.pages.2024_06_01_*`, + UNNEST(layoutDimensions(payload)) AS image + WHERE + image.clientWidth > 1 +), +UNNEST([0, 10, 25, 50, 75, 90, 100]) AS percentile +GROUP BY + percentile, + client +ORDER BY + percentile, + client diff --git a/sql/2024/media/image_sizes_attribute_strings.sql b/sql/2024/media/image_sizes_attribute_strings.sql new file mode 100644 index 00000000000..ea4df6040a0 --- /dev/null +++ b/sql/2024/media/image_sizes_attribute_strings.sql @@ -0,0 +1,24 @@ +#standardSQL +# What are the most common values for sizes attributes (lots of auto!) +# ❕ Updated in 2024 to use all.requests instead of almanac.summary_response_bodies +# image_sizes_attribute_strings.sql + +SELECT + client, + sizes, + COUNT(0) AS freq, + SUM(COUNT(0)) OVER (PARTITION BY 0) AS total, + COUNT(0) / SUM(COUNT(0)) OVER (PARTITION BY 0) AS pct +FROM + `httparchive.all.requests`, + UNNEST(REGEXP_EXTRACT_ALL(response_body, r'(?im)<(?:source|img)[^>]*sizes=[\'"]?([^\'"]*)')) AS sizes +WHERE + date = '2024-06-01' AND + is_main_document +GROUP BY + client, + sizes +ORDER BY + freq DESC +LIMIT + 100 diff --git a/sql/2024/media/image_sizes_per_page_accuracy_impact.sql b/sql/2024/media/image_sizes_per_page_accuracy_impact.sql new file mode 100644 index 00000000000..0c5c08f9df3 --- /dev/null +++ b/sql/2024/media/image_sizes_per_page_accuracy_impact.sql @@ -0,0 +1,89 @@ +#standardSQL +# measure the impact of innacurate sizes attributes per page +# image_sizes_per_page_accuracy_impact.sql + +CREATE TEMPORARY FUNCTION pageUsesWDescriptors(payload STRING) +RETURNS BOOL +LANGUAGE js AS ''' +try { + + var $ = JSON.parse(payload); + var responsiveImages = JSON.parse($._responsive_images); + responsiveImages = responsiveImages['responsive-images']; + + return responsiveImages.reduce( ( acc, cv ) => { + if ( cv.srcsetHasWDescriptors ) { + acc = true; + } + return acc; + }, false ); + +} catch (e) { + return false; +} +'''; + +CREATE TEMPORARY FUNCTION getTotalEstimatedWastedLoadedPixels(payload STRING) +RETURNS INT64 +LANGUAGE js AS ''' +try { + + var $ = JSON.parse(payload); + var responsiveImages = JSON.parse($._responsive_images); + responsiveImages = responsiveImages['responsive-images']; + + return responsiveImages.reduce( ( acc, cv ) => { + if ( cv.actualSizesEstimatedWastedLoadedPixels > 0 ) { + acc += cv.actualSizesEstimatedWastedLoadedPixels; + } + return acc; + }, 0 ); + +} catch (e) { + return null; +} +'''; + +CREATE TEMPORARY FUNCTION getTotalEstimatedWastedLoadedBytes(payload STRING) +RETURNS FLOAT64 +LANGUAGE js AS ''' +try { + + var $ = JSON.parse(payload); + var responsiveImages = JSON.parse($._responsive_images); + responsiveImages = responsiveImages['responsive-images']; + + return responsiveImages.reduce( ( acc, cv ) => { + if ( cv.actualSizesEstimatedWastedLoadedBytes > 0 ) { + acc += cv.actualSizesEstimatedWastedLoadedBytes; + } + return acc; + }, 0 ); + +} catch (e) { + return null; +} +'''; + +SELECT + percentile, + client, + APPROX_QUANTILES(totalEstimatedWastedLoadedPixels, 1000)[OFFSET(percentile * 10)] AS totalEstimatedWastedLoadedPixels, + APPROX_QUANTILES(totalEstimatedWastedLoadedBytes, 1000)[OFFSET(percentile * 10)] AS totalEstimatedWastedLoadedBytes +FROM ( + SELECT + _TABLE_SUFFIX AS client, + getTotalEstimatedWastedLoadedPixels(payload) AS totalEstimatedWastedLoadedPixels, + getTotalEstimatedWastedLoadedBytes(payload) AS totalEstimatedWastedLoadedBytes + FROM + `httparchive.pages.2024_06_01_*` + WHERE + pageUsesWDescriptors(payload) = TRUE +), +UNNEST([10, 25, 50, 75, 90]) AS percentile +GROUP BY + percentile, + client +ORDER BY + percentile, + client diff --git a/sql/2024/media/image_sizing_extrinsic_intrinsic.sql b/sql/2024/media/image_sizing_extrinsic_intrinsic.sql new file mode 100644 index 00000000000..41d75a1e0eb --- /dev/null +++ b/sql/2024/media/image_sizing_extrinsic_intrinsic.sql @@ -0,0 +1,37 @@ +#standardSQL +# Are s sized extrinsically or intrinsically (both height and width)? +# image_sizing_extrinsic_intrinsic.sql + +CREATE TEMPORARY FUNCTION getImageSizing(payload STRING) +RETURNS ARRAY> +LANGUAGE js AS ''' +try { + var $ = JSON.parse(payload); + var responsiveImages = JSON.parse($._responsive_images); + responsiveImages = responsiveImages['responsive-images']; + + return responsiveImages.flatMap(({intrinsicOrExtrinsicSizing}) => ([ + {property: 'width', value: intrinsicOrExtrinsicSizing.width}, + {property: 'height', value: intrinsicOrExtrinsicSizing.height} + ])); +} catch (e) { + return []; +} +'''; + +SELECT + _TABLE_SUFFIX AS client, + image.property, + image.value, + COUNT(0) AS freq, + SUM(COUNT(0)) OVER (PARTITION BY _TABLE_SUFFIX, image.property) AS total, + COUNT(0) / SUM(COUNT(0)) OVER (PARTITION BY _TABLE_SUFFIX, image.property) AS pct +FROM + `httparchive.pages.2024_06_01_*`, + UNNEST(getImageSizing(payload)) AS image +GROUP BY + client, + property, + value +ORDER BY + pct DESC diff --git a/sql/2024/media/image_srcset_candidates.sql b/sql/2024/media/image_srcset_candidates.sql new file mode 100644 index 00000000000..58ed7a7b558 --- /dev/null +++ b/sql/2024/media/image_srcset_candidates.sql @@ -0,0 +1,39 @@ +#standardSQL +# distribution of number of srcset candidates +# image_srcset_candidates.sql + +CREATE TEMPORARY FUNCTION getNumberOfSrcsetCandidates(payload STRING) +RETURNS ARRAY +LANGUAGE js AS ''' +try { + var $ = JSON.parse(payload); + var responsiveImages = JSON.parse($._responsive_images); + responsiveImages = responsiveImages['responsive-images']; + + return responsiveImages.map(({srcsetCandidateDensities}) => + (srcsetCandidateDensities && srcsetCandidateDensities.length) ? srcsetCandidateDensities.length : null + ); +} catch (e) { + return []; +} +'''; + +SELECT + percentile, + client, + APPROX_QUANTILES(numberOfCandidates, 1000)[OFFSET(percentile * 10)] AS numberOfCandidates +FROM ( + SELECT + _TABLE_SUFFIX AS client, + numberOfCandidates + FROM + `httparchive.pages.2024_06_01_*`, + UNNEST(getNumberOfSrcsetCandidates(payload)) AS numberOfCandidates +), +UNNEST([10, 25, 50, 75, 90, 100]) AS percentile +GROUP BY + percentile, + client +ORDER BY + percentile, + client diff --git a/sql/2024/media/image_srcset_densities.sql b/sql/2024/media/image_srcset_densities.sql new file mode 100644 index 00000000000..94457ad7847 --- /dev/null +++ b/sql/2024/media/image_srcset_densities.sql @@ -0,0 +1,41 @@ +#standardSQL +# distribution of the densities of srcset candidates +# image_srcset_densities.sql + +CREATE TEMPORARY FUNCTION getSrcsetDensities(payload STRING) +RETURNS ARRAY>> +LANGUAGE js AS ''' +try { + var $ = JSON.parse(payload); + var responsiveImages = JSON.parse($._responsive_images); + responsiveImages = responsiveImages['responsive-images']; + + return responsiveImages.map(({currentSrcDensity, srcsetCandidateDensities}) => ({ + currentSrcDensity, + srcsetCandidateDensities: srcsetCandidateDensities.map(density => Math.round(density * 100) / 100) + })); +} catch (e) { + return []; +} +'''; + +SELECT + percentile, + client, + APPROX_QUANTILES(image.currentSrcDensity, 1000)[OFFSET(percentile * 10)] AS currentSrcDensity, + APPROX_QUANTILES(srcsetCandidateDensity, 1000)[OFFSET(percentile * 10)] AS srcsetCandidateDensity +FROM ( + SELECT + _TABLE_SUFFIX AS client, + image + FROM + `httparchive.pages.2024_06_01_*`, + UNNEST(getSrcsetDensities(payload)) AS image), + UNNEST(image.srcsetCandidateDensities) AS srcsetCandidateDensity, + UNNEST([10, 25, 50, 75, 90]) AS percentile +GROUP BY + percentile, + client +ORDER BY + percentile, + client diff --git a/sql/2024/media/image_srcset_descriptor.sql b/sql/2024/media/image_srcset_descriptor.sql new file mode 100644 index 00000000000..91f7141f85a --- /dev/null +++ b/sql/2024/media/image_srcset_descriptor.sql @@ -0,0 +1,41 @@ +#standardSQL +# images with srcset descriptor_x descriptor_w +# image_srcset_descriptor.sql + +CREATE TEMPORARY FUNCTION get_media_info(media_string STRING) +RETURNS STRUCT< + num_srcset_all INT64, + num_srcset_descriptor_x INT64, + num_srcset_descriptor_w INT64 +> LANGUAGE js AS ''' +var result = {}; +try { + var media = JSON.parse(media_string); + + if (Array.isArray(media) || typeof media != 'object') return result; + + result.num_srcset_all = media.num_srcset_all; + result.num_srcset_descriptor_x = media.num_srcset_descriptor_x; + result.num_srcset_descriptor_w = media.num_srcset_descriptor_w; + +} catch (e) {} +return result; +'''; + +SELECT + client, + SAFE_DIVIDE(COUNTIF(media_info.num_srcset_all > 0), COUNT(0)) AS pages_with_srcset_pct, + SAFE_DIVIDE(COUNTIF(media_info.num_srcset_descriptor_x > 0), COUNT(0)) AS pages_with_srcset_descriptor_x_pct, + SAFE_DIVIDE(COUNTIF(media_info.num_srcset_descriptor_w > 0), COUNT(0)) AS pages_with_srcset_descriptor_w_pct, + SAFE_DIVIDE(SUM(media_info.num_srcset_descriptor_x), SUM(media_info.num_srcset_all)) AS instances_of_srcset_descriptor_x_pct, + SAFE_DIVIDE(SUM(media_info.num_srcset_descriptor_w), SUM(media_info.num_srcset_all)) AS instances_of_srcset_descriptor_w_pct +FROM ( + SELECT + _TABLE_SUFFIX AS client, + get_media_info(JSON_EXTRACT_SCALAR(payload, '$._media')) AS media_info + FROM + `httparchive.pages.2024_06_01_*`) +GROUP BY + client +ORDER BY + client diff --git a/sql/2024/media/image_srcset_sizes.sql b/sql/2024/media/image_srcset_sizes.sql new file mode 100644 index 00000000000..7bc616039dd --- /dev/null +++ b/sql/2024/media/image_srcset_sizes.sql @@ -0,0 +1,39 @@ +#standardSQL +# images (and pages) with srcset w/wo sizes +# image_srcset_sizes.sql + +CREATE TEMPORARY FUNCTION get_media_info(media_string STRING) +RETURNS STRUCT< + num_srcset_all INT64, + num_srcset_sizes INT64 +> LANGUAGE js AS ''' +var result = {}; +try { + var media = JSON.parse(media_string); + + if (Array.isArray(media) || typeof media != 'object') return result; + + result.num_srcset_all = media.num_srcset_all; + result.num_srcset_sizes = media.num_srcset_sizes; + +} catch (e) {} +return result; +'''; + +SELECT + client, + SAFE_DIVIDE(COUNTIF(media_info.num_srcset_all > 0), COUNT(0)) AS pages_with_srcset_pct, + SAFE_DIVIDE(COUNTIF(media_info.num_srcset_sizes > 0), COUNT(0)) AS pages_with_srcset_sizes_pct, + SAFE_DIVIDE((COUNTIF(media_info.num_srcset_all > 0) - COUNTIF(media_info.num_srcset_sizes > 0)), COUNT(0)) AS pages_with_srcset_wo_sizes_pct, + SAFE_DIVIDE(SUM(media_info.num_srcset_sizes), SUM(media_info.num_srcset_all)) AS instances_of_srcset_sizes_pct, + SAFE_DIVIDE((SUM(media_info.num_srcset_all) - SUM(media_info.num_srcset_sizes)), SUM(media_info.num_srcset_all)) AS instances_of_srcset_wo_sizes_pct +FROM ( + SELECT + _TABLE_SUFFIX AS client, + get_media_info(JSON_EXTRACT_SCALAR(payload, '$._media')) AS media_info + FROM + `httparchive.pages.2024_06_01_*`) +GROUP BY + client +ORDER BY + client diff --git a/sql/2024/media/image_srcset_sizes_accuracy_pct.sql b/sql/2024/media/image_srcset_sizes_accuracy_pct.sql new file mode 100644 index 00000000000..fdbd99bd1d3 --- /dev/null +++ b/sql/2024/media/image_srcset_sizes_accuracy_pct.sql @@ -0,0 +1,39 @@ +#standardSQL +# How accurate are srcset and sizes attributes, and what is the impact of sizes innacuracies on srcset selection? +# image_srcset_sizes_accuracy_pct.sql + +CREATE TEMPORARY FUNCTION getSrcsetSizesAccuracy(payload STRING) +RETURNS ARRAY> +LANGUAGE js AS ''' +try { + var $ = JSON.parse(payload); + var responsiveImages = JSON.parse($._responsive_images); + responsiveImages = responsiveImages['responsive-images']; + + return responsiveImages.map(({srcsetHasWDescriptors, sizesAbsoluteError, sizesRelativeError, wDescriptorAbsoluteError, actualSizesEstimatedWastedLoadedPixels}) => ({ + srcsetHasWDescriptors, + sizesAbsoluteError, + sizesRelativeError, + wDescriptorAbsoluteError, + actualSizesEstimatedWastedLoadedPixels + })); +} catch (e) { + return []; +} +'''; + +SELECT + _TABLE_SUFFIX AS client, + COUNTIF(image.sizesRelativeError > 0.05) AS some_sizes_error, + COUNTIF(image.wDescriptorAbsoluteError > 0) AS any_w_descriptor_error, + COUNTIF(image.actualSizesEstimatedWastedLoadedPixels > 0) AS sizes_error_impacted_srcset_selection, + COUNT(0) AS total_images, + COUNTIF(image.srcsetHasWDescriptors) AS total_images_with_w_descriptors, + COUNTIF(image.sizesRelativeError > 0.05) / COUNTIF(image.srcsetHasWDescriptors) AS pct_some_sizes_error, + COUNTIF(image.wDescriptorAbsoluteError > 0) / COUNTIF(image.srcsetHasWDescriptors) AS pct_any_w_descriptor_error, + COUNTIF(image.actualSizesEstimatedWastedLoadedPixels > 0) / COUNTIF(image.srcsetHasWDescriptors) AS pct_sizes_error_impacted_srcset_selection +FROM + `httparchive.pages.2024_06_01_*`, + UNNEST(getSrcsetSizesAccuracy(payload)) AS image +GROUP BY + client diff --git a/sql/2024/media/image_srcset_sizes_per_image_accuracy_impact.sql b/sql/2024/media/image_srcset_sizes_per_image_accuracy_impact.sql new file mode 100644 index 00000000000..825d0023a35 --- /dev/null +++ b/sql/2024/media/image_srcset_sizes_per_image_accuracy_impact.sql @@ -0,0 +1,67 @@ +#standardSQL +# measure the impact of innacurate sizes attributes per +# image_srcset_sizes_per_image_accuracy_impact.sql + +CREATE TEMPORARY FUNCTION getSrcsetSizesAccuracy(payload STRING) +RETURNS ARRAY> +LANGUAGE js AS ''' +try { + var $ = JSON.parse(payload); + var responsiveImages = JSON.parse($._responsive_images); + responsiveImages = responsiveImages['responsive-images']; + + return responsiveImages.map(({ + sizesAbsoluteError, + sizesRelativeError, + wDescriptorAbsoluteError, + wDescriptorRelativeError, + idealSizesSelectedResourceEstimatedPixels, + actualSizesEstimatedWastedLoadedPixels, + actualSizesEstimatedWastedLoadedBytes + }) => { + let wastedLoadedPercent; + if ( idealSizesSelectedResourceEstimatedPixels > 0 ) { + wastedLoadedPercent = actualSizesEstimatedWastedLoadedPixels / idealSizesSelectedResourceEstimatedPixels; + } else { + wastedLoadedPercent = null; + } + return { + sizesAbsoluteError, + sizesRelativeError, + wDescriptorAbsoluteError, + wDescriptorRelativeError, + actualSizesEstimatedWastedLoadedPixels, + actualSizesEstimatedWastedLoadedBytes, + wastedLoadedPercent + }; + } +); +} catch (e) { + return []; +} +'''; + +SELECT + percentile, + client, + APPROX_QUANTILES(image.sizesAbsoluteError, 1000)[OFFSET(percentile * 10)] AS sizesAbsoluteError, + APPROX_QUANTILES(image.sizesRelativeError, 1000)[OFFSET(percentile * 10)] AS sizesRelativeError, + APPROX_QUANTILES(image.wDescriptorAbsoluteError, 1000)[OFFSET(percentile * 10)] AS wDescriptorAbsoluteError, + APPROX_QUANTILES(image.wDescriptorRelativeError, 1000)[OFFSET(percentile * 10)] AS wDescriptorRelativeError, + APPROX_QUANTILES(image.actualSizesEstimatedWastedLoadedPixels, 1000)[OFFSET(percentile * 10)] AS actualSizesEstimatedWastedLoadedPixels, + APPROX_QUANTILES(image.actualSizesEstimatedWastedLoadedBytes, 1000)[OFFSET(percentile * 10)] AS actualSizesEstimatedWastedLoadedBytes, + APPROX_QUANTILES(image.wastedLoadedPercent, 1000)[OFFSET(percentile * 10)] AS wastedLoadedPercent +FROM ( + SELECT + _TABLE_SUFFIX AS client, + image + FROM + `httparchive.pages.2024_06_01_*`, + UNNEST(getSrcsetSizesAccuracy(payload)) AS image), + UNNEST([10, 25, 50, 75, 90]) AS percentile +GROUP BY + percentile, + client +ORDER BY + percentile, + client diff --git a/sql/2024/media/img_sizes_explicit_errors.sql b/sql/2024/media/img_sizes_explicit_errors.sql new file mode 100644 index 00000000000..f2c7db437a2 --- /dev/null +++ b/sql/2024/media/img_sizes_explicit_errors.sql @@ -0,0 +1,44 @@ +#standardSQL +# how many sizes attributes had explicit errors? +# also how many were implicit (100vw) +# img_sizes_explicit_errors.sql + +CREATE TEMPORARY FUNCTION get_responsive_settings(images_string STRING) +RETURNS ARRAY> +LANGUAGE js AS ''' +let result = []; +try { +const images_ = JSON.parse(images_string); +if (images_ && images_["responsive-images"]) { + const images = images_["responsive-images"]; + for(const img of images) { + result.push({ + sizes: img.hasSizes || false, + srcsetHasWDescriptors: img.srcsetHasWDescriptors || false, + sizesWasImplicit: img.sizesWasImplicit || false, + sizesParseError: img.sizesParseError || false + }) + } +} +} catch (e) {} +return result; +'''; +SELECT + client, + COUNT(0) AS images_with_sizes, + SAFE_DIVIDE(COUNTIF(respimg.sizesWasImplicit = TRUE), COUNT(0)) AS implicit_pct, + SAFE_DIVIDE(COUNTIF(respimg.sizesWasImplicit = FALSE), COUNT(0)) AS explicit_pct, + SAFE_DIVIDE(COUNTIF(respimg.sizesParseError = TRUE), COUNT(0)) AS parseError_pct, + SAFE_DIVIDE(COUNTIF(respimg.srcsetHasWDescriptors = TRUE), COUNT(0)) AS wDescriptor_pct +FROM ( + SELECT + _TABLE_SUFFIX AS client, + a.url AS pageUrl, + respimg + FROM + `httparchive.pages.2024_06_01_*` AS a, + UNNEST(get_responsive_settings(JSON_EXTRACT_SCALAR(payload, '$._responsive_images'))) AS respimg + WHERE + respimg.srcsetHasWDescriptors) +GROUP BY + client diff --git a/sql/2024/media/img_with_dimensions.sql b/sql/2024/media/img_with_dimensions.sql new file mode 100644 index 00000000000..0b8b1caf05d --- /dev/null +++ b/sql/2024/media/img_with_dimensions.sql @@ -0,0 +1,53 @@ +#standardSQL +# extracts the data about width, height and alt +# using this, counts and reports on the usage for each attribute +# img_with_dimensions.sql + +CREATE TEMPORARY FUNCTION get_image_info(responsiveString STRING) +RETURNS ARRAY> +LANGUAGE js AS ''' +try { + let result = Array() + const responsiveImages = JSON.parse(responsiveString) + if(responsiveImages && responsiveImages['responsive-images']){ + for(const image of responsiveImages["responsive-images"]){ + if ( image.approximateResourceWidth > 1 || image.approximateResourceHeight > 1 ) { + result.push({ + hasWidth: image.hasWidth ? 1 : 0, + hasHeight: image.hasHeight ? 1 : 0, + hasAlt: image.hasAlt ? 1 : 0, + hasReservedLayoutDimension: image.reservedLayoutDimensions ? 1 : 0 + }) + } + }} + return result +} catch(e) { + return []; +} +'''; + +SELECT + client, + COUNT(0) AS images, + COUNTIF(hasWidth = 1) AS hasWidth, + COUNTIF(hasHeight = 1) AS hasHeight, + COUNTIF(hasWidth = 1 AND hasHeight = 1) AS hasBoth, + COUNTIF(hasAlt = 1) AS hasAlt, + COUNTIF(hasReservedLayoutDimension = 1) AS hasDimensions, + SAFE_DIVIDE(COUNTIF(hasWidth = 1), COUNT(0)) AS percHasWidth, + SAFE_DIVIDE(COUNTIF(hasHeight = 1), COUNT(0)) AS percHasHeight, + SAFE_DIVIDE(COUNTIF(hasWidth = 1 AND hasHeight = 1), COUNT(0)) AS percHasBoth, + SAFE_DIVIDE(COUNTIF(hasAlt = 1), COUNT(0)) AS percHasAlt, + SAFE_DIVIDE(COUNTIF(hasReservedLayoutDimension = 1), COUNT(0)) AS percHasReservedLayoutDimensions +FROM ( + SELECT + _TABLE_SUFFIX AS client, + hasWidth, + hasHeight, + hasAlt, + hasReservedLayoutDimension + FROM + `httparchive.pages.2024_06_01_*`, + UNNEST(get_image_info(JSON_VALUE(payload, '$._responsive_images')))) +GROUP BY + client diff --git a/sql/2024/media/img_xdomain.sql b/sql/2024/media/img_xdomain.sql new file mode 100644 index 00000000000..e19e305173c --- /dev/null +++ b/sql/2024/media/img_xdomain.sql @@ -0,0 +1,36 @@ +#standardSQL +# Cross domain image requests +# Note to the future this would be more interesting if it looked at origins +# img_xdomain.sql + +CREATE TEMPORARY FUNCTION get_images(images_string STRING) +RETURNS ARRAY> +LANGUAGE js AS ''' +var result = []; +try { + var images = JSON.parse(images_string); + for (img of images){ + result.push({ + url: img.url + }); + } +} catch (e) {} +return result; +'''; +SELECT + client, + COUNT(DISTINCT pageUrl) AS pages, + count(0) AS images, + SAFE_DIVIDE(COUNTIF(pageDomain = imageDomain), COUNT(0)) AS img_xdomain_pct, + SAFE_DIVIDE(COUNTIF(pageDomain != imageDomain), COUNT(0)) AS img_samedomain_pct +FROM ( + SELECT + _TABLE_SUFFIX AS client, + a.url AS pageUrl, + FORMAT('%T', NET.REG_DOMAIN(a.url)) AS pageDomain, + FORMAT('%T', NET.REG_DOMAIN(imageurl.url)) AS imageDomain + FROM + `httparchive.pages.2024_06_01_*` a, + UNNEST(get_images(JSON_EXTRACT_SCALAR(payload, '$._Images'))) AS imageurl) +GROUP BY + client diff --git a/sql/2024/media/imgs_per_page.sql b/sql/2024/media/imgs_per_page.sql new file mode 100644 index 00000000000..875dbbd3467 --- /dev/null +++ b/sql/2024/media/imgs_per_page.sql @@ -0,0 +1,39 @@ +#standardSQL +# Distribution of number-of-images per page +# imgs_per_page.sql + +CREATE TEMPORARY FUNCTION numberOfImages(images_string STRING) +RETURNS INT64 +LANGUAGE js AS ''' +try { + return JSON.parse(images_string).filter( i => parseInt(i.approximateResourceWidth) > 1 && parseInt(i.approximateResourceWidth) > 1 ).length; +} catch { + return 0; +} +'''; + +WITH numImgs AS ( + SELECT + _TABLE_SUFFIX AS client, + numberOfImages(JSON_QUERY(JSON_VALUE(payload, '$._responsive_images'), '$.responsive-images')) AS numberOfImages + FROM + `httparchive.pages.2024_06_01_*` +), + +percentiles AS ( + SELECT + client, + APPROX_QUANTILES(numberOfImages, 1000) AS numberOfImagesPercentiles + FROM + numImgs + GROUP BY + client +) + +SELECT + client, + percentile, + numberOfImagesPercentiles[OFFSET(percentile * 10)] AS numberOfImages +FROM + percentiles, + UNNEST([0, 10, 25, 50, 75, 90, 100]) AS percentile diff --git a/sql/2024/media/largest_image_per_page_bytes.sql b/sql/2024/media/largest_image_per_page_bytes.sql new file mode 100644 index 00000000000..106d9dbd457 --- /dev/null +++ b/sql/2024/media/largest_image_per_page_bytes.sql @@ -0,0 +1,44 @@ +#standardSQL +# what's the largest image per page? (by bytes) +# largest_image_per_page_bytes.sql + +CREATE TEMPORARY FUNCTION largestImage(payload STRING) +RETURNS INT64 +LANGUAGE js AS ''' +try { + + var $ = JSON.parse(payload); + var responsiveImages = JSON.parse($._responsive_images); + responsiveImages = responsiveImages['responsive-images']; + + return responsiveImages.reduce( ( acc, cv ) => { + const bytes = cv.byteSize; + if ( bytes > acc ) { + acc = bytes; + } + return acc; + }, 0 ); + +} catch (e) { + return 0; +} +'''; + +SELECT + percentile, + client, + APPROX_QUANTILES(largestImageBytes, 1000)[OFFSET(percentile * 10)] AS largestImageBytesize +FROM ( + SELECT + _TABLE_SUFFIX AS client, + largestImage(payload) AS largestImageBytes + FROM + `httparchive.pages.2024_06_01_*` +), +UNNEST([10, 25, 50, 75, 90]) AS percentile +GROUP BY + percentile, + client +ORDER BY + percentile, + client diff --git a/sql/2024/media/largest_image_per_page_layout.sql b/sql/2024/media/largest_image_per_page_layout.sql new file mode 100644 index 00000000000..1bb7d39e452 --- /dev/null +++ b/sql/2024/media/largest_image_per_page_layout.sql @@ -0,0 +1,44 @@ +#standardSQL +# what's the largest image per page? (by *css* pixels) +# largest_image_per_page_layout.sql + +CREATE TEMPORARY FUNCTION widestImage(payload STRING) +RETURNS INT64 +LANGUAGE js AS ''' +try { + + var $ = JSON.parse(payload); + var responsiveImages = JSON.parse($._responsive_images); + responsiveImages = responsiveImages['responsive-images']; + + return responsiveImages.reduce( ( acc, cv ) => { + const w = cv.clientWidth; + if ( w > acc ) { + acc = w; + } + return acc; + }, 0 ); + +} catch (e) { + return 0; +} +'''; + +SELECT + percentile, + client, + APPROX_QUANTILES(widestImageCSSpx, 1000)[OFFSET(percentile * 10)] AS widestImageLayoutWidth +FROM ( + SELECT + _TABLE_SUFFIX AS client, + widestImage(payload) AS widestImageCSSpx + FROM + `httparchive.pages.2024_06_01_*` +), +UNNEST([10, 25, 50, 75, 90]) AS percentile +GROUP BY + percentile, + client +ORDER BY + percentile, + client diff --git a/sql/2024/media/largest_image_per_page_pixels.sql b/sql/2024/media/largest_image_per_page_pixels.sql new file mode 100644 index 00000000000..9dbf77f2c75 --- /dev/null +++ b/sql/2024/media/largest_image_per_page_pixels.sql @@ -0,0 +1,44 @@ +#standardSQL +# what's the largest image per page? (by pixels) +# largest_image_per_page_pixels.sql + +CREATE TEMPORARY FUNCTION largestImage(payload STRING) +RETURNS INT64 +LANGUAGE js AS ''' +try { + + var $ = JSON.parse(payload); + var responsiveImages = JSON.parse($._responsive_images); + responsiveImages = responsiveImages['responsive-images']; + + return responsiveImages.reduce( ( acc, cv ) => { + const pixels = cv.approximateResourceWidth * cv.approximateResourceHeight; + if ( pixels > acc ) { + acc = pixels; + } + return acc; + }, 0 ); + +} catch (e) { + return 0; +} +'''; + +SELECT + percentile, + client, + APPROX_QUANTILES(largestImageMegapixels, 1000)[OFFSET(percentile * 10)] AS largestImagePixelCount +FROM ( + SELECT + _TABLE_SUFFIX AS client, + largestImage(payload) / 1e6 AS largestImageMegapixels + FROM + `httparchive.pages.2024_06_01_*` +), +UNNEST([10, 25, 50, 75, 90]) AS percentile +GROUP BY + percentile, + client +ORDER BY + percentile, + client diff --git a/sql/2024/media/lazy_loading_adoption_over_time.sql b/sql/2024/media/lazy_loading_adoption_over_time.sql new file mode 100644 index 00000000000..408d0d1807b --- /dev/null +++ b/sql/2024/media/lazy_loading_adoption_over_time.sql @@ -0,0 +1,19 @@ +#standardSQL +# How has lazy-loading adoption changed over time? +# copied from https://github.com/HTTPArchive/almanac.httparchive.org/blob/main/sql/2021/resource-hints/imgLazy.sql +# lazy_loading_adoption_over_time.sql + +SELECT + SUBSTR(_TABLE_SUFFIX, 0, 10) AS date, + IF(ENDS_WITH(_TABLE_SUFFIX, 'desktop'), 'desktop', 'mobile') AS client, + COUNT(DISTINCT IF(LOWER(attr) = '"lazy"', url, NULL)) / COUNT(DISTINCT url) AS percent +FROM + `httparchive.pages.*` +LEFT JOIN + UNNEST(JSON_EXTRACT_ARRAY(JSON_EXTRACT_SCALAR(payload, "$['_img-loading-attr']"), '$')) AS attr +GROUP BY + date, + client +ORDER BY + date DESC, + client diff --git a/sql/2024/media/lcp_element_data.sql b/sql/2024/media/lcp_element_data.sql new file mode 100644 index 00000000000..8312b4cb146 --- /dev/null +++ b/sql/2024/media/lcp_element_data.sql @@ -0,0 +1,96 @@ +#standardSQL +# LCP element node details +# How many LCPs had images? (either s or as background images)? +# How many of those s were lazy-loaded (anti-pattern!) +# lcp_element_data.sql + +CREATE TEMP FUNCTION getLoadingAttr(attributes STRING) RETURNS STRING LANGUAGE js AS ''' + try { + const data = JSON.parse(attributes); + const loadingAttr = data.find(attr => attr["name"] === "loading") + return loadingAttr.value + } catch (e) { + return ""; + } +'''; + +CREATE TEMP FUNCTION getDecodingAttr(attributes STRING) RETURNS STRING LANGUAGE js AS ''' + try { + const data = JSON.parse(attributes); + const decodingAttr = data.find(attr => attr["name"] === "decoding") + return decodingAttr.value + } catch (e) { + return ""; + } +'''; + +CREATE TEMP FUNCTION getLoadingClasses(attributes STRING) RETURNS STRING LANGUAGE js AS ''' + try { + const data = JSON.parse(attributes); + const classes = data.find(attr => attr["name"] === "class").value + if (classes.indexOf('lazyload') !== -1) { + return classes + } else { + return "" + } + } catch (e) { + return ""; + } +'''; + + + +WITH +lcp_stats AS ( + SELECT + _TABLE_SUFFIX AS client, + url, + JSON_EXTRACT_SCALAR(payload, '$._performance.lcp_elem_stats.nodeName') AS nodeName, + JSON_EXTRACT_SCALAR(payload, '$._performance.lcp_elem_stats.url') AS elementUrl, + CAST(JSON_EXTRACT_SCALAR(payload, '$._performance.lcp_elem_stats.size') AS INT64) AS size, + CAST(JSON_EXTRACT_SCALAR(payload, '$._performance.lcp_elem_stats.loadTime') AS FLOAT64) AS loadTime, + CAST(JSON_EXTRACT_SCALAR(payload, '$._performance.lcp_elem_stats.startTime') AS FLOAT64) AS startTime, + CAST(JSON_EXTRACT_SCALAR(payload, '$._performance.lcp_elem_stats.renderTime') AS FLOAT64) AS renderTime, + JSON_EXTRACT(payload, '$._performance.lcp_elem_stats.attributes') AS attributes, + getLoadingAttr(JSON_EXTRACT(payload, '$._performance.lcp_elem_stats.attributes')) AS loading, + getDecodingAttr(JSON_EXTRACT(payload, '$._performance.lcp_elem_stats.attributes')) AS decoding, + getLoadingClasses(JSON_EXTRACT(payload, '$._performance.lcp_elem_stats.attributes')) AS classWithLazyload + FROM + `httparchive.pages.2024_06_01_*` +) + +SELECT + client, + nodeName, + COUNT(DISTINCT url) AS pages, + ANY_VALUE(total) AS total, + COUNT(DISTINCT url) / ANY_VALUE(total) AS pct, + COUNTIF(elementUrl != '') AS haveImages, + COUNTIF(elementUrl != '') / COUNT(DISTINCT url) AS pct_haveImages, + COUNTIF(loading = 'eager') AS native_eagerload, + COUNTIF(loading = 'lazy') AS native_lazyload, + COUNTIF(classWithLazyload != '') AS lazyload_class, + COUNTIF(classWithLazyload != '' OR loading = 'lazy') AS probably_lazyLoaded, + COUNTIF(classWithLazyload != '' OR loading = 'lazy') / COUNT(DISTINCT url) AS pct_prob_lazyloaded, + COUNTIF(decoding = 'async') AS async_decoding, + COUNTIF(decoding = 'sync') AS sync_decoding, + COUNTIF(decoding = 'auto') AS auto_decoding +FROM + lcp_stats +JOIN ( + SELECT + _TABLE_SUFFIX AS client, + COUNT(0) AS total + FROM + `httparchive.summary_pages.2024_06_01_*` + GROUP BY + _TABLE_SUFFIX) +USING + (client) +GROUP BY + client, + nodeName +HAVING + pages > 1000 +ORDER BY + pct DESC diff --git a/sql/2024/media/media_formats.sql b/sql/2024/media/media_formats.sql new file mode 100644 index 00000000000..ba0ef393800 --- /dev/null +++ b/sql/2024/media/media_formats.sql @@ -0,0 +1,54 @@ +#standardSQL +# Format adoption +# media_formats.sql +# ❕ Updated in 2024 to use all.requests instead of almanac.requests + +CREATE TEMPORARY FUNCTION fixMimeType(mimeType STRING) +RETURNS STRING +LANGUAGE js AS ''' +if (mimeType === "image/avif") { + return "avif"; +} else if (mimeType === "image/webp" || mimeType==="webp") { + return "webp"; +} else if (mimeType === 'image/jpg' || mimeType === 'image/jpeg') { + return 'jpg'; +} else if (mimeType === 'image/png' || mimeType === 'Image/png') { + return 'png'; +} else if (mimeType === 'image/gif') { + return 'gif'; +} else if (mimeType === 'image/svg+xml') { + return 'svg'; +} else if (mimeType === 'image/x-icon' || mimeType === 'image/vnd.microsoft.icon') { + return 'ico'; +} else if (mimeType === 'image/bmp') { + return 'bmp'; +} else { + return 'other/unknown'; +} +'''; + +SELECT + client, + trueFormat, + COUNT(DISTINCT NET.HOST(url)) AS hosts, + COUNT(DISTINCT page) AS pages, + COUNT(0) AS freqImages, + SUM(COUNT(0)) OVER (PARTITION BY client) AS totalImages, + COUNT(0) / SUM(COUNT(0)) OVER (PARTITION BY client) AS pctImages +FROM ( + SELECT + client, + page, + url, + fixMimeType(JSON_VALUE(payload, '$.response.content.mimeType')) AS trueFormat + FROM + `httparchive.all.requests` + WHERE + date = '2024-06-01' AND + type = 'image' AND + JSON_VALUE(summary, '$.respBodySize') IS NOT NULL) +GROUP BY + client, + trueFormat +ORDER BY + pctImages DESC diff --git a/sql/2024/media/picture_distribution.sql b/sql/2024/media/picture_distribution.sql new file mode 100644 index 00000000000..d4ecea5f8c4 --- /dev/null +++ b/sql/2024/media/picture_distribution.sql @@ -0,0 +1,24 @@ +#standardSQL +# Number of picture elements per page +# picture_distribution.sql + +SELECT + percentile, + client, + COUNTIF(picture > 0) AS pages, + COUNT(0) AS total, + COUNTIF(picture > 0) / COUNT(0) AS pct, + APPROX_QUANTILES(IF(picture > 0, picture, NULL), 1000)[OFFSET(percentile * 10)] AS picture_elements_per_page +FROM ( + SELECT + _TABLE_SUFFIX AS client, + CAST(JSON_QUERY(JSON_VALUE(payload, '$._media'), '$.num_picture_img') AS INT64) AS picture + FROM + `httparchive.pages.2024_06_01_*`), + UNNEST([10, 25, 50, 75, 90, 100]) AS percentile +GROUP BY + percentile, + client +ORDER BY + percentile, + client diff --git a/sql/2024/media/picture_format_distribution.sql b/sql/2024/media/picture_format_distribution.sql new file mode 100644 index 00000000000..099a96fbac2 --- /dev/null +++ b/sql/2024/media/picture_format_distribution.sql @@ -0,0 +1,59 @@ +#standardSQL +# picture formats distribution +# picture_format_distribution.sql + +# returns all the data we need from _media +CREATE TEMPORARY FUNCTION get_media_info(media_string STRING) +RETURNS STRUCT< + num_picture_img INT64, + num_picture_formats INT64, + picture_formats ARRAY +> LANGUAGE js AS ''' +var result = {}; +try { + var media = JSON.parse(media_string); + + if (Array.isArray(media) || typeof media != 'object') return result; + + // fix "picture_formats":"[]" + if (!Array.isArray(media.picture_formats)) + { + media.picture_formats = JSON.parse(media.picture_formats); + } + + // skip "picture_formats":[{}] + if (media.picture_formats.length == 1 && Object.keys(media.picture_formats[0]).length === 0) + { + media.picture_formats = []; + } + + result.picture_formats = media.picture_formats; + result.num_picture_img = media.num_picture_img; + result.num_picture_formats = result.picture_formats.length; + +} catch (e) {} +return result; +'''; + +SELECT + client, + SAFE_DIVIDE(COUNTIF(media_info.num_picture_formats > 0), COUNTIF(media_info.num_picture_img > 0)) AS pages_with_picture_formats_pct, + SAFE_DIVIDE(COUNTIF(media_info.num_picture_formats = 1), COUNTIF(media_info.num_picture_formats > 0)) AS pages_with_picture_formats_1_pct, + SAFE_DIVIDE(COUNTIF(media_info.num_picture_formats = 2), COUNTIF(media_info.num_picture_formats > 0)) AS pages_with_picture_formats_2_pct, + SAFE_DIVIDE(COUNTIF(media_info.num_picture_formats = 3), COUNTIF(media_info.num_picture_formats > 0)) AS pages_with_picture_formats_3_pct, + SAFE_DIVIDE(COUNTIF(media_info.num_picture_formats >= 4), COUNTIF(media_info.num_picture_formats > 0)) AS pages_with_picture_formats_4_and_more_pct, + SAFE_DIVIDE(COUNTIF('image/webp' IN UNNEST(media_info.picture_formats)), COUNTIF(media_info.num_picture_formats > 0)) AS pages_with_webp_pct, + SAFE_DIVIDE(COUNTIF('image/gif' IN UNNEST(media_info.picture_formats)), COUNTIF(media_info.num_picture_formats > 0)) AS pages_with_gif_pct, + SAFE_DIVIDE(COUNTIF('image/jpg' IN UNNEST(media_info.picture_formats)), COUNTIF(media_info.num_picture_formats > 0)) AS pages_with_jpg_pct, + SAFE_DIVIDE(COUNTIF('image/png' IN UNNEST(media_info.picture_formats)), COUNTIF(media_info.num_picture_formats > 0)) AS pages_with_png_pct, + SAFE_DIVIDE(COUNTIF('image/avif' IN UNNEST(media_info.picture_formats)), COUNTIF(media_info.num_picture_formats > 0)) AS pages_with_avif_pct +FROM ( + SELECT + _TABLE_SUFFIX AS client, + get_media_info(JSON_EXTRACT_SCALAR(payload, '$._media')) AS media_info + FROM + `httparchive.pages.2024_06_01_*`) +GROUP BY + client +ORDER BY + client diff --git a/sql/2024/media/picture_orientation.sql b/sql/2024/media/picture_orientation.sql new file mode 100644 index 00000000000..019a3e0988d --- /dev/null +++ b/sql/2024/media/picture_orientation.sql @@ -0,0 +1,40 @@ +#standardSQL +# picture using orientation +# picture_orientation.sql + +CREATE TEMPORARY FUNCTION get_media_info(media_string STRING) +RETURNS STRUCT< + num_picture_img INT64, + num_picture_using_orientation INT64 +> LANGUAGE js AS ''' +var result = {}; +try { + var media = JSON.parse(media_string); + + if (Array.isArray(media) || typeof media != 'object') return result; + + result.num_picture_img = media.num_picture_img; + result.num_picture_using_orientation = media.num_picture_using_orientation; + +} catch (e) {} +return result; +'''; + +SELECT + client, + COUNTIF(media_info.num_picture_using_orientation > 0) AS picture_orientation_pages, + COUNTIF(media_info.num_picture_img > 0) AS total_picture_pages, + SAFE_DIVIDE(COUNTIF(media_info.num_picture_using_orientation > 0), COUNTIF(media_info.num_picture_img > 0)) AS pct_picture_orientation_pages, + SUM(media_info.num_picture_using_orientation) AS picture_orientation_images, + SUM(media_info.num_picture_img) AS total_picture_images, + SAFE_DIVIDE(SUM(media_info.num_picture_using_orientation), SUM(media_info.num_picture_img)) AS pct_picture_orientation_images +FROM ( + SELECT + _TABLE_SUFFIX AS client, + get_media_info(JSON_EXTRACT_SCALAR(payload, '$._media')) AS media_info + FROM + `httparchive.pages.2024_06_01_*`) +GROUP BY + client +ORDER BY + client diff --git a/sql/2024/media/picture_switching.sql b/sql/2024/media/picture_switching.sql new file mode 100644 index 00000000000..5ef4d108c74 --- /dev/null +++ b/sql/2024/media/picture_switching.sql @@ -0,0 +1,33 @@ +#standardSQL +# How many picture elements are doing media and type switching? +# picture_switching.sql + +CREATE TEMPORARY FUNCTION getPictureSwitching(payload STRING) +RETURNS ARRAY> +LANGUAGE js AS ''' +try { + var $ = JSON.parse(payload); + var responsiveImages = JSON.parse($._responsive_images); + responsiveImages = responsiveImages['responsive-images']; + + return responsiveImages.filter(img => img.isInPicture).map(({pictureMediaSwitching, pictureTypeSwitching}) => ({ + pictureMediaSwitching, + pictureTypeSwitching + })); +} catch (e) { + return []; +} +'''; + +SELECT + _TABLE_SUFFIX AS client, + COUNTIF(image.pictureMediaSwitching) AS picture_media_switching, + COUNTIF(image.pictureTypeSwitching) AS picture_type_switching, + COUNT(0) AS total_picture, + COUNTIF(image.pictureMediaSwitching) / COUNT(0) AS pct_picture_media_switching, + COUNTIF(image.pictureTypeSwitching) / COUNT(0) AS pct_picture_type_switching +FROM + `httparchive.pages.2024_06_01_*`, + UNNEST(getPictureSwitching(payload)) AS image +GROUP BY + client diff --git a/sql/2024/media/picture_using_min_resolution.sql b/sql/2024/media/picture_using_min_resolution.sql new file mode 100644 index 00000000000..12d490fd5ef --- /dev/null +++ b/sql/2024/media/picture_using_min_resolution.sql @@ -0,0 +1,41 @@ +#standardSQL +# picture using min resolution +# picture_using_min_resolution.sql + +# returns all the data we need from _media +CREATE TEMPORARY FUNCTION get_media_info(media_string STRING) +RETURNS STRUCT< + num_picture_using_min_resolution INT64, + num_picture_img INT64 +> LANGUAGE js AS ''' +var result = {}; +try { + var media = JSON.parse(media_string); + + if (Array.isArray(media) || typeof media != 'object') return result; + + result.num_picture_using_min_resolution = media.num_picture_using_min_resolution; + result.num_picture_img = media.num_picture_img; + +} catch (e) {} +return result; +'''; + +SELECT + client, + COUNTIF(media_info.num_picture_using_min_resolution > 0) AS picture_min_resolution_pages, + COUNTIF(media_info.num_picture_img > 0) AS total_picture_pages, + SAFE_DIVIDE(COUNTIF(media_info.num_picture_using_min_resolution > 0), COUNTIF(media_info.num_picture_img > 0)) AS pct_picture_min_resolution_pages, + SUM(media_info.num_picture_using_min_resolution) AS picture_min_resolution_images, + SUM(media_info.num_picture_img) AS total_picture_images, + SAFE_DIVIDE(SUM(media_info.num_picture_using_min_resolution), SUM(media_info.num_picture_img)) AS pct_picture_min_resolution_images +FROM ( + SELECT + _TABLE_SUFFIX AS client, + get_media_info(JSON_EXTRACT_SCALAR(payload, '$._media')) AS media_info + FROM + `httparchive.pages.2024_06_01_*`) +GROUP BY + client +ORDER BY + client diff --git a/sql/2024/media/pixel_volume.sql b/sql/2024/media/pixel_volume.sql new file mode 100644 index 00000000000..bde07985d8e --- /dev/null +++ b/sql/2024/media/pixel_volume.sql @@ -0,0 +1,59 @@ +#standardSQL +# pixel areas +# pixel_volume.sql + +CREATE TEMPORARY FUNCTION getCssPixels(payload STRING) +RETURNS INT64 LANGUAGE js AS ''' +try { + let data = JSON.parse(payload); + return data.reduce((a, c) => a + (c.width||0)*(c.height||0), 0) || 0; +} +catch (e) {} +return null; +'''; + +CREATE TEMPORARY FUNCTION getNaturalPixels(payload STRING) +RETURNS INT64 LANGUAGE js AS ''' +try { + let data = JSON.parse(payload); + return data.reduce((a, c) => a + (c.naturalWidth||0)*(c.naturalHeight||0), 0) || 0; +} +catch (e) {} +return null; +'''; + +SELECT + percentile, + client, + ANY_VALUE(viewport_height) AS viewport_height, + ANY_VALUE(viewport_width) AS viewport_width, + ANY_VALUE(dpr) AS dpr, + ANY_VALUE(viewport_height) * ANY_VALUE(viewport_width) AS display_px, + APPROX_QUANTILES(css_pixels, 1000)[OFFSET(percentile * 10)] AS css_pixels, + APPROX_QUANTILES(natural_pixels, 1000)[OFFSET(percentile * 10)] AS natural_pixels, + APPROX_QUANTILES(natural_pixels, 1000)[OFFSET(percentile * 10)] / (ANY_VALUE(viewport_height) * ANY_VALUE(viewport_width)) AS pct +FROM ( + SELECT + _TABLE_SUFFIX AS client, + url AS page, + getCssPixels(JSON_EXTRACT_SCALAR(payload, '$._Images')) AS css_pixels, + getNaturalPixels(JSON_EXTRACT_SCALAR(payload, '$._Images')) AS natural_pixels, + CAST(JSON_EXTRACT_SCALAR(JSON_EXTRACT_SCALAR(payload, '$._Dpi'), '$.dppx') AS FLOAT64) AS dpr, + CAST(JSON_EXTRACT_SCALAR(JSON_EXTRACT_SCALAR(payload, '$._Resolution'), '$.absolute.height') AS FLOAT64) AS viewport_height, + CAST(JSON_EXTRACT_SCALAR(JSON_EXTRACT_SCALAR(payload, '$._Resolution'), '$.absolute.width') AS FLOAT64) AS viewport_width + FROM + `httparchive.pages.2024_06_01_*`), + UNNEST([10, 25, 50, 75, 90]) AS percentile +WHERE + # it appears the _Images array is populated only from tag requests and not CSS or favicon + # likewise the bigImageCount and smallImageCount only track images > 100,000 and < 10,000 respectively. + # Meaning images between 10KB and 100KB won't show up in the count + # https://github.com/WPO-Foundation/webpagetest/blob/master/www/breakdown.inc#L95 + css_pixels > 0 AND + natural_pixels > 0 +GROUP BY + percentile, + client +ORDER BY + percentile, + client diff --git a/sql/2024/media/portrait_landscape_square.sql b/sql/2024/media/portrait_landscape_square.sql new file mode 100644 index 00000000000..344fb59ce90 --- /dev/null +++ b/sql/2024/media/portrait_landscape_square.sql @@ -0,0 +1,64 @@ +#standardSQL +# What are the aspect ratios of the web's images? +# portrait_landscape_square.sql + +CREATE TEMPORARY FUNCTION getAspectRatioInfo(responsiveImagesJsonString STRING) +RETURNS ARRAY> +LANGUAGE js AS ''' + const parsed = JSON.parse( responsiveImagesJsonString ); + if ( parsed && parsed.map ) { + return parsed.map( d => { + const aspectRatio = ( d.approximateResourceWidth > 0 && d.approximateResourceHeight > 0 ? + Math.round( ( d.approximateResourceWidth / d.approximateResourceHeight ) * 1000 ) / 1000 : -1 ); + return { + imgURL: d.url, + approximateResourceWidth: Math.floor( d.approximateResourceWidth || 0 ), + approximateResourceHeight: Math.floor( d.approximateResourceHeight || 0 ), + aspectRatio: aspectRatio, + isPortrait: aspectRatio < 1 && aspectRatio > 0, + isLandscape: aspectRatio > 1, + isSquare: aspectRatio == 1 + } + }); + } +'''; + +WITH imgs AS ( + SELECT + _TABLE_SUFFIX AS client, + url AS pageURL, + imgURL, + approximateResourceWidth, + approximateResourceHeight, + isPortrait, + isLandscape, + isSquare + FROM + `httparchive.pages.2024_06_01_*`, + UNNEST(getAspectRatioInfo(JSON_QUERY(JSON_VALUE(payload, '$._responsive_images'), '$.responsive-images'))) + WHERE + approximateResourceWidth > 1 AND + approximateResourceHeight > 1 +), + +counts_per_client AS ( + SELECT + client, + COUNTIF(isPortrait) AS portraits, + COUNTIF(isLandscape) AS landscapes, + COUNTIF(isSquare) AS squares, + COUNT(0) AS numberOfImagesPerClient + FROM + imgs + GROUP BY + client +) + +SELECT + client, + SAFE_DIVIDE(portraits, numberOfImagesPerClient) AS percentPortrait, + SAFE_DIVIDE(landscapes, numberOfImagesPerClient) AS percentLandscape, + SAFE_DIVIDE(squares, numberOfImagesPerClient) AS percentSquare, + numberOfImagesPerClient +FROM + counts_per_client diff --git a/sql/2024/media/score_progressive_jpeg.sql b/sql/2024/media/score_progressive_jpeg.sql new file mode 100644 index 00000000000..38f4a372a87 --- /dev/null +++ b/sql/2024/media/score_progressive_jpeg.sql @@ -0,0 +1,22 @@ +#standardSQL +# percent of pages with score_progressive_jpeg +# -1, 0 - 25, 25 - 50, 50 - 75, 75 - 100 +# score_progressive_jpeg.sql + +SELECT + client, + COUNTIF(score < 0) / COUNT(0) AS percent_negative, + COUNTIF(score >= 0 AND score < 25) / COUNT(0) AS percent_0_25, + COUNTIF(score >= 25 AND score < 50) / COUNT(0) AS percent_25_50, + COUNTIF(score >= 50 AND score < 75) / COUNT(0) AS percent_50_75, + COUNTIF(score >= 75 AND score <= 100) / COUNT(0) AS percent_75_100 +FROM ( + SELECT + _TABLE_SUFFIX AS client, + CAST(JSON_EXTRACT(payload, '$._score_progressive_jpeg') AS INT64) AS score + FROM + `httparchive.pages.2024_06_01_*`) +GROUP BY + client +ORDER BY + client diff --git a/sql/2024/media/srcset_density_coverage.sql b/sql/2024/media/srcset_density_coverage.sql new file mode 100644 index 00000000000..4c41468dd17 --- /dev/null +++ b/sql/2024/media/srcset_density_coverage.sql @@ -0,0 +1,76 @@ +#standardSQL +# images srcset candidates' densities: do they cover useful ranges? +# srcset_density_coverage.sql + +CREATE TEMPORARY FUNCTION getSrcsetInfo(responsiveImagesJsonString STRING) +RETURNS ARRAY, + numberOfSrcsetCandidates INT64, + minDensity FLOAT64, + maxDensity FLOAT64>> +LANGUAGE js AS ''' + const parsed = JSON.parse( responsiveImagesJsonString ); + if ( parsed && parsed.map ) { + return parsed.map( d => { + const result = { + hasSrcset: d.hasSrcset, + srcsetHasXDescriptors: d.srcsetHasXDescriptors, + srcsetHasWDescriptors: d.srcsetHasXDescriptors, + srcsetCandidateDensities: [], + numberOfSrcsetCandidates: 0, + minDensity: d.currentSrcDensity, + maxDensity: d.currentSrcDensity + }; + if ( d.srcsetCandidateDensities && d.srcsetCandidateDensities.map ) { + const densities = d.srcsetCandidateDensities.map( n => parseFloat( n ) ); + result.srcsetCandidateDensities = densities; + result.numberOfSrcsetCandidates = densities.length; + result.minDensity = Math.min( ...densities ); + result.maxDensity = Math.max( ...densities ); + } + return result; + }); + } +'''; + +WITH imgs AS ( + SELECT + _TABLE_SUFFIX AS client, + hasSrcset, + srcsetCandidateDensities, + minDensity, + maxDensity + FROM + `httparchive.pages.2024_06_01_*`, + UNNEST(getSrcsetInfo(JSON_QUERY(JSON_VALUE(payload, '$._responsive_images'), '$.responsive-images'))) + WHERE + srcsetHasXDescriptors = TRUE OR srcsetHasWDescriptors = TRUE +), + +counts AS ( + SELECT + client, + COUNT(0) AS number_of_imgs_with_srcset, + COUNTIF(minDensity <= 1 AND maxDensity >= 1.5) AS number_of_srcsets_covering_1x_to_1p5x, + COUNTIF(minDensity <= 1 AND maxDensity >= 2) AS number_of_srcsets_covering_1x_to_2x, + COUNTIF(minDensity <= 1 AND maxDensity >= 2.5) AS number_of_srcsets_covering_1x_to_2p5x, + COUNTIF(minDensity <= 1 AND maxDensity >= 3) AS number_of_srcsets_covering_1x_to_3x + FROM imgs + GROUP BY client +) + +SELECT + client, + number_of_imgs_with_srcset, + number_of_srcsets_covering_1x_to_1p5x, + number_of_srcsets_covering_1x_to_2x, + number_of_srcsets_covering_1x_to_2p5x, + number_of_srcsets_covering_1x_to_3x, + number_of_srcsets_covering_1x_to_1p5x / number_of_imgs_with_srcset AS pct_of_srcsets_covering_1x_to_1p5x, + number_of_srcsets_covering_1x_to_2x / number_of_imgs_with_srcset AS pct_of_srcsets_covering_1x_to_2x, + number_of_srcsets_covering_1x_to_2p5x / number_of_imgs_with_srcset AS pct_of_srcsets_covering_1x_to_2p5x, + number_of_srcsets_covering_1x_to_3x / number_of_imgs_with_srcset AS pct_of_srcsets_covering_1x_to_3x +FROM counts diff --git a/sql/2024/media/top_aspect_ratios.sql b/sql/2024/media/top_aspect_ratios.sql new file mode 100644 index 00000000000..4a9d63a53d3 --- /dev/null +++ b/sql/2024/media/top_aspect_ratios.sql @@ -0,0 +1,71 @@ +#standardSQL +# top particular aspect ratios +# top_aspect_ratios.sql + +CREATE TEMPORARY FUNCTION getSrcsetInfo(responsiveImagesJsonString STRING) +RETURNS ARRAY> +LANGUAGE js AS ''' + const parsed = JSON.parse( responsiveImagesJsonString ); + if ( parsed && parsed.map ) { + return parsed.map( d => ({ + imgURL: d.url, + approximateResourceWidth: Math.floor( d.approximateResourceWidth || 0 ), + approximateResourceHeight: Math.floor( d.approximateResourceHeight || 0 ), + aspectRatio: ( d.approximateResourceWidth > 0 && d.approximateResourceHeight > 0 ? + Math.round( ( d.approximateResourceWidth / d.approximateResourceHeight ) * 1000 ) / 1000 : + -1 ) + }) ); + } +'''; + +WITH imgs AS ( + SELECT + _TABLE_SUFFIX AS client, + url AS pageURL, + imgURL, + approximateResourceWidth, + approximateResourceHeight, + aspectRatio + FROM + `httparchive.pages.2024_06_01_*`, + UNNEST(getSrcsetInfo(JSON_QUERY(JSON_VALUE(payload, '$._responsive_images'), '$.responsive-images'))) + WHERE + approximateResourceWidth > 1 AND + approximateResourceHeight > 1 +), + +counts_per_client AS ( + SELECT + client, + COUNT(0) AS numberOfImagesPerClient + FROM + imgs + GROUP BY + client +), + +counts_per_client_and_aspect_ratio AS ( + SELECT + client, + aspectRatio, + COUNT(0) AS numberOfImagesPerClientAndAspectRatio + FROM + imgs + GROUP BY + client, + aspectRatio +) + +SELECT + client, + aspectRatio, + numberOfImagesPerClientAndAspectRatio, + SAFE_DIVIDE(numberOfImagesPerClientAndAspectRatio, numberOfImagesPerClient) AS percentOfImages +FROM + counts_per_client_and_aspect_ratio +LEFT JOIN + counts_per_client +USING + (client) +ORDER BY + percentOfImages DESC diff --git a/sql/2024/media/video_adoption.sql b/sql/2024/media/video_adoption.sql new file mode 100644 index 00000000000..1cac4f6e5c4 --- /dev/null +++ b/sql/2024/media/video_adoption.sql @@ -0,0 +1,20 @@ +#standardSQL +# How many pages use

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 literal 0 HcmV?d00001 diff --git a/src/static/images/2024/sustainability/median-emissions-by-ecommerce-2022.png b/src/static/images/2024/sustainability/median-emissions-by-ecommerce-2022.png new file mode 100644 index 0000000000000000000000000000000000000000..deb145a619ea54f6f3e42935a2b74f7269fe5a1f GIT binary patch literal 21640 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 literal 0 HcmV?d00001 diff --git a/src/static/images/2024/sustainability/median-emissions-by-ecommerce-2024.png b/src/static/images/2024/sustainability/median-emissions-by-ecommerce-2024.png new file mode 100644 index 0000000000000000000000000000000000000000..9043dd31e24632f3819fe06df151f09b9e849286 GIT binary patch literal 27267 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 literal 0 HcmV?d00001 diff --git a/src/static/images/2024/sustainability/median-emissions-by-ssg-2022.png b/src/static/images/2024/sustainability/median-emissions-by-ssg-2022.png new file mode 100644 index 0000000000000000000000000000000000000000..e6462a6a46e5c34f807ff656172008a23d2c3fa1 GIT binary patch literal 24653 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 TDC`M-`}1`PEd!~#es literal 0 HcmV?d00001 diff --git a/src/static/images/2024/sustainability/median-emissions-by-ssg-2024.png b/src/static/images/2024/sustainability/median-emissions-by-ssg-2024.png new file mode 100644 index 0000000000000000000000000000000000000000..a8deab61d6c5df9a40bad970a24d0d008590cb8d GIT binary patch literal 25299 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 literal 0 HcmV?d00001 diff --git a/src/static/images/2024/sustainability/median-kilobytes-by-cms-and-resource-type.png b/src/static/images/2024/sustainability/median-kilobytes-by-cms-and-resource-type.png new file mode 100644 index 0000000000000000000000000000000000000000..d58dba30f49231dff7a155c5072d7787b0b557b8 GIT binary patch literal 27346 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 S&z!9Ifd)FJ+Vz_7`2PUtx^kQV literal 0 HcmV?d00001 diff --git a/src/static/images/2024/sustainability/median-kilobytes-by-ecommerce.png b/src/static/images/2024/sustainability/median-kilobytes-by-ecommerce.png new file mode 100644 index 0000000000000000000000000000000000000000..51eca46aeacb3c7b9568736ca9554ab8e6058192 GIT binary patch literal 29738 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 So4wFK@2RV4sPSG69{wM{gDpk? literal 0 HcmV?d00001 diff --git a/src/static/images/2024/sustainability/non-composited-animations-per-page.png b/src/static/images/2024/sustainability/non-composited-animations-per-page.png new file mode 100644 index 0000000000000000000000000000000000000000..60686cf4bc3bdcc861c7fa418f98b8aaf9fdd6c7 GIT binary patch literal 18008 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 E073TqU;qFB literal 0 HcmV?d00001 diff --git a/src/static/images/2024/sustainability/number-of-kb-by-percentile.png b/src/static/images/2024/sustainability/number-of-kb-by-percentile.png new file mode 100644 index 0000000000000000000000000000000000000000..018559c56221abb3676655a625a8cee8800b9aca GIT binary patch literal 17833 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 literal 0 HcmV?d00001 diff --git a/src/static/images/2024/sustainability/number-of-requests-by-percentile-and-type-mobile.png b/src/static/images/2024/sustainability/number-of-requests-by-percentile-and-type-mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..09c12bd28dffdc49a45ccb3df569d00539e522f8 GIT binary patch literal 18315 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 literal 0 HcmV?d00001 diff --git a/src/static/images/2024/sustainability/number-of-requests-by-percentile.png b/src/static/images/2024/sustainability/number-of-requests-by-percentile.png new file mode 100644 index 0000000000000000000000000000000000000000..23f97273a5bd6bdf03c36e04333677f8ad686860 GIT binary patch literal 18956 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ėxzle|`{bU{+(- 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 literal 0 HcmV?d00001 diff --git a/src/static/images/2024/sustainability/percent_green_hosting.png b/src/static/images/2024/sustainability/percent_green_hosting.png new file mode 100644 index 0000000000000000000000000000000000000000..912af75821fd00c76e2956740f111c4ef4875e57 GIT binary patch literal 18937 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 MboFyt=akR{0Cz&f0{{R3 literal 0 HcmV?d00001 diff --git a/src/static/images/2024/sustainability/responsive-image-types.png b/src/static/images/2024/sustainability/responsive-image-types.png new file mode 100644 index 0000000000000000000000000000000000000000..4ce71985f54634568f1a560deccd295e4a964b46 GIT binary patch literal 22765 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 JsZm0N{};6M`MLlA literal 0 HcmV?d00001 diff --git a/src/static/images/2024/sustainability/style-usage.png b/src/static/images/2024/sustainability/style-usage.png new file mode 100644 index 0000000000000000000000000000000000000000..513ec601f6131617e0319d9acab6c4438877447e GIT binary patch literal 18520 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 literal 0 HcmV?d00001 diff --git a/src/static/images/2024/sustainability/unminified-css-savings.png b/src/static/images/2024/sustainability/unminified-css-savings.png new file mode 100644 index 0000000000000000000000000000000000000000..5d8cb690c434724e671881cc01450b1b8c2ccf04 GIT binary patch literal 14746 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

^1`X=JE9s3zAOhEvAr2Dd1!;E4S6j|CSg`tjV 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 Kb6Mw<&;$SkOofO5 literal 0 HcmV?d00001 diff --git a/src/static/images/2024/sustainability/unused_js.png b/src/static/images/2024/sustainability/unused_js.png new file mode 100644 index 0000000000000000000000000000000000000000..3b0059013ae14f07c374aaea94a3bdbcded26428 GIT binary patch literal 20781 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 literal 0 HcmV?d00001 diff --git a/src/static/images/2024/sustainability/video-autoplay-usage.png b/src/static/images/2024/sustainability/video-autoplay-usage.png new file mode 100644 index 0000000000000000000000000000000000000000..82d609339dfa036ff3100fd16390c1228aae59a1 GIT binary patch literal 19101 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 W)9rs`PDwumDe-jmb6Mw<&;$VMy7C7A literal 0 HcmV?d00001 From f084df412149a1f6bb8929fc83bcf744100e7b19 Mon Sep 17 00:00:00 2001 From: Estela Franco Date: Sat, 9 Nov 2024 22:49:35 +0100 Subject: [PATCH 08/19] Markup 2024 Chapter (#3815) * Add 2024 markup queries * Update Markup 2024 queries * Update Markup queries * Update markup.md * Update markdown.md * Smart quotes * Generate chapter * Generate images * Optimised images with calibre/image-actions * Add author * Lint SQL * Retake hi-res images * Update contributors file * Final edits --------- Co-authored-by: Barry Pollard Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- sql/2024/markup/attributes.sql | 62 ++ sql/2024/markup/buttons.sql | 49 ++ sql/2024/markup/comments.sql | 22 + sql/2024/markup/content_encoding.sql | 31 + sql/2024/markup/custom_elements_adoption.sql | 23 + .../custom_elements_js_bytes_distribution.sql | 41 + sql/2024/markup/data_attribute_total.sql | 43 ++ sql/2024/markup/data_attributes.sql | 57 ++ sql/2024/markup/distinct_lang.sql | 19 + sql/2024/markup/doctype.sql | 22 + .../markup/document_size_distribution.sql | 19 + sql/2024/markup/document_trends.sql | 20 + .../markup/document_trends_is_root_page.sql | 21 + .../markup/element_count_distribution.sql | 47 ++ sql/2024/markup/element_frequency.sql | 53 ++ sql/2024/markup/element_popularity.sql | 52 ++ sql/2024/markup/favicons.sql | 69 ++ sql/2024/markup/forms.sql | 24 + sql/2024/markup/inputs.sql | 56 ++ sql/2024/markup/inputs_per_form.sql | 33 + sql/2024/markup/lang.sql | 26 + sql/2024/markup/links.sql | 39 + sql/2024/markup/meta_node_names.sql | 56 ++ sql/2024/markup/meta_viewports.sql | 38 + sql/2024/markup/obsolete_elements.sql | 53 ++ src/config/2024.json | 3 +- src/config/contributors.json | 11 + src/content/en/2024/markup.md | 716 +++++++++++++++++- .../images/2024/markup/attribute_usage.png | Bin 0 -> 26533 bytes src/static/images/2024/markup/buttons.png | Bin 0 -> 22197 bytes .../images/2024/markup/content_encoding.png | Bin 0 -> 19482 bytes .../2024/markup/custom_element_popularity.png | Bin 0 -> 31640 bytes .../2024/markup/custom_elements_adoption.png | Bin 0 -> 22855 bytes .../custom_elements_js_bytes_distribution.png | Bin 0 -> 26104 bytes .../2024/markup/data_attribute_frequency.png | Bin 0 -> 34405 bytes .../2024/markup/data_attribute_popularity.png | Bin 0 -> 31401 bytes .../markup/distinct_elements_per_page.png | Bin 0 -> 21454 bytes .../markup/document_size_distribution.png | Bin 0 -> 17658 bytes .../images/2024/markup/document_trends.png | Bin 0 -> 18659 bytes .../images/2024/markup/elements_per_page.png | Bin 0 -> 20240 bytes src/static/images/2024/markup/favicons.png | Bin 0 -> 21668 bytes .../images/2024/markup/input_buttons.png | Bin 0 -> 21636 bytes .../images/2024/markup/meta_viewports.png | Bin 0 -> 47172 bytes .../images/2024/markup/obsolete_elements.png | Bin 0 -> 30945 bytes .../images/2024/markup/popular_lang.png | Bin 0 -> 26835 bytes .../2024/markup/popular_regional_lang.png | Bin 0 -> 29958 bytes .../markup/popularity_attribute_usage.png | Bin 0 -> 27747 bytes .../markup/popularity_of_top_elements.png | Bin 0 -> 35798 bytes .../images/2024/markup/social_meta_nodes.png | Bin 0 -> 33180 bytes .../images/2024/markup/top_elements.png | Bin 0 -> 33561 bytes 50 files changed, 1693 insertions(+), 12 deletions(-) create mode 100644 sql/2024/markup/attributes.sql create mode 100644 sql/2024/markup/buttons.sql create mode 100644 sql/2024/markup/comments.sql create mode 100644 sql/2024/markup/content_encoding.sql create mode 100644 sql/2024/markup/custom_elements_adoption.sql create mode 100644 sql/2024/markup/custom_elements_js_bytes_distribution.sql create mode 100644 sql/2024/markup/data_attribute_total.sql create mode 100644 sql/2024/markup/data_attributes.sql create mode 100644 sql/2024/markup/distinct_lang.sql create mode 100644 sql/2024/markup/doctype.sql create mode 100644 sql/2024/markup/document_size_distribution.sql create mode 100644 sql/2024/markup/document_trends.sql create mode 100644 sql/2024/markup/document_trends_is_root_page.sql create mode 100644 sql/2024/markup/element_count_distribution.sql create mode 100644 sql/2024/markup/element_frequency.sql create mode 100644 sql/2024/markup/element_popularity.sql create mode 100644 sql/2024/markup/favicons.sql create mode 100644 sql/2024/markup/forms.sql create mode 100644 sql/2024/markup/inputs.sql create mode 100644 sql/2024/markup/inputs_per_form.sql create mode 100644 sql/2024/markup/lang.sql create mode 100644 sql/2024/markup/links.sql create mode 100644 sql/2024/markup/meta_node_names.sql create mode 100644 sql/2024/markup/meta_viewports.sql create mode 100644 sql/2024/markup/obsolete_elements.sql create mode 100644 src/static/images/2024/markup/attribute_usage.png create mode 100644 src/static/images/2024/markup/buttons.png create mode 100644 src/static/images/2024/markup/content_encoding.png create mode 100644 src/static/images/2024/markup/custom_element_popularity.png create mode 100644 src/static/images/2024/markup/custom_elements_adoption.png create mode 100644 src/static/images/2024/markup/custom_elements_js_bytes_distribution.png create mode 100644 src/static/images/2024/markup/data_attribute_frequency.png create mode 100644 src/static/images/2024/markup/data_attribute_popularity.png create mode 100644 src/static/images/2024/markup/distinct_elements_per_page.png create mode 100644 src/static/images/2024/markup/document_size_distribution.png create mode 100644 src/static/images/2024/markup/document_trends.png create mode 100644 src/static/images/2024/markup/elements_per_page.png create mode 100644 src/static/images/2024/markup/favicons.png create mode 100644 src/static/images/2024/markup/input_buttons.png create mode 100644 src/static/images/2024/markup/meta_viewports.png create mode 100644 src/static/images/2024/markup/obsolete_elements.png create mode 100644 src/static/images/2024/markup/popular_lang.png create mode 100644 src/static/images/2024/markup/popular_regional_lang.png create mode 100644 src/static/images/2024/markup/popularity_attribute_usage.png create mode 100644 src/static/images/2024/markup/popularity_of_top_elements.png create mode 100644 src/static/images/2024/markup/social_meta_nodes.png create mode 100644 src/static/images/2024/markup/top_elements.png diff --git a/sql/2024/markup/attributes.sql b/sql/2024/markup/attributes.sql new file mode 100644 index 00000000000..cfff4906c90 --- /dev/null +++ b/sql/2024/markup/attributes.sql @@ -0,0 +1,62 @@ +#standardSQL +# pages almanac metrics grouped by device and element attribute use (frequency) + +CREATE TEMPORARY FUNCTION get_almanac_attribute_info(almanac_string STRING) +RETURNS ARRAY> LANGUAGE js AS ''' +try { + var almanac = JSON.parse(almanac_string); + + if (Array.isArray(almanac) || typeof almanac != 'object') return []; + + if (almanac.attributes_used_on_elements) { + return Object.entries(almanac.attributes_used_on_elements).map(([name, freq]) => ({name, freq})); + } + +} catch (e) { + +} +return []; +'''; + +WITH totals AS ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' + GROUP BY + client +), attributes AS ( + SELECT + client, + almanac_attribute_info.name, + COUNT(DISTINCT page) AS pages, + ANY_VALUE(total) AS total_pages, + COUNT(DISTINCT page) / ANY_VALUE(total) AS pct_pages, + SUM(almanac_attribute_info.freq) AS freq, + SUM(SUM(almanac_attribute_info.freq)) OVER (PARTITION BY client) AS total, + SUM(almanac_attribute_info.freq) / SUM(SUM(almanac_attribute_info.freq)) OVER (PARTITION BY client) AS pct_ratio + FROM + `httparchive.all.pages`, + UNNEST(get_almanac_attribute_info(JSON_EXTRACT(custom_metrics, '$.almanac'))) AS almanac_attribute_info + JOIN + totals + USING + (client) + WHERE + date = '2024-06-01' + GROUP BY + client, + almanac_attribute_info.name +) + +SELECT + * +FROM + attributes +ORDER BY + pct_ratio DESC +LIMIT + 1000 diff --git a/sql/2024/markup/buttons.sql b/sql/2024/markup/buttons.sql new file mode 100644 index 00000000000..dbabcaf56b8 --- /dev/null +++ b/sql/2024/markup/buttons.sql @@ -0,0 +1,49 @@ +CREATE TEMPORARY FUNCTION get_markup_buttons_info(markup_string STRING) +RETURNS ARRAY LANGUAGE js AS ''' +try { + var markup = JSON.parse(markup_string); + var type_total = Object.values(markup.buttons.types).reduce((total, i) => total + i, 0); + var types = []; + if (markup.buttons.total > type_total) { + types = ['NO_TYPE']; + } + return Object.keys(markup.buttons.types).concat(types); +} catch (e) { + return []; +} +'''; + +WITH totals AS ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' + GROUP BY + client +) + +SELECT + client AS client, + LOWER(TRIM(button_type)) AS button_type, + COUNT(DISTINCT page) AS page, + ANY_VALUE(total) AS total, + COUNT(DISTINCT page) / ANY_VALUE(total) AS pct_pages +FROM + `httparchive.all.pages` +JOIN + totals +USING + (client), + UNNEST(get_markup_buttons_info(JSON_EXTRACT(custom_metrics, '$.markup'))) AS button_type +WHERE + date = '2024-06-01' +GROUP BY + client, + button_type +ORDER BY + pct_pages DESC +LIMIT + 1000 diff --git a/sql/2024/markup/comments.sql b/sql/2024/markup/comments.sql new file mode 100644 index 00000000000..92bb1b77ff6 --- /dev/null +++ b/sql/2024/markup/comments.sql @@ -0,0 +1,22 @@ +WITH comments AS ( + SELECT + client, + CAST(JSON_VALUE(JSON_EXTRACT(custom_metrics, '$.wpt_bodies'), '$.raw_html.comment_count') AS INT64) AS num_comments, + CAST(JSON_VALUE(JSON_EXTRACT(custom_metrics, '$.wpt_bodies'), '$.raw_html.conditional_comment_count') AS INT64) AS num_conditional_comments + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' +) + +SELECT + client, + COUNTIF(num_comments > 0) AS num_comments, + COUNTIF(num_conditional_comments > 0) AS num_conditional_comments, + COUNT(0) AS total, + COUNTIF(num_comments > 0) / COUNT(0) AS pct_comments, + COUNTIF(num_conditional_comments > 0) / COUNT(0) AS pct_conditional_comments +FROM + comments +GROUP BY + client diff --git a/sql/2024/markup/content_encoding.sql b/sql/2024/markup/content_encoding.sql new file mode 100644 index 00000000000..94b95e50d11 --- /dev/null +++ b/sql/2024/markup/content_encoding.sql @@ -0,0 +1,31 @@ +-- Temporary function to extract content-encoding +CREATE TEMPORARY FUNCTION GET_CONTENT_ENCODING(response_headers ARRAY>) +RETURNS STRING AS ( + ( + SELECT + value + FROM + UNNEST(response_headers) AS header + WHERE + LOWER(header.name) = 'content-encoding' + LIMIT 1 + ) +); + +SELECT + date, + client, + GET_CONTENT_ENCODING(response_headers) AS content_encoding, + COUNT(0) AS freq, + SUM(COUNT(0)) OVER (PARTITION BY client) AS total, + COUNT(0) / SUM(COUNT(0)) OVER (PARTITION BY client) AS pct +FROM + `httparchive.all.requests` +WHERE + date = '2024-06-01' AND + is_main_document +GROUP BY + client, + content_encoding +ORDER BY + pct DESC diff --git a/sql/2024/markup/custom_elements_adoption.sql b/sql/2024/markup/custom_elements_adoption.sql new file mode 100644 index 00000000000..eaeaeb556b5 --- /dev/null +++ b/sql/2024/markup/custom_elements_adoption.sql @@ -0,0 +1,23 @@ +WITH custom_elements AS ( + SELECT + client, + page, + COALESCE(ARRAY_LENGTH(JSON_VALUE_ARRAY(JSON_EXTRACT(custom_metrics, '$.wpt_bodies'), '$.web_components.rendered.customElements.names')) > 0, FALSE) AS has_custom_elements + FROM + `httparchive.all.pages` + WHERE + date IN ('2022-06-01', '2023-06-01', '2024-06-01') +) + +SELECT + date, + client, + COUNT(0) AS total, + COUNTIF(has_custom_elements) AS freq, + COUNTIF(has_custom_elements) / COUNT(0) AS pct_custom_elements +FROM + custom_elements +GROUP BY + date, client +ORDER BY + date ASC diff --git a/sql/2024/markup/custom_elements_js_bytes_distribution.sql b/sql/2024/markup/custom_elements_js_bytes_distribution.sql new file mode 100644 index 00000000000..a1fc0ce401e --- /dev/null +++ b/sql/2024/markup/custom_elements_js_bytes_distribution.sql @@ -0,0 +1,41 @@ +WITH js_bytes AS ( + SELECT + client, + page, + SAFE_CAST(JSON_EXTRACT(summary, '$.bytesJS') AS INT64) / 1024 AS kbytes_js + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' +), custom_elements AS ( + SELECT + client, + page, + COALESCE(ARRAY_LENGTH(JSON_VALUE_ARRAY(JSON_EXTRACT(custom_metrics, '$.wpt_bodies'), '$.web_components.rendered.customElements.names')) > 0, FALSE) AS has_custom_elements + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' +) + +SELECT + percentile, + client, + has_custom_elements, + APPROX_QUANTILES(kbytes_js, 1000)[OFFSET(percentile * 10)] AS kbytes_js, + COUNT(DISTINCT page) AS pages +FROM + custom_elements +JOIN + js_bytes +USING + (client, page), + UNNEST([10, 25, 50, 75, 90]) AS percentile +GROUP BY + percentile, + client, + has_custom_elements +ORDER BY + percentile, + client, + has_custom_elements diff --git a/sql/2024/markup/data_attribute_total.sql b/sql/2024/markup/data_attribute_total.sql new file mode 100644 index 00000000000..ad3a93a161c --- /dev/null +++ b/sql/2024/markup/data_attribute_total.sql @@ -0,0 +1,43 @@ +CREATE TEMPORARY FUNCTION get_almanac_attribute_info(almanac_string STRING) +RETURNS ARRAY> LANGUAGE js AS ''' +try { + var almanac = JSON.parse(almanac_string); + + if (Array.isArray(almanac) || typeof almanac != 'object') return []; + + if (almanac.attributes_used_on_elements) { + return Object.entries(almanac.attributes_used_on_elements).filter(([name, freq]) => name.startsWith('data-')).map(([name, freq]) => ({name, freq})); + } + +} catch (e) {} +return []; +'''; + +WITH totals AS ( + SELECT + client, + COUNT(0) AS total_pages + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' + GROUP BY + client +) + +SELECT + client, + COUNT(DISTINCT page) AS pages, + ANY_VALUE(total_pages) AS total_pages, + COUNT(DISTINCT page) / ANY_VALUE(total_pages) AS pct_pages +FROM + `httparchive.all.pages` +JOIN + totals +USING + (client), + UNNEST(get_almanac_attribute_info(JSON_EXTRACT(custom_metrics, '$.almanac'))) AS almanac_attribute_info +WHERE + date = '2024-06-01' +GROUP BY + client diff --git a/sql/2024/markup/data_attributes.sql b/sql/2024/markup/data_attributes.sql new file mode 100644 index 00000000000..f90fddd76ec --- /dev/null +++ b/sql/2024/markup/data_attributes.sql @@ -0,0 +1,57 @@ +CREATE TEMPORARY FUNCTION get_almanac_attribute_info(almanac_string STRING) +RETURNS ARRAY> LANGUAGE js AS ''' +try { + var almanac = JSON.parse(almanac_string); + + if (Array.isArray(almanac) || typeof almanac != 'object') return []; + + if (almanac.attributes_used_on_elements) { + return Object.entries(almanac.attributes_used_on_elements).filter(([name, freq]) => name.startsWith('data-')).map(([name, freq]) => ({name, freq})); + } + +} catch (e) {} +return []; +'''; + +WITH totals AS ( + SELECT + client, + COUNT(0) AS total_pages + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' + GROUP BY + client +), data_attrs AS ( + SELECT + client, + almanac_attribute_info.name, + COUNT(DISTINCT page) AS pages, + ANY_VALUE(total_pages) AS total_pages, + COUNT(DISTINCT page) / ANY_VALUE(total_pages) AS pct_pages, + SUM(almanac_attribute_info.freq) AS freq, # total count from all pages + SUM(SUM(almanac_attribute_info.freq)) OVER (PARTITION BY client) AS total, + SUM(almanac_attribute_info.freq) / SUM(SUM(almanac_attribute_info.freq)) OVER (PARTITION BY client) AS pct_ratio + FROM + `httparchive.all.pages` + JOIN + totals + USING + (client), + UNNEST(get_almanac_attribute_info(JSON_EXTRACT(custom_metrics, '$.almanac'))) AS almanac_attribute_info + WHERE + date = '2024-06-01' + GROUP BY + client, + almanac_attribute_info.name +) + +SELECT + * +FROM + data_attrs +ORDER BY + pct_ratio DESC +LIMIT + 1000 diff --git a/sql/2024/markup/distinct_lang.sql b/sql/2024/markup/distinct_lang.sql new file mode 100644 index 00000000000..d539b469625 --- /dev/null +++ b/sql/2024/markup/distinct_lang.sql @@ -0,0 +1,19 @@ +WITH langs AS ( + SELECT + client, + TRIM(LOWER(JSON_EXTRACT(custom_metrics, '$.almanac.html_node.lang'))) AS lang + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' +) + +SELECT + client, + COUNT(DISTINCT IFNULL(lang, '(not set)')) AS distinct_lang_count +FROM + langs +GROUP BY + client +ORDER BY + distinct_lang_count DESC; diff --git a/sql/2024/markup/doctype.sql b/sql/2024/markup/doctype.sql new file mode 100644 index 00000000000..aa781d9296a --- /dev/null +++ b/sql/2024/markup/doctype.sql @@ -0,0 +1,22 @@ +-- Temporary function to extract doctype +CREATE TEMPORARY FUNCTION EXTRACT_DOCTYPE(summary STRING) RETURNS STRING AS ( + SAFE_CAST(JSON_EXTRACT(summary, '$.doctype') AS STRING) +); + +SELECT + client, + LOWER(REGEXP_REPLACE(TRIM(EXTRACT_DOCTYPE(summary)), r' +', ' ')) AS doctype, # remove extra spaces and make lower case + COUNT(0) AS pages, + SUM(COUNT(0)) OVER (PARTITION BY client) AS total, + COUNT(0) / SUM(COUNT(0)) OVER (PARTITION BY client) AS pct_pages +FROM + `httparchive.all.pages` +WHERE + date = '2024-06-01' +GROUP BY + client, + doctype +ORDER BY + pct_pages DESC +LIMIT + 100; diff --git a/sql/2024/markup/document_size_distribution.sql b/sql/2024/markup/document_size_distribution.sql new file mode 100644 index 00000000000..1f21433f270 --- /dev/null +++ b/sql/2024/markup/document_size_distribution.sql @@ -0,0 +1,19 @@ +-- Temporary function to extract bytesHtml +CREATE TEMPORARY FUNCTION EXTRACT_DOCTYPE(summary STRING) RETURNS INT64 AS ( + SAFE_CAST(JSON_EXTRACT(summary, '$.bytesHtml') AS INT64) +); + +SELECT + percentile, + client, + APPROX_QUANTILES(EXTRACT_DOCTYPE(summary) / 1014, 1000)[OFFSET(percentile * 10)] AS kb_html +FROM + `httparchive.all.pages`, + UNNEST([10, 25, 50, 75, 90]) AS percentile +WHERE + date = '2024-06-01' +GROUP BY + percentile, + client +ORDER BY + client diff --git a/sql/2024/markup/document_trends.sql b/sql/2024/markup/document_trends.sql new file mode 100644 index 00000000000..130d652e85a --- /dev/null +++ b/sql/2024/markup/document_trends.sql @@ -0,0 +1,20 @@ +-- Temporary function to extract bytesHtml +CREATE TEMPORARY FUNCTION EXTRACT_DOCTYPE(summary STRING) RETURNS INT64 AS ( + SAFE_CAST(JSON_EXTRACT(summary, '$.bytesHtml') AS INT64) +); + +SELECT + date, + client, + APPROX_QUANTILES(EXTRACT_DOCTYPE(summary) / 1024, 1000)[OFFSET(500)] AS median_kbytes_html, + COUNT(0) AS total +FROM + `httparchive.all.pages` +WHERE + date IN ('2022-06-01', '2023-06-01', '2024-06-01') +GROUP BY + date, + client +ORDER BY + date, + client diff --git a/sql/2024/markup/document_trends_is_root_page.sql b/sql/2024/markup/document_trends_is_root_page.sql new file mode 100644 index 00000000000..c3d77a55a17 --- /dev/null +++ b/sql/2024/markup/document_trends_is_root_page.sql @@ -0,0 +1,21 @@ +-- Temporary function to extract bytesHtml +CREATE TEMPORARY FUNCTION EXTRACT_DOCTYPE(summary STRING) RETURNS INT64 AS ( + SAFE_CAST(JSON_EXTRACT(summary, '$.bytesHtml') AS INT64) +); + +SELECT + date, + client, + APPROX_QUANTILES(EXTRACT_DOCTYPE(summary) / 1024, 1000)[OFFSET(500)] AS median_kbytes_html, + COUNT(0) AS total +FROM + `httparchive.all.pages` +WHERE + date IN ('2022-06-01', '2023-06-01', '2024-06-01') AND + is_root_page +GROUP BY + date, + client +ORDER BY + date, + client diff --git a/sql/2024/markup/element_count_distribution.sql b/sql/2024/markup/element_count_distribution.sql new file mode 100644 index 00000000000..f098813e6f0 --- /dev/null +++ b/sql/2024/markup/element_count_distribution.sql @@ -0,0 +1,47 @@ +CREATE TEMPORARY FUNCTION get_element_count_info(element_count_string STRING) +RETURNS STRUCT LANGUAGE js AS ''' +var result = {}; +try { + if (!element_count_string) return result; + + var element_count = JSON.parse(element_count_string); + + if (Array.isArray(element_count) || typeof element_count != 'object') return result; + + result.elements_count = Object.values(element_count).reduce((total, freq) => total + (parseInt(freq, 10) || 0), 0); + + result.types_count = Object.keys(element_count).length; + +} catch (e) {} +return result; +'''; + +SELECT + client, + percentile, + COUNT(DISTINCT page) AS total, + + # total number of elements on a page + APPROX_QUANTILES(element_count_info.elements_count, 1000)[OFFSET(percentile * 10)] AS elements_count, + + # number of types of elements on a page + APPROX_QUANTILES(element_count_info.types_count, 1000)[OFFSET(percentile * 10)] AS types_count + +FROM ( + SELECT + client, + percentile, + page, + get_element_count_info(JSON_EXTRACT(custom_metrics, '$.element_count')) AS element_count_info + FROM + `httparchive.all.pages`, + UNNEST([10, 25, 50, 75, 90]) AS percentile + WHERE + date = '2024-06-01' +) +GROUP BY + percentile, + client +ORDER BY + percentile, + client diff --git a/sql/2024/markup/element_frequency.sql b/sql/2024/markup/element_frequency.sql new file mode 100644 index 00000000000..13235141746 --- /dev/null +++ b/sql/2024/markup/element_frequency.sql @@ -0,0 +1,53 @@ +CREATE TEMPORARY FUNCTION get_element_types_info(element_count_string STRING) +RETURNS ARRAY> LANGUAGE js AS ''' +try { + if (!element_count_string) return []; // 2019 had a few cases + + var element_count = JSON.parse(element_count_string); // should be an object with element type properties with values of how often they are present + + if (Array.isArray(element_count) || typeof element_count != 'object') return []; + + return Object.entries(element_count).map(([name, freq]) => ({name, freq})); + +} catch (e) { + return []; +} +'''; + +WITH totals AS ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' + GROUP BY + client +) + +SELECT + client AS client, + element_type_info.name, + COUNT(DISTINCT page) AS pages, + ANY_VALUE(total) AS total_pages, + COUNT(DISTINCT page) / ANY_VALUE(total) AS pct_pages, + SUM(element_type_info.freq) AS freq, # total count from all pages + SUM(SUM(element_type_info.freq)) OVER (PARTITION BY client) AS total_freq, + SUM(element_type_info.freq) / SUM(SUM(element_type_info.freq)) OVER (PARTITION BY client) AS pct +FROM + `httparchive.all.pages`, + UNNEST(get_element_types_info(JSON_EXTRACT(custom_metrics, '$.element_count'))) AS element_type_info +JOIN + totals +USING + (client) +WHERE + date = '2024-06-01' +GROUP BY + client, + element_type_info.name +ORDER BY + pct DESC +LIMIT + 1000 diff --git a/sql/2024/markup/element_popularity.sql b/sql/2024/markup/element_popularity.sql new file mode 100644 index 00000000000..ec4ee5d598c --- /dev/null +++ b/sql/2024/markup/element_popularity.sql @@ -0,0 +1,52 @@ +CREATE TEMPORARY FUNCTION get_element_types(element_count_string STRING) +RETURNS ARRAY LANGUAGE js AS ''' +try { + if (!element_count_string) return []; // 2019 had a few cases + + var element_count = JSON.parse(element_count_string); // should be an object with element type properties with values of how often they are present + + if (Array.isArray(element_count)) return []; + if (typeof element_count != 'object') return []; + + return Object.keys(element_count); +} catch (e) { + return []; +} +'''; + +WITH totals AS ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' + GROUP BY + client +) + +SELECT + client AS client, + element_type, + COUNT(DISTINCT page) AS pages, + total, + COUNT(DISTINCT page) / total AS pct +FROM + `httparchive.all.pages` +JOIN + totals +USING + (client), + UNNEST(get_element_types(JSON_EXTRACT(custom_metrics, '$.element_count'))) AS element_type +WHERE + date = '2024-06-01' +GROUP BY + client, + total, + element_type +ORDER BY + pct DESC, + client, + pages DESC +LIMIT 1000 diff --git a/sql/2024/markup/favicons.sql b/sql/2024/markup/favicons.sql new file mode 100644 index 00000000000..cd62f85e890 --- /dev/null +++ b/sql/2024/markup/favicons.sql @@ -0,0 +1,69 @@ +CREATE TEMPORARY FUNCTION getFaviconImage(almanac_string STRING) +RETURNS STRUCT< + image_type_extension STRING +> LANGUAGE js AS ''' +var result = {}; +try { + var almanac = JSON.parse(almanac_string); + + if (Array.isArray(almanac) || typeof almanac != 'object') return result; + + if (almanac["link-nodes"] && almanac["link-nodes"].nodes && almanac["link-nodes"].nodes.find) { + var faviconNode = almanac["link-nodes"].nodes.find(n => n.rel && n.rel.split(' ').find(r => r.trim().toLowerCase() == 'icon')); + + if (faviconNode) { + if (faviconNode.href) { + var temp = faviconNode.href; + + if (temp.includes('?')) { + temp = temp.substring(0, temp.indexOf('?')); + } + + if (temp.includes('.')) { + temp = temp.substring(temp.lastIndexOf('.')+1); + + result.image_type_extension = temp.toLowerCase().trim(); + } + else { + result.image_type_extension = "NO_EXTENSION"; + } + + } else { + result.image_type_extension = "NO_HREF"; + } + } else { + result.image_type_extension = "NO_ICON"; + } + } + else { + result.image_type_extension = "NO_DATA"; + } + +} catch (e) {result.image_type_extension = "NO_DATA";} +return result; +'''; + +SELECT + client, + favicon.image_type_extension AS image_type_extension, + COUNT(0) AS freq, + SUM(COUNT(0)) OVER (PARTITION BY client) AS total, + COUNT(0) / SUM(COUNT(0)) OVER (PARTITION BY client) AS pct +FROM + ( + SELECT + client, + getFaviconImage(JSON_EXTRACT(custom_metrics, '$.almanac')) AS favicon + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' + ) +GROUP BY + client, + image_type_extension +ORDER BY + pct DESC, + client, + freq DESC +LIMIT 1000 diff --git a/sql/2024/markup/forms.sql b/sql/2024/markup/forms.sql new file mode 100644 index 00000000000..0ae1abdafeb --- /dev/null +++ b/sql/2024/markup/forms.sql @@ -0,0 +1,24 @@ +WITH forms AS ( + SELECT + client, + page, + CAST(IFNULL(JSON_VALUE(JSON_EXTRACT(custom_metrics, '$.element_count'), '$.form'), '0') AS INT64) AS forms_count + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' +) + +SELECT + client, + forms_count, + COUNT(0) AS pages, + SUM(COUNT(0)) OVER (PARTITION BY client) AS total, + COUNT(0) / SUM(COUNT(0)) OVER (PARTITION BY client) AS pct_pages +FROM + forms +GROUP BY + client, + forms_count +ORDER BY + forms_count ASC diff --git a/sql/2024/markup/inputs.sql b/sql/2024/markup/inputs.sql new file mode 100644 index 00000000000..eadd87c520c --- /dev/null +++ b/sql/2024/markup/inputs.sql @@ -0,0 +1,56 @@ +CREATE TEMPORARY FUNCTION get_markup_inputs_info(markup_string STRING) +RETURNS ARRAY> LANGUAGE js AS ''' +var result = []; +try { + var markup = JSON.parse(markup_string); + + if (Array.isArray(markup) || typeof markup != 'object') return result; + + if (markup.inputs && markup.inputs.types) { + var total = markup.inputs.total; + var withType = 0; + result = Object.entries(markup.inputs.types).map(([name, freq]) => { withType+=freq; return {name: name.toLowerCase().trim(), freq};}); + + result.push({name:"NO_TYPE", freq: total - withType}) + + return result; + } + +} catch (e) {} +return result; +'''; + +WITH totals AS ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' + GROUP BY + client +) + +SELECT + client, + markup_input_info.name AS input_type, + COUNTIF(markup_input_info.freq > 0) AS freq_page_with_input, + COUNTIF(markup_input_info.freq > 0) / ANY_VALUE(total) AS pct_page_with_input, + SUM(markup_input_info.freq) AS freq_input, + SUM(markup_input_info.freq) / SUM(SUM(markup_input_info.freq)) OVER (PARTITION BY client) AS pct_input +FROM + `httparchive.all.pages` +JOIN + totals +USING (client), + UNNEST(get_markup_inputs_info(JSON_EXTRACT(custom_metrics, '$.markup'))) AS markup_input_info +WHERE + date = '2024-06-01' +GROUP BY + client, + input_type +ORDER BY + freq_page_with_input DESC +LIMIT + 1000 diff --git a/sql/2024/markup/inputs_per_form.sql b/sql/2024/markup/inputs_per_form.sql new file mode 100644 index 00000000000..2ec643a5b90 --- /dev/null +++ b/sql/2024/markup/inputs_per_form.sql @@ -0,0 +1,33 @@ +CREATE TEMP FUNCTION getInputsPerForm(markup STRING) RETURNS ARRAY LANGUAGE js AS r''' +try { + markup = JSON.parse(markup); + return markup.form.elements.map(i => i.total); +} catch { + return []; +} +'''; + +WITH inputs AS ( + SELECT + client, + inputs_per_form + FROM + `httparchive.all.pages`, + UNNEST(getInputsPerForm(JSON_EXTRACT(custom_metrics, '$.markup'))) AS inputs_per_form + WHERE + date = '2024-06-01' +) + +SELECT + percentile, + client, + APPROX_QUANTILES(inputs_per_form, 1000)[OFFSET(percentile * 10)] AS inputs_per_form +FROM + inputs, + UNNEST([10, 25, 50, 75, 90]) AS percentile +GROUP BY + percentile, + client +ORDER BY + percentile, + client diff --git a/sql/2024/markup/lang.sql b/sql/2024/markup/lang.sql new file mode 100644 index 00000000000..39f4c3d62d6 --- /dev/null +++ b/sql/2024/markup/lang.sql @@ -0,0 +1,26 @@ +WITH langs AS ( + SELECT + client, + TRIM(LOWER(JSON_EXTRACT(custom_metrics, '$.almanac.html_node.lang'))) AS lang + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' +) + +SELECT + client, + IFNULL(lang, '(not set)') AS html_lang_region, + IFNULL(REGEXP_EXTRACT(lang, r'^([^\-]+)'), '(not set)') AS html_lang, + COUNT(0) AS pages, + SUM(COUNT(0)) OVER (PARTITION BY client) AS total, + COUNT(0) / SUM(COUNT(0)) OVER (PARTITION BY client) AS pct_pages +FROM + langs +GROUP BY + client, + lang +HAVING + pages > 100 +ORDER BY + pct_pages DESC diff --git a/sql/2024/markup/links.sql b/sql/2024/markup/links.sql new file mode 100644 index 00000000000..09a79742050 --- /dev/null +++ b/sql/2024/markup/links.sql @@ -0,0 +1,39 @@ +WITH bodies AS ( + SELECT + client, + JSON_EXTRACT(custom_metrics, '$.wpt_bodies') AS wpt_bodies + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' +), links AS ( + SELECT + client, + SAFE_CAST(JSON_EXTRACT(wpt_bodies, '$.anchors.rendered.target_blank.total') AS INT64) AS target_blank_total, + SAFE_CAST(JSON_EXTRACT(wpt_bodies, '$.anchors.rendered.target_blank.noopener_noreferrer') AS INT64) AS target_blank_noopener_noreferrer_total, + SAFE_CAST(JSON_EXTRACT(wpt_bodies, '$.anchors.rendered.target_blank.noopener') AS INT64) AS target_blank_noopener_total, + SAFE_CAST(JSON_EXTRACT(wpt_bodies, '$.anchors.rendered.target_blank.noreferrer') AS INT64) AS target_blank_noreferrer_total, + SAFE_CAST(JSON_EXTRACT(wpt_bodies, '$.anchors.rendered.target_blank.neither') AS INT64) AS target_blank_neither_total + FROM + bodies +) + +SELECT + client, + COUNT(0) AS total, + + # pages with all target _banks including rel="noopener noreferrer" + COUNTIF(target_blank_total IS NULL OR target_blank_total = target_blank_noopener_noreferrer_total) / COUNT(0) AS pct_always_target_blank_noopener_noreferrer, + + # pages with some target _banks not using rel="noopener noreferrer" + COUNTIF(target_blank_total > target_blank_noopener_noreferrer_total) / COUNT(0) AS pct_some_target_blank_without_noopener_noreferrer, + + COUNTIF(target_blank_total > 0) / COUNT(0) AS pct_has_target_blank, + COUNTIF(target_blank_noopener_noreferrer_total > 0) / COUNT(0) AS pct_has_target_blank_noopener_noreferrer, + COUNTIF(target_blank_noopener_total > 0) / COUNT(0) AS pct_has_target_blank_noopener, + COUNTIF(target_blank_noreferrer_total > 0) / COUNT(0) AS pct_has_target_blank_noreferrer, + COUNTIF(target_blank_neither_total > 0) / COUNT(0) AS pct_has_target_blank_neither +FROM + links +GROUP BY + client diff --git a/sql/2024/markup/meta_node_names.sql b/sql/2024/markup/meta_node_names.sql new file mode 100644 index 00000000000..b2aa9428f2b --- /dev/null +++ b/sql/2024/markup/meta_node_names.sql @@ -0,0 +1,56 @@ +CREATE TEMPORARY FUNCTION getMetaNodes(custom_metrics STRING) +RETURNS ARRAY +LANGUAGE js AS ''' +try { + var almanac = JSON.parse(custom_metrics); + return almanac['meta-nodes'].nodes.map(n => n.name || n.property); +} catch (e) { + return []; +} +'''; + +WITH totals AS ( + SELECT + client, + COUNT(0) AS total_pages + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' + GROUP BY + client +), + +meta AS ( + SELECT + client, + IF(IFNULL(TRIM(name), '') = '', '(not set)', name) AS name, + COUNT(0) AS freq, + COUNT(0) / SUM(COUNT(0)) OVER () AS pct_nodes, + COUNT(DISTINCT page) AS num_urls, + COUNT(DISTINCT page) / total_pages AS pct_pages + FROM + `httparchive.all.pages`, + UNNEST(getMetaNodes(JSON_EXTRACT(custom_metrics, '$.almanac'))) AS name + JOIN + totals + USING + (client) + WHERE + date = '2024-06-01' + GROUP BY + client, + total_pages, + name +) + +SELECT + * +FROM + meta +WHERE + freq > 1 +ORDER BY + pct_nodes DESC +LIMIT + 200 diff --git a/sql/2024/markup/meta_viewports.sql b/sql/2024/markup/meta_viewports.sql new file mode 100644 index 00000000000..5df801a2c39 --- /dev/null +++ b/sql/2024/markup/meta_viewports.sql @@ -0,0 +1,38 @@ +CREATE TEMPORARY FUNCTION normalise(content STRING) RETURNS STRING LANGUAGE js AS ''' +try { + // split by , + // trim + // lower case + // alphabetize + // re join by comma + + return content.split(",").map(c1 => c1.trim().toLowerCase().replace(/ +/g, "").replace(/\\.0*/,"")).sort().join(","); +} catch (e) { + return ''; +} +'''; + +WITH viewports AS ( + SELECT + client, + normalise(SAFE_CAST(JSON_EXTRACT(summary, '$.meta_viewport') AS STRING)) AS meta_viewport, + COUNT(0) AS freq, + SUM(COUNT(0)) OVER (PARTITION BY client) AS total, + COUNT(0) / SUM(COUNT(0)) OVER (PARTITION BY client) AS pct + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' + GROUP BY + client, + meta_viewport +) + +SELECT + * +FROM + viewports +ORDER BY + pct DESC +LIMIT + 100 diff --git a/sql/2024/markup/obsolete_elements.sql b/sql/2024/markup/obsolete_elements.sql new file mode 100644 index 00000000000..a74fa90a355 --- /dev/null +++ b/sql/2024/markup/obsolete_elements.sql @@ -0,0 +1,53 @@ +CREATE TEMPORARY FUNCTION get_element_types(element_count_string STRING) +RETURNS ARRAY LANGUAGE js AS ''' +try { + if (!element_count_string) return []; // 2019 had a few cases + + var element_count = JSON.parse(element_count_string); // should be an object with element type properties with values of how often they are present + + if (Array.isArray(element_count)) return []; + if (typeof element_count != 'object') return []; + + return Object.keys(element_count); +} catch (e) { + return []; +} +'''; + +CREATE TEMPORARY FUNCTION is_obsolete(element STRING) AS ( + element IN ('applet', 'acronym', 'basefont', 'bgsound', 'big', 'blink', 'center', 'dir', 'font', 'frame', 'frameset', 'isindex', 'keygen', 'listing', 'marquee', 'menuitem', 'multicol', 'nextid', 'nobr', 'noembed', 'noframes', 'param', 'plaintext', 'rb', 'rtc', 'spacer', 'strike', 'tt', 'xmp') +); + +WITH totals AS ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.all.pages` + WHERE + date = '2024-06-01' + GROUP BY client +) + +SELECT + client, + element_type AS obsolete_element_type, + COUNT(DISTINCT page) AS pages, + total AS total_pages, + COUNT(DISTINCT page) / total AS pct_pages_with_obsolete_elements +FROM + `httparchive.all.pages` +JOIN + totals +USING + (client), + UNNEST(get_element_types(JSON_EXTRACT(custom_metrics, '$.element_count'))) AS element_type +WHERE + date = '2024-06-01' AND + is_obsolete(element_type) +GROUP BY + client, + total, + obsolete_element_type +ORDER BY + pct_pages_with_obsolete_elements DESC diff --git a/src/config/2024.json b/src/config/2024.json index 60a26c8cbec..a7d8fc69aa8 100644 --- a/src/config/2024.json +++ b/src/config/2024.json @@ -29,8 +29,7 @@ "part": "I", "chapter_number": "3", "title": "Markup", - "slug": "markup", - "todo": true + "slug": "markup" }, { "part": "I", diff --git a/src/config/contributors.json b/src/config/contributors.json index 4696d5898cc..a074b60b671 100644 --- a/src/config/contributors.json +++ b/src/config/contributors.json @@ -774,6 +774,9 @@ "2022": [ "authors", "reviewers" + ], + "2024": [ + "reviewers" ] }, "twitter": "briankardell", @@ -1412,12 +1415,14 @@ }, "guaca": { "avatar_url": "7644895", + "bluesky": "guaca.bsky.social", "github": "guaca", "linkedin": "estelafranco", "mastodon": "https://toot.cafe/@guaca", "name": "Estela Franco", "teams": { "2024": [ + "authors", "analysts" ] }, @@ -2019,6 +2024,9 @@ "2022": [ "authors", "reviewers" + ], + "2024": [ + "reviewers" ] }, "twitter": "j9t", @@ -3885,6 +3893,9 @@ ], "2022": [ "reviewers" + ], + "2024": [ + "reviewers" ] }, "twitter": "zcorpan" diff --git a/src/content/en/2024/markup.md b/src/content/en/2024/markup.md index a606fdf3773..564dc00893d 100644 --- a/src/content/en/2024/markup.md +++ b/src/content/en/2024/markup.md @@ -2,17 +2,713 @@ #See https://github.com/HTTPArchive/almanac.httparchive.org/wiki/Authors'-Guide#metadata-to-add-at-the-top-of-your-chapters title: Markup description: Markup chapter of the 2024 Web Almanac covering document data (doctypes, compression, languages, HTML conformance, document size), the use of HTML elements and attributes, data attributes and social media. -authors: [] -reviewers: [] +authors: [guaca] +reviewers: [bkardell, j9t, zcorpan] +analysts: [guaca] editors: [] -analysts: [] translators: [] +guaca_bio: Estela Franco is a web performance and technical SEO specialist at Schneider Electric. But apart from that, she loves being connected to the community. That is why she is an international conference speaker, a Google Developer Expert in Web Technologies, a Storyblok ambassador, co-organizer of the Barcelona Web Performance Meetup, and co-founder of the Mujeres en SEO community. results: https://docs.google.com/spreadsheets/d/1TtOMr_w58HvqNBv4RIWX021Lxm6m5ajYOcRykrPdAJc/ -featured_quote: -featured_stat_1: -featured_stat_label_1: -featured_stat_2: -featured_stat_label_2: -featured_stat_3: -featured_stat_label_3: +featured_quote: Every website, every web application, and every online interaction starts with HTML at its core, making it one of the most essential web standards. +featured_stat_1: 92.8% +featured_stat_label_1: Documents using the HTML doctype +featured_stat_2: 32 MB +featured_stat_label_2: Median HTML document transfer size +featured_stat_3: 29% +featured_stat_label_3: Elements that are `div`s --- + +## Introduction + +The web as we know it is built on the foundation of HTML. Every website, every web application, and every online interaction starts with HTML at its core, making it one of the most essential web standards. It's the language that structures content, defines relationships, and communicates with browsers, ensuring that what we create can be viewed, interacted with, and understood by users worldwide. This chapter is dedicated to understanding how HTML continues to shape the web in 2024, exploring trends in its use, the rise of custom elements, and how developers are leveraging new features to build more accessible, efficient, and future-proof websites. + +This year's edition brings a broader perspective, as our dataset now includes not only homepages but also a wide variety of secondary pages. By analyzing pages beyond just the front doors of websites, we're able to capture a richer, more accurate snapshot of how HTML is used across different types of content and contexts. From blog posts and product pages to login screens and article archives, this expanded scope gives us deeper insights into the real-world application of HTML. + +We encourage readers to dive deeper into the data, explore their own insights, and join the conversation about the future of the web's foundational language. + +## General + +Let's start with some of the more general aspects of a markup document. In this section we're covering the document types, the size of the documents, language and compression. +` +### Doctypes + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DoctypeRendering ModeDesktopMobile
``standards mode91.7%92.8%
`html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"`almost standards mode3.4%2.7%
No doctypequirks mode2.1%2.2%
`html public "-//w3c//dtd xhtml 1.0 strict//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"`standards mode0.8%0.7%
`html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd"`almost standards mode0.6%0.4%
`html public "-//w3c//dtd html 4.01 transitional//en"`quirks mode0.3%0.3%
+
+ {{ figure_link( + caption="Doctype usage.", + sheets_gid="1243074845", + sql_file="doctype.sql", + ) }} +
+
+ +{{ figure_markup( + content="92.8%", + caption="Mobile pages using the standard HTML doctype.", + classes="big-number", + sheets_gid="1243074845", + sql_file="doctype.sql", +) }} + +93% of all mobile pages use the standard HTML doctype. That is, ``. + +This is 3 percentage points higher than [the 2022 data](../2022/markup#doctypes). The surprising part is the next most popular: `XHTML 1.1 Transitional`—but slowly disappearing (2.7%, down from 3.9% in 2022). + +### Document size + +A page's document size is the amount of HTML bytes transferred over the network, including compression. + +{{ figure_markup( + image="document_trends.png", + caption="Median transfer size of HTML document", + description="Bar chart showing the median transfer size of HTML document. In 2022, the median was 31 kB on desktop and 29 on mobile. In 2023, 30 kB on desktop and 29 kB on mobile. And in 2024, 33 kB on desktop and 32 kB on mobile.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vQTldh1hYi8-zIRgmK_v6IhpKuUOPTAhBxStogg3rt1L6isaX6v8dgODs7WiJ_udh7ZvHnvrTZLlXkW/pubchart?oid=1823253654&format=interactive", + sheets_gid="1730786160", + sql_file="document_trends.sql" + ) +}} + +After a slight decrease in 2023, the HTML transfer size increased this year compared to 2022 and 2023. + +Although the median looks like something reasonable, let's take a closer look at the other percentiles. + +{{ figure_markup( + image="document_size_distribution.png", + caption="Distribution of the transfer size of HTML document", + description="Bar chart showing the 10, 25, 50, 75, and 90th percentile of transfer size. The values for mobile are 6, 13, 32, 71, 147 kB respectively. The values for desktop are 6, 14, 33, 73, 148 kB respectively.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vQTldh1hYi8-zIRgmK_v6IhpKuUOPTAhBxStogg3rt1L6isaX6v8dgODs7WiJ_udh7ZvHnvrTZLlXkW/pubchart?oid=1780108383&format=interactive", + sheets_gid="619373506", + sql_file="document_size_distribution.sql" + ) +}} + +The percentile distribution reveals that at the 10th percentile, HTML files are as small as 6 KB, while at the 90th percentile, they reach up to 147 KB. These extremes highlight a significant variation in how developers structure their pages. + +### Compression + +In the context of analyzing HTML document files, compression continues to play a crucial role in improving load times and overall performance. + +{{ figure_markup( + image="content_encoding.png", + caption="HTML document content-encoding", + description="Stacked bar chart, showing 36% of desktop and 37% of mobile HTML documents are being compressed with Brotli, 53% of desktop and 52% of mobile documents are being compressed with Gzip, and 11% of desktop and mobile HTML documents are not being compressed at all.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vQTldh1hYi8-zIRgmK_v6IhpKuUOPTAhBxStogg3rt1L6isaX6v8dgODs7WiJ_udh7ZvHnvrTZLlXkW/pubchart?oid=1114599297&format=interactive", + sheets_gid="1573442294", + sql_file="content_encoding.sql" + ) +}} + +One notable trend is the increasing popularity of the Brotli (`br`) compression format. In 2024, Brotli is used on 37% of mobile pages, a steady increase from 28% in 2023. + +While `gzip` remains the most widely used compression method (52% on mobile), its usage has slightly declined from previous year as `br` gains traction (58% in 2022). + +Despite these improvements, a small percentage of HTML files (10.5% on mobile) are still served without any compression, presenting missed opportunities for optimization. + +### Document language + +{{ figure_markup( + content="5,625", + caption="Unique lang attribute codes on mobile", + classes="big-number", + sheets_gid="134927112", + sql_file="distinct_lang.sql", +) }} + +In our analysis, we've encountered 5,625 unique instances of the `lang` attribute on the `html` element on mobile. + +The HTML `lang` attribute plays an important role in helping screen readers and search engines understand the language of a webpage's content. However, interestingly, Google Search ignores the lang attribute when determining the language of a page because [they've identified that "it is almost always wrong"](https://www.youtube.com/watch?v=isW-Ke-AJJU&t=3354s). This may explain why `en` remains dominant in the dataset, with 44.2% of desktop and 40.5% of mobile pages using it as the primary language attribute, even though the actual language of the content might differ. + +{{ figure_markup( + image="popular_lang.png", + caption="Most popular HTML language codes, not including region", + description="Bar chart showing the language usage, for the top ten languages in our data set. 40% use English, 13% are not set, with Spanish, Japanese, German, French, Portuguese, Russian, Italian and Dutch having various minor percentages of usage, from 6% to 2%.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vQTldh1hYi8-zIRgmK_v6IhpKuUOPTAhBxStogg3rt1L6isaX6v8dgODs7WiJ_udh7ZvHnvrTZLlXkW/pubchart?oid=1428231971&format=interactive", + sheets_gid="546119077", + sql_file="lang.sql", + width=600, + height=520 + ) +}} + +Additionally, 13% of pages have no `lang` attribute set at all, showing that many websites fail to provide this indicator. + +If we aggregate the percentages of non-English and non-"not set" `lang` values, we still capture around 46% of the total pages, reflecting the truly global nature of web content. However, as mentioned above, it's important to remember that the high proportion of `en` values doesn't always mean the content is in English, given the frequent misconfiguration of the `lang` attribute. + +{{ figure_markup( + image="popular_regional_lang.png", + caption="Most popular HTML language codes, including region", + description="Bar chart showing the language usage, including region, for the top ten languages in our data set. 22% use English, 15% American English, with Japanese, Spanish, Brazilian Portuguese, British English, German German, Russian and German having various minor percentages of usage, from 5% to 2%.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vQTldh1hYi8-zIRgmK_v6IhpKuUOPTAhBxStogg3rt1L6isaX6v8dgODs7WiJ_udh7ZvHnvrTZLlXkW/pubchart?oid=672282298&format=interactive", + sheets_gid="546119077", + sql_file="lang.sql", + width=600, + height=520 + ) +}} + +In terms of non-English languages, `ja` (Japanese) and `es` (Spanish) stand out as some of the most popular choices, used on approximately 5-6% of pages. + +The most common regional variant, `en-us`, appears on 16.7% of desktop and 15% of mobile pages. + + +Despite the issues with incorrect lang attribute values, the attribute still plays a vital role in improving accessibility. For users with screen readers, setting the `lang` attribute correctly remains an essential practice in modern web development. + +### Comments + +HTML comments are snippets of text that developers include within their code to leave notes or explanations without affecting the visual display of the webpage. These comments are enclosed in `` tags and are not rendered by browsers, meaning users will never see them. While useful during the development process, HTML comments are not necessary in production code, as they can slightly increase the file size without any benefit to end users. + +{{ figure_markup( + content="86%", + caption="Mobile pages with at least one comment", + classes="big-number", + sheets_gid="1268900609", + sql_file="comments.sql", +) }} + +According to our analysis, 86% of mobile pages still contain at least one comment. + +In addition to regular comments, there's a specific type known as **conditional comments**. These were once used extensively to target specific versions of Internet Explorer (IE), allowing developers to provide custom styles or scripts that only older IE browsers would process. + +`` + +With modern browsers and the retirement of Internet Explorer, conditional comments have become obsolete. Despite this, **26%** of mobile pages still contain conditional comments, likely due to legacy code that was never cleaned up, or because some sites continue to support older versions of Internet Explorer for compatibility reasons. + +## Elements + +In this section, we'll explore HTML elements—what elements are commonly used, how often they appear, and which ones you're likely to find on a typical page. We'll also look into custom and outdated elements. And just to clarify: is "divitis" still around? Yes, it is. + +### Element diversity + +For both desktop and mobile pages, the data shows that the 10th percentile has 22 distinct elements, while the 90th percentile reaches 44 elements on desktop and 43 on mobile. The median number of distinct elements for mobile pages has remained consistent at 32 this year, [the same as in 2022](../2022/markup#element-diversity), and only slightly higher than the [31 observed in 2021](../2021/markup#element-diversity). + +{{ figure_markup( + image="distinct_elements_per_page.png", + caption="Distribution of the number of distinct types of elements per page", + description="Bar chart showing the 10, 25, 50, 75, and 90th percentile of distinct elements per page. The values for mobile are 22, 27, 32, 38 and 43 respectively. The values for desktop are 22, 27, 33, 38 and 44 respectively.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vQTldh1hYi8-zIRgmK_v6IhpKuUOPTAhBxStogg3rt1L6isaX6v8dgODs7WiJ_udh7ZvHnvrTZLlXkW/pubchart?oid=1344861022&format=interactive", + sheets_gid="1098213395", + sql_file="element_count_distribution.sql" + ) +}} + +However, there are some differences when checking the distribution of elements per page. The data shows a slight decrease [compared to 2022](../2022/markup#element-diversity). For mobile, the median number of elements has dropped from 653 in 2022 to 594 in 2024. At the lower end, the 10th percentile for mobile shows a small drop from 192 to 180. The 90th percentile also shows a modest decrease, with mobile pages dropping from 1,832 to 1,716. This overall reduction suggests that pages are becoming slightly leaner in terms of the number of HTML elements used. + +{{ figure_markup( + image="elements_per_page.png", + caption="Distribution of the number of elements per page", + description="Bar chart showing the 10, 25, 50, 75, and 90th percentile of total elements per page. The values for mobile are 180, 342, 594, 1,010 and 1,716 respectively.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vQTldh1hYi8-zIRgmK_v6IhpKuUOPTAhBxStogg3rt1L6isaX6v8dgODs7WiJ_udh7ZvHnvrTZLlXkW/pubchart?oid=1742977516&format=interactive", + sheets_gid="1098213395", + sql_file="element_count_distribution.sql" + ) +}} + + +### Top elements + +The following elements are used most frequently: + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2021202220232024
`div``div``div``div`
`a``a``a``a`
`span``span``span``span`
`li``li``li``li`
`img``img``script``script`
`script``script``img``img`
`p``p``p``p`
`link``link``link``link`
`meta``i``meta``path`
`i``meta``path``meta`
+
+ {{ figure_link( + caption="Most used elements.", + sheets_gid="248650818", + sql_file="element_frequency.sql", + ) }} +
+
+ +The list remains largely consistent with previous years, but some shifts have occurred. + +{{ figure_markup( + content="29%", + caption="Percentage of elements which are div elements", + classes="big-number", + sheets_gid="248650818", + sql_file="element_frequency.sql", +) }} + +`
` remains by far the most dominant element. So "divitis" is still a thing, and it doesn't look like it's going to change in the next few years. + +{{ figure_markup( + image="top_elements.png", + caption="Frequency of top HTML elements", + description="Bar chart showing the frquency of top 15 HTML elements. `div` is the most used (28.7% on mobile), followed by `a` (12.6%), `span` (11.2%), `li` (7.7%) and `script` (3.9%). The rest of the top 15 elements are `img`, `p`, `link`, `path`, `meta`, `i`, `option`, `ul`, `br`, and `td`, with values ranging from 3.3% to 1.3%.", + chart_url="https://docs.google.com/spreadsheets/d/e/2PACX-1vQTldh1hYi8-zIRgmK_v6IhpKuUOPTAhBxStogg3rt1L6isaX6v8dgODs7WiJ_udh7ZvHnvrTZLlXkW/pubchart?oid=1080941706&format=interactive", + sheets_gid="248650818", + sql_file="element_frequency.sql", + width=600, + height=656 + ) +}} + +Following `
`, the `` element remains a key player, consistently in second place. As the backbone of hyperlinking, it plays a critical role in navigation, anchoring user journeys across sites. + +One of the notable shifts in recent years has been the increased usage of `