Ankündigung des zweiten Ursprungstests von Compute Pressure

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

Intel hat im letzten Jahr mit Google und anderen Parteien an der Compute Pressure API zusammengearbeitet. In Chrome 115 können Sie sich für einen Ursprungstest registrieren, um die neue API zu testen. In diesem Beitrag werden die Probleme erläutert, für die die API entwickelt wurde, und die Verwendung der API erläutert.

Das Problem

Das Web wird zu einer wichtigen Anwendungsplattform. Dank neuer Funktionen werden Anwendungen wie Videokonferenzen nicht nur möglich, sondern zu einem angenehmen Erlebnis für die Nutzer. Webbasierte Lösungen werden sofort geladen, sind von überall aus zugänglich und erfordern keine Vorabinstallation.

Die Nutzer wünschen sich schnell ladende und reaktionsschnelle Anwendungen. Sie möchten außerdem die Akkulaufzeit so gut wie möglich optimieren und stumme Geräte schalten, die sich nicht heiß anfassen lassen. Diese Dinge sind manchmal schwer zu erreichen, wenn Sie auch erweiterte Funktionen erstellen, da flüssige Animationen und das Unkenntlichmachen von Videos im Hintergrund viel Rechenleistung erfordern, die Hardware an seine Grenzen bringen und Akkus entladen.

Darüber hinaus gibt es eine große Vielfalt von Geräten, die für den Zugriff auf Webanwendungen verwendet werden. Ein fünf Jahre alter Laptop besitzt ganz andere Fähigkeiten als ein brandneuer Desktop-Computer, selbst wenn dieselbe Browser-Version verwendet wird.

Entwickler entscheiden sich oft dafür, für den kleinsten gemeinsamen Nenner zu entwickeln und einige Funktionen zu vermeiden, die ältere oder weniger leistungsfähige Geräte besteuern würden. Wenn es jedoch möglich war, die User Experience für Nutzende zu optimieren, die über eine entsprechende Ausrüstung verfügen und sich in der richtigen Umgebung befinden, um davon zu profitieren, warum nicht? Wenn Sie beispielsweise von Ihrem Smartphone aus an einem Videoanruf teilnehmen, ist es wahrscheinlich am besten, nur den aktuellen Lautsprecher zu sehen. Auf einem Desktop wäre es jedoch schön, alle Anrufteilnehmer zu sehen. Meist ist die Hardware dafür zuständig. Dazu benötigen Sie Live-Hardwaretelemetrie, ohne die Privatsphäre der Nutzer zu gefährden. Sie können für die Planung von Aufgaben und das schrittweise Aktivieren und Deaktivieren von Funktionen verwendet werden, um für eine reibungslose Nutzererfahrung zu sorgen. Hier kann die Compute Pressure API helfen.

Was ist die Compute Pressure API?

Die Compute Pressure API bietet allgemeine Status, die die Belastung des Systems darstellen. Diese übergeordneten Status sorgen für ein ausgewogenes Verhältnis zwischen dem Datenschutz (nicht zu viele spezifische Informationen, anhand derer ein Nutzer identifiziert werden könnte) und Informationen, über die Entwickler leicht denken können. Darüber hinaus ermöglicht es die Implementierung, die richtigen zugrunde liegenden Hardwaremesswerte zu verwenden, um sicherzustellen, dass Nutzer die gesamte ihnen zur Verfügung stehende Rechenleistung nutzen können, solange das System nicht unter einer unüberschaubaren Belastung steht.

Moderne CPUs sind beispielsweise so konzipiert, dass sie in den meisten Situationen bei einer Auslastung von 100% auf einem einzelnen Kern oder über alle Kerne problemlos laufen. Eine API, die eine Auslastung von 80 % als kritisch hartcodiert, kann daher dazu führen, dass Entwickler die Hardwarefunktionen nicht ausreichend nutzen und eine suboptimale Nutzererfahrung bieten. Andererseits kann es sein, dass ein System nicht richtig gekühlt ist oder die Umgebungstemperatur wie im Sommer sehr hoch ist und das System drosselt, bevor es eine hohe CPU-Auslastung erreicht. Die aktuelle API arbeitet mit einer globalen CPU-Auslastung, wir planen jedoch, die CPU-Auslastung pro Seite im Hauptthread und für Worker zu aktivieren.

Der Rechendruck hat folgende Status:

  • Nennwert:Aktuelle Arbeitslasten verursachen minimalen Druck. Dadurch kann das System mit einer niedrigeren Taktfrequenz ausgeführt werden, um den Strom zu erhalten.
  • Ausreichend:Das System funktioniert einwandfrei, alles läuft reibungslos und zusätzliche Aufgaben können ohne Probleme ausgeführt werden.
  • Ernsthaft: Es besteht ein erheblicher Druck auf das System. Das System ist jedoch überschaubar und läuft gut, könnte aber an seine Grenzen kommen:
    • Die Taktgeschwindigkeit ist (abhängig von Wechsel- oder Gleichstrom) konstant hoch.
    • Die Temperatur ist hoch, aber dennoch machbar und verursacht keine Drosselung.

Wenn Sie an diesem Punkt mehr Arbeit hinzufügen, kann das System in einen kritischen Zustand versetzt werden.

  • Kritisch: Das System nähert sich jetzt an seine Grenzen, hat es jedoch noch nicht erreicht. Kritisch bedeutet nicht, dass das System aktiv gedrosselt wird. Dieser Zustand ist jedoch auf lange Sicht nicht tragfähig und kann zu einer Drosselung führen, wenn die Arbeitslast gleich bleibt. Dieses Signal ist der letzte Aufruf an die Webanwendung, um ihre Arbeitslast zu reduzieren.

Compute Pressure API aktivieren

Die Compute Pressure API ist in Chrome standardmäßig nicht aktiviert, kann aber in Chrome 115 getestet werden, indem die Funktion explizit aktiviert wird. Sie können es lokal aktivieren, indem Sie das Flag enable-experimental-web-platform-features aktivieren.

Damit sie für alle Besucher Ihrer App aktiviert werden kann, läuft derzeit ein Ursprungstest und endet in Chrome 118 (18. Juli 2023). Registrieren Sie sich und fügen Sie ein Meta-Element mit dem Ursprungstesttoken im HTML- oder HTTP-Header hinzu, um am Test teilzunehmen. Weitere Informationen finden Sie im Beitrag Erste Schritte mit Ursprungstests.

Rechenauslastung beobachten

Das folgende Code-Snippet zeigt, wie Sie Änderungen des Rechendrucks überwachen und darauf reagieren können:

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

Das folgende Code-Snippet zeigt, wie die Compute Pressure API in einem iFrame verwendet wird:

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

Plattform-Support

Die Compute Pressure API ist in Chrome 115 unter Linux, ChromeOS, macOS und Windows verfügbar.

Demo

In der folgenden eingebetteten Demo sehen Sie, wie sich der Auslastungsstatus der Rechenleistung aufgrund künstlicher Belastung ändert.

Falls dein Browser die API nicht unterstützt, findest du im folgenden Video eine Aufzeichnung der Demo.

Feedback

Das Feedback von Entwicklern ist in dieser Phase wirklich wichtig. Bitte melde Probleme auf GitHub und stelle Vorschläge und Fragen ein.

Danksagungen

Das Hero-Image wurde von Robert Anasch auf Unsplash erstellt. Dieser Artikel wurde von Rachel Andrew und Thomas Steiner verfasst.