Nell'ultimo anno, Intel ha collaborato con Google e altre parti sull'API Compute Pressure. In Chrome 115, puoi registrarti per una prova dell'origine per contribuire a testare questa nuova API. Questo post spiega i problemi che l'API è stata progettata per risolvere e mostra come utilizzarla.
Il problema
Il web sta diventando una piattaforma di applicazioni chiave, con nuove funzionalità che rendono possibili applicazioni come le videoconferenze, ma anche un'esperienza piacevole per gli utenti. Le esperienze basate sul web si caricano immediatamente, sono accessibili da qualsiasi luogo e non richiedono alcuna installazione preliminare.
Gli utenti vogliono applicazioni che si carichino rapidamente e che siano adattabili. Inoltre, vogliono ottenere il più possibile dalla durata della batteria e da dispositivi silenziosi che non si surriscaldano al tocco. Questi obiettivi a volte possono essere difficili da ottenere anche quando si creano esperienze avanzate, perché le animazioni fluide e la sfocatura dei video in background utilizzano molta potenza di elaborazione, spingono l'hardware ai limiti e consumano le batterie.
Inoltre, esistono un'enorme varietà di dispositivi utilizzati per accedere alle applicazioni web. Un laptop di cinque anni avrà funzionalità molto diverse rispetto a un computer da tavolo nuovo di zecca, anche se esegue la stessa versione del browser.
Spesso gli sviluppatori scelgono di sviluppare per il denominatore comune più basso, evitando di utilizzare alcune funzionalità che potrebbero gravare su dispositivi meno recenti o meno potenti. Tuttavia, se fosse possibile ottimizzare l'esperienza per gli utenti che dispongono di attrezzature idonee e si trovano nell'ambiente giusto per trarne vantaggio, perché non farlo? Ad esempio, quando partecipi a una videochiamata dallo smartphone, è probabile che l'esperienza migliore sia vedere solo chi parla. Su un computer, però, sarebbe bello vedere tutti i partecipanti alla chiamata e in genere l'hardware è all'altezza del compito. A questo scopo, hai bisogno della telemetria hardware in tempo reale, senza sacrificare la privacy degli utenti, che può essere utilizzata per la pianificazione delle attività e l'attivazione e la disattivazione progressiva delle funzionalità per garantire un'esperienza utente fluida. È qui che può essere utile l'API Compute Pressure.
Che cos'è l'API Compute Pressure?
L'API Compute Pressure offre stati di alto livello che rappresentano la pressione sul sistema. Questi stati di alto livello garantiscono un buon equilibrio tra privacy (non condividere troppe informazioni specifiche che potrebbero identificare un utente) e informazioni su cui gli sviluppatori possono ragionare facilmente. Inoltre, consente all'implementazione di utilizzare le metriche hardware sottostanti corrette per garantire che gli utenti possano sfruttare tutta la potenza di elaborazione a loro disposizione, a condizione che il sistema non sia sottoposto a uno stress non gestibile.
Le CPU moderne, ad esempio, sono progettate per funzionare correttamente con un utilizzo del 100% nella maggior parte delle situazioni, su un singolo core o su tutti i core, pertanto un'API che imposta come critico l'utilizzo dell'80% potrebbe portare gli sviluppatori a sottoutilizzare le funzionalità dell'hardware e a offrire un'esperienza utente non ottimale. D'altra parte, un sistema potrebbe non avere un raffreddamento adeguato o la temperatura ambiente potrebbe essere molto elevata, come in estate, e il sistema potrebbe essere sottoposto a throttling anche prima di raggiungere un elevato utilizzo della CPU. L'API attuale funziona in base alla pressione della CPU globale, ma abbiamo intenzione di eseguire esperimenti per attivare la pressione della CPU per pagina nel thread principale e nei worker.
La pressione di calcolo ha i seguenti stati:
- Nominale: i carichi di lavoro attuali causano una pressione minima, consentendo al sistema di funzionare a una frequenza di clock inferiore per risparmiare energia.
- Buono: il sistema funziona correttamente, tutto procede senza problemi e può assumere un lavoro aggiuntivo senza problemi.
- Grave: il sistema è sotto una forte pressione, ma è gestibile e funziona bene, ma potrebbe avvicinarsi ai suoi limiti:
- La frequenza di clock (a seconda dell'alimentazione CA o CC) è costantemente elevata.
- Le temperature termiche sono alte, ma comunque gestibili e non causano limitazione.
A questo punto, se aggiungi altro lavoro, il sistema potrebbe passare in stato critico.
- Critico: il sistema sta per raggiungere i suoi limiti, ma non li ha ancora raggiunti. Critico non significa che il sistema sia attivamente limitato, ma questo stato non è sostenibile a lungo termine e potrebbe comportare una limitazione se il carico di lavoro rimane invariato. Questo indicatore è l'ultima chiamata per alleggerire il carico di lavoro dell'applicazione web.
Abilita l'API Compute Pressure
Per impostazione predefinita, l'API Compute Pressure non è attivata in Chrome, ma è possibile sperimentarla in Chrome 115 attivando esplicitamente la funzionalità.
Puoi attivarlo localmente attivando il flag enable-experimental-web-platform-features
.
Per abilitarla per tutti i visitatori della tua app, è attualmente in corso una prova dell'origine che verrà impostata per terminare in Chrome 118 ( 18 luglio 2023). Per partecipare alla prova, registrati e includi un elemento meta con il token di prova dell'origine nell'intestazione HTML o HTTP. Per ulteriori informazioni, consulta il post Guida introduttiva ai trial delle origini.
Osserva la pressione di calcolo
Il seguente snippet di codice illustra come monitorare e intervenire in base alle variazioni della pressione di calcolo:
// The `records` parameter is a sequence of records between two
// consecutive callbacks. Currently it contains ten entries, but
// this is an implementation detail.
function callback(records) {
const lastRecord = records.pop();
console.log(`Current pressure ${lastRecord.state}`);
if (lastRecord.state === 'critical') {
// Reduce workers load by 4.
} else if (lastRecord.state === 'serious') {
// Reduce workers load by 2.
} else {
// Do not reduce.
}
}
const observer = new PressureObserver(callback, {
// Sample rate in Hertz.
sampleRate: 1,
});
observer.observe('cpu');
Il seguente snippet di codice illustra come utilizzare l'API Compute Pressure da un iframe:
<iframe src="https://mysite.com/" allow="compute-pressure">
<script>
// Use Compute Pressure API.
</script>
</iframe>
Supporto piattaforme
L'API Compute Pressure è disponibile in Chrome 115 su Linux, ChromeOS, macOS e Windows.
Demo
Prova la demo incorporata di seguito per vedere come cambia lo stato della pressione di calcolo in base a una certa pressione artificiale.
Se il tuo browser non supporta l'API, il video di seguito mostra una registrazione della demo.
Feedback
Il feedback degli sviluppatori è molto importante in questa fase, quindi segnala i problemi su GitHub con suggerimenti e domande.
Link utili
- Spiegazione pubblica
- Specifiche
- Bug di monitoraggio di Chromium
- Voce di ChromeStatus.com
- Revisione TAG
- Intent to Experiment
- Demo dell'API Compute Pressure | Fonte della demo dell'API Compute Pressure
Ringraziamenti
L'immagine hero è stata creata da Robert Anasch su Unsplash. Questo articolo è stato esaminato da Rachel Andrew e Thomas Steiner.