v146 · Capabilities · Performance
Adaptive Resource Loader
At startup, read the CPU tier and decide which resources to load eagerly, which to defer, and which to skip entirely. Low-tier devices get a leaner bundle — no ML models, no 3D libraries, no heavy WebGL shaders — while high-tier devices get everything up front.
Feature detection: checking…
Simulate tier:
Resource manifest × tier
Blue=eager · Amber=deferred · Grey=skipped. Click a tier to update.
| Resource | Category | Size | Low tier | Mid tier | High tier |
|---|
Simulated load sequence
Load order — — device
Summary
Eager bytes
—
Deferred bytes
—
Skipped bytes
—
vs high tier
—
// Read the CPU Performance API once at startup — no polling
async function detectTier() {
const rawTier =
typeof navigator.cpuPerformance === 'number'
? navigator.cpuPerformance
: typeof navigator.cpu?.performance === 'function'
? await navigator.cpu.performance()
: 0;
const normalized = normalizeCpuTier(rawTier);
return normalized === 'unknown' ? heuristicTier() : normalized;
}
const tier = await detectTier();
// Load resources according to tier
const config = RESOURCE_MANIFEST.filter(r => {
if (r.minTier === 'high' && tier !== 'high') return false;
if (r.minTier === 'mid' && tier === 'low') return false;
return true;
});
// Eager: load now
const eager = config.filter(r => r.strategy[tier] === 'eager');
// Deferred: import() when needed (lazy)
const deferred = config.filter(r => r.strategy[tier] === 'lazy');
// Skipped: never loaded on this tier
await Promise.all(eager.map(r => import(r.module)));
// Deferred modules loaded on demand:
// const mlModule = await import(deferred.find(r => r.name === 'ml-model').module);
see also
- Device Tier Readout — reading the tier
- Compute Pressure Pairing — tier + live CPU load
- Tier Policy Router — feature flags per tier
- ChromeStatus: CPU Performance API
- WICG CPU Performance API draft