Aankondiging van de tweede Compute Pressure Origin-proef

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

Het afgelopen jaar werkte Intel samen met Google en andere partijen aan de Compute Pressure API. In Chrome 115 kun je je registreren voor een origin-proefversie om deze nieuwe API te helpen testen. In dit bericht worden de problemen uitgelegd waarvoor de API is ontworpen en hoe je deze kunt gebruiken.

Het probleem

Het web wordt een belangrijk applicatieplatform, met nieuwe mogelijkheden die applicaties zoals videoconferenties niet alleen mogelijk maken, maar ook een heerlijke ervaring voor gebruikers. Webgebaseerde ervaringen worden onmiddellijk geladen, zijn overal toegankelijk en vereisen geen installatie vooraf.

Gebruikers willen snel ladende en responsieve applicaties. Ze willen ook zoveel mogelijk halen uit de batterijduur en stille apparaten die niet heet zijn om aan te raken. Deze dingen kunnen soms moeilijk te bereiken zijn bij het creëren van geavanceerde ervaringen, omdat vloeiende animaties en vervaging van achtergrondvideo's veel verwerkingskracht gebruiken, waardoor de hardware tot het uiterste wordt gedreven en de batterijen leeglopen.

Bovendien wordt er een grote verscheidenheid aan apparaten gebruikt om toegang te krijgen tot webapplicaties. Een laptop van vijf jaar oud zal heel andere mogelijkheden hebben dan een gloednieuwe desktopcomputer, zelfs als hij dezelfde browserversie gebruikt.

Ontwikkelaars kiezen er vaak voor om te ontwikkelen voor de kleinste gemene deler, waarbij ze bepaalde functies vermijden die oudere of minder capabele apparaten belasten. Als het echter mogelijk zou zijn om de ervaring te optimaliseren voor gebruikers die over capabele apparatuur beschikken en zich in de juiste omgeving bevinden om hiervan te profiteren, waarom zouden we dat dan niet doen? Wanneer u bijvoorbeeld vanaf uw telefoon deelneemt aan een videogesprek, is alleen het zien van de huidige spreker waarschijnlijk de beste ervaring. Op een desktop zou het echter leuk zijn om iedereen aan het telefoongesprek te zien, en de hardware is meestal opgewassen tegen de taak. Om dit te bereiken heb je live hardwaretelemetrie nodig, zonder de privacy van de gebruikers op te offeren, die kan worden gebruikt voor het plannen van taken en het geleidelijk in- en uitschakelen van functies om een ​​soepele gebruikerservaring te garanderen. Dit is waar de Compute Pressure API kan helpen.

Wat is de Compute Pressure-API?

De Compute Pressure API biedt statussen op hoog niveau die de druk op het systeem vertegenwoordigen. Deze statussen op hoog niveau zorgen voor een goede balans tussen privacy (niet te veel specifieke informatie delen die een gebruiker zou kunnen identificeren) en informatie waar ontwikkelaars gemakkelijk over kunnen redeneren. Bovendien maakt het de implementatie mogelijk om de juiste onderliggende hardwaregegevens te gebruiken om ervoor te zorgen dat gebruikers kunnen profiteren van alle beschikbare verwerkingskracht, zolang het systeem niet onder onbeheersbare stress staat.

Moderne CPU's zijn bijvoorbeeld ontworpen om in de meeste situaties goed te werken bij 100% benutting, op een enkele kern of over alle kernen heen. Een API die een benutting van 80% hardcodeert als cruciaal kan ertoe leiden dat ontwikkelaars de mogelijkheden van de hardware onderbenutten en het bieden van een suboptimale gebruikerservaring. Aan de andere kant kan het zijn dat een systeem niet over de juiste koeling beschikt, of dat de omgevingstemperatuur erg hoog is, zoals in de zomer, en dat het systeem al aan het smoren is voordat een hoog CPU-gebruik wordt bereikt. De huidige API werkt op basis van de globale CPU-druk, maar we zijn van plan te experimenteren met het inschakelen van CPU-druk per pagina voor de hoofdthread en -workers.

De rekendruk heeft de volgende statussen:

  • Nominaal: de huidige werkbelasting veroorzaakt minimale druk, waardoor het systeem op een lagere klokfrequentie kan werken om stroom te besparen.
  • Redelijk: het systeem doet het prima; alles verloopt soepel en het kan zonder problemen extra werk vergen.
  • Serieus: Er staat een serieuze druk op het systeem, maar deze is beheersbaar, en het systeem doet het goed, maar nadert mogelijk zijn grenzen:
    • De kloksnelheid (afhankelijk van AC- of DC-stroom) is constant hoog.
    • De thermische temperaturen zijn hoog, maar nog steeds beheersbaar en veroorzaken geen throttling.

Als u op dit punt meer werk toevoegt, kan het systeem in een kritieke toestand terechtkomen.

  • Cruciaal: het systeem staat nu op het punt zijn limieten te bereiken, maar het heeft de limiet nog niet bereikt. Kritiek betekent niet dat het systeem actief wordt beperkt, maar deze toestand is op de lange termijn niet houdbaar en kan leiden tot beperking als de werklast hetzelfde blijft. Dit signaal is de laatste oproep aan de webapplicatie om de werklast te verlichten.

Schakel de Compute Pressure API in

Standaard is de Compute Pressure API niet ingeschakeld in Chrome, maar er kan in Chrome 115 mee worden geëxperimenteerd door de functionaliteit expliciet in te schakelen. U kunt het lokaal activeren door de vlag enable-experimental-web-platform-features in te schakelen.

Om dit voor alle bezoekers van uw app mogelijk te maken, loopt er momenteel een origin-proefperiode die eindigt in Chrome 118 (18 juli 2023). Om deel te nemen aan de proefperiode dient u zich aan te melden en een meta-element met het oorspronkelijke proeftoken in de HTML- of HTTP-header op te nemen. Raadpleeg voor meer informatie het bericht Aan de slag met origin-proefversies .

Observeer de rekendruk

Het volgende codefragment illustreert hoe u veranderingen in de rekendruk kunt monitoren en erop kunt reageren:

// 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');

Het volgende codefragment illustreert hoe u de Compute Pressure API vanuit een iframe kunt gebruiken:

<iframe src="https://mysite.com/" allow="compute-pressure">
  <script>
    // Use Compute Pressure API.
  </script>
</iframe>

Platformondersteuning

De Compute Pressure API is beschikbaar in Chrome 115 op Linux, ChromeOS, macOS en Windows.

Demo

Probeer de onderstaande demo om te zien hoe de computerdrukstatus verandert op basis van kunstmatige druk.

Indien uw browser de API niet ondersteunt, toont de onderstaande video een opname van de demo.

Feedback

Feedback van ontwikkelaars is in deze fase erg belangrijk, dus plaats problemen op GitHub met suggesties en vragen.

Dankbetuigingen

De heldenafbeelding is gemaakt door Robert Anasch op Unsplash . Dit artikel is beoordeeld door Rachel Andrew en Thomas Steiner .