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. Vogliono anche ottenere il massimo dalla durata della batteria e da dispositivi silenziosi che non si surriscaldano al tocco. A volte può essere difficile ottenere questi risultati quando si creano anche esperienze avanzate, poiché le animazioni fluide e la sfocatura dei video in background richiedono molta potenza di elaborazione, spingono l'hardware al limite e scaricano le batterie.
Inoltre, viene utilizzata una vasta gamma di dispositivi per accedere alle applicazioni web. Un laptop di cinque anni avrà funzionalità molto diverse rispetto a un computer 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, probabilmente è meglio 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. Per ottenere questo risultato, hai bisogno della telemetria hardware in tempo reale, senza sacrificare la privacy degli utenti, che può essere utilizzata per pianificare le attività e attivare e disattivare progressivamente le 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 in programma 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 sono elevate, ma ancora gestibili e non causano throttling.
A questo punto, se aggiungi altro lavoro, il sistema potrebbe passare a uno stato critico.
- Critico: il sistema sta per raggiungere i suoi limiti, ma non li ha ancora raggiunti. Lo stato Critico non indica che il sistema è sottoposto a throttling attivo, ma questo stato non è sostenibile nel lungo periodo e potrebbe comportare il throttling 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 attivarlo per tutti i visitatori della tua app, al momento è in corso un'prova dell'origine che dovrebbe 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 caso di 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 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 del TAG
- Intento di partecipare all'esperimento
- 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.