Being an Indian, a section of Web Almanac’s Performance chapter drew my attention :
Of the 23 countries, India is at the bottom of Aggregate FCP & TTFB by geography.
I wanted to find out why:
India : Mobile vs Desktop Distribution
SELECT form_factor.name AS device,
ROUND(SUM(fcp.density), 4) / 315615 AS density
FROM `chrome-ux-report.country_in.201907`,
UNNEST(first_contentful_paint.histogram.bin) AS fcp
GROUP BY
device
ORDER BY
device
Desktop : 17.2%
Mobile : 82.6%
[Note : 315615 is the total distinct origins in the table]
World : Mobile vs Desktop Distribution
SELECT form_factor.name AS device,
ROUND(SUM(fcp.density), 4) / 5612504 AS density
FROM `chrome-ux-report.all.201907`,
UNNEST(first_contentful_paint.histogram.bin) AS fcp
GROUP BY
device
ORDER BY
device
Desktop : 32.0%
Mobile : 67.5%
[Note : 5612504 is the total distinct origins in the table]
India : Effective Connection Type
SELECT
effective_connection_type.name AS connection,
ROUND(SUM(fcp.density), 4) / 315615 AS density
FROM
`chrome-ux-report.country_in.201907`,
UNNEST(first_contentful_paint.histogram.bin) AS fcp
GROUP BY
connection
ORDER BY
connection
2G : 0.3%
3G : 29.9%
4G : 69.8%
World : Effective Connection Type
SELECT
effective_connection_type.name AS connection,
ROUND(SUM(fcp.density), 4) / 5612504 AS density
FROM
`chrome-ux-report.all.201907`,
UNNEST(first_contentful_paint.histogram.bin) AS fcp
GROUP BY
connection
ORDER BY
connection
2G : 0%
3G : 5.7%
4G : 94.2%
India : Most Popular Smartphone
According to this report (based on mobile web traffic to this analytics provider), Xiaomi Redmi Note 4 (released in Jan 2017) Android 6.0 device with 3/4GB RAM and Snapdragon 625 is most popular device in Q2 2019.
USA : Most Popular Smartphone
During the same time, iPhone 7 is the most popular device in the USA.
Note : Would like to have better device stats here - recommendation for sources welcome.
India vs World : Median Website Stats (size, requests for HTML, JS, CSS, Images)
WITH
countries AS (
SELECT *, 'in' AS country_code, 'India' AS country FROM `chrome-ux-report.country_in.201907` UNION ALL
SELECT *, 'gl' AS country_code, 'World' AS country FROM `chrome-ux-report.all.201907`
)
SELECT
_TABLE_SUFFIX AS client,
country,
COUNT(0) AS urls,
ROUND(APPROX_QUANTILES(bytesFont, 1001)[OFFSET(501)] / 1024, 2) AS median_font_bytes,
ROUND(APPROX_QUANTILES(num_scripts_sync, 1001)[OFFSET(501)], 2) AS median_num_scripts_sync,
ROUND(APPROX_QUANTILES(num_scripts_async, 1001)[OFFSET(501)], 2) AS median_num_scripts_async,
ROUND(APPROX_QUANTILES(num_scripts, 1001)[OFFSET(501)], 2) AS median_num_scripts,
ROUND(APPROX_QUANTILES(avg_dom_depth, 1001)[OFFSET(501)], 2) AS median_avg_dom_depth,
ROUND(APPROX_QUANTILES(numDomElements, 1001)[OFFSET(501)], 2) AS median_numDomElements,
ROUND(APPROX_QUANTILES(numRedirects, 1001)[OFFSET(501)], 2) AS median_numRedirects,
ROUND(APPROX_QUANTILES(numDomains, 1001)[OFFSET(501)], 2) AS median_numDomains,
ROUND(APPROX_QUANTILES(bytesHtml, 1001)[OFFSET(501)] / 1024, 2) AS median_bytesHtml,
ROUND(APPROX_QUANTILES(bytesJS, 1001)[OFFSET(501)] / 1024, 2) AS median_bytesJS,
ROUND(APPROX_QUANTILES(bytesCSS, 1001)[OFFSET(501)] / 1024, 2) AS median_bytesCSS,
ROUND(APPROX_QUANTILES(bytesImg, 1001)[OFFSET(501)] / 1024, 2) AS median_bytesImg,
ROUND(APPROX_QUANTILES(bytesTotal, 1001)[OFFSET(501)] / 1024, 2) AS median_bytesTotal,
ROUND(APPROX_QUANTILES(reqHtml, 1001)[OFFSET(501)] , 2) AS median_reqHtml,
ROUND(APPROX_QUANTILES(reqJS, 1001)[OFFSET(501)] , 2) AS median_reqJS,
ROUND(APPROX_QUANTILES(reqCSS, 1001)[OFFSET(501)], 2) AS median_reqCSS,
ROUND(APPROX_QUANTILES(reqImg, 1001)[OFFSET(501)], 2) AS median_reqImg,
ROUND(APPROX_QUANTILES(reqTotal, 1001)[OFFSET(501)], 2) AS median_reqTotal
FROM
countries
JOIN
`httparchive.summary_pages.2019_07_01_*`
ON
CONCAT(origin, '/') = url
GROUP BY
client,
country
**India : % Websites Using JS Frameworks (React, Angular & so on) **
WITH
countries AS (
SELECT *, 'in' AS country_code, 'India' AS country FROM `chrome-ux-report.country_in.201907`
)
SELECT
country,
COUNT(DISTINCT url)
FROM
countries
JOIN
`httparchive.technologies.2019_07_01_mobile`
ON
CONCAT(origin, '/') = url
WHERE (app = 'React' or app = 'Angular' or app = 'AngularJS' or app = 'Backbone.js' or app = 'Ember.js' or app = 'Vue.js')
GROUP BY
country
13.75%
[Total 246360 websites in above table]
**World : % Websites Using JS Frameworks (React, Angular & so on) **
WITH
countries AS (
SELECT *, 'gl' AS country_code, 'World' AS country FROM `chrome-ux-report.all.201907`
)
SELECT
country,
COUNT(DISTINCT url)
FROM
countries
JOIN
`httparchive.technologies.2019_07_01_mobile`
ON
CONCAT(origin, '/') = url
WHERE (app = 'React' or app = 'Angular' or app = 'AngularJS' or app = 'Backbone.js' or app = 'Ember.js' or app = 'Vue.js')
GROUP BY
country
11.31%
[Total 3983196 websites in above table]
Conclusion
- Indian audience accesses web through substantially lower capacity mobile devices and inferior network conditions.
- Websites targeting this audience are as heavy (in terms of # of bytes or # of requests) or heavier (in adoption of JS frameworks) than their global counterparts.
Above mismatch results in a poorer speed experience for the Indian audience reflected in the Web Almanac section linked at the beginning of the post.
Questions
- Is there a better way to find most commonly used mobile devices (globally or for a geo)?
- Not very familiar with querying CRUX / http archive - so if you spot an error, please let know.