Im Laufe des letzten Jahres hat Intel mit Google und anderen Parteien an der Compute Pressure API zusammengearbeitet. In Chrome 115 können Sie sich für einen Ursprungstest registrieren, um diese neue API zu testen. In diesem Beitrag werden die Probleme erläutert, die die API lösen soll, und wie sie verwendet wird.
Das Problem
Das Web wird zu einer wichtigen Anwendungsplattform. Neue Funktionen machen Anwendungen wie Videokonferenzen nicht nur möglich, sondern auch für Nutzer angenehm. Webbasierte Umgebungen werden sofort geladen, sind von überall aus zugänglich und müssen nicht vorab installiert werden.
Nutzer wünschen sich schnell ladende und responsive Anwendungen. Außerdem möchte er eine möglichst lange Akkulaufzeit und leise Geräte, die nicht heiß werden. Das kann manchmal schwierig sein, wenn Sie auch erweiterte Funktionen erstellen, da flüssige Animationen und das Weichzeichnen von Hintergrundvideos viel Rechenleistung erfordern, die Hardware an ihre Grenzen bringen und den Akku belasten.
Außerdem gibt es eine Vielzahl von Geräten, die für den Zugriff auf Webanwendungen verwendet werden. Ein fünf Jahre alter Laptop hat sehr unterschiedliche Funktionen als ein brandneuer Desktop-Computer, auch wenn dieselbe Browserversion verwendet wird.
Entwickler entwickeln ihre Apps oft für den kleinsten gemeinsamen Nenner und vermeiden einige Funktionen, die ältere oder weniger leistungsfähige Geräte belasten würden. Wenn es jedoch möglich wäre, die Nutzung für Nutzer zu optimieren, die über geeignete Geräte verfügen und sich in der richtigen Umgebung befinden, um davon zu profitieren, warum sollten Sie das nicht tun? Wenn Sie beispielsweise über Ihr Smartphone an einem Videoanruf teilnehmen, ist es wahrscheinlich am besten, nur den aktuellen Lautsprecher zu sehen. Auf einem Computer wäre es jedoch schön, alle Teilnehmer des Anrufs sehen zu können. Die Hardware ist in der Regel dafür geeignet. Dazu ist Live-Hardware-Telemetrie erforderlich, ohne dass die Privatsphäre der Nutzer beeinträchtigt wird. Diese kann zum Planen von Aufgaben und zum schrittweisen Ein- und Ausschalten von Funktionen verwendet werden, um eine reibungslose Nutzererfahrung zu ermöglichen. Hier kann die Compute Pressure API helfen.
Was ist die Compute Pressure API?
Die Compute Pressure API bietet übergeordnete Status, die den Druck auf das System darstellen. Diese allgemeinen Status sorgen für ein gutes Gleichgewicht zwischen Datenschutz (nicht zu viele spezifische Informationen freigeben, anhand derer ein Nutzer identifiziert werden könnte) und Informationen, die Entwickler leicht nachvollziehen können. Darüber hinaus ermöglicht es der Implementierung, die richtigen zugrunde liegenden Hardwaremesswerte zu verwenden, um sicherzustellen, dass die Nutzer die gesamte verfügbare Prozessorleistung nutzen können, solange das System nicht unter unkontrollierbarer Belastung steht.
Moderne CPUs sind beispielsweise so konzipiert, dass sie in den meisten Situationen bei 100% Auslastung einwandfrei funktionieren, und zwar auf einem einzelnen Kern oder auf allen Kernen. Eine API, die eine Auslastung von 80 % als kritisch codiert, kann dazu führen, dass Entwickler die Hardware nicht optimal ausnutzen und die Nutzerfreundlichkeit beeinträchtigt wird. Andererseits kann es sein, dass ein System nicht richtig gekühlt wird oder die Umgebungstemperatur sehr hoch ist, z. B. im Sommer. In diesem Fall wird das System möglicherweise schon gedrosselt, bevor eine hohe CPU-Auslastung erreicht wird. Die aktuelle API arbeitet mit dem globalen CPU-Druck, aber wir planen, den CPU-Druck pro Seite für den Haupt- und die Worker-Threads zu aktivieren.
Die Auslastung kann folgende Status haben:
- Nominal:Die aktuellen Arbeitslasten verursachen nur einen minimalen Druck, sodass das System mit einer niedrigeren Taktfrequenz betrieben werden kann, um Energie zu sparen.
- Befriedigend:Das System funktioniert gut, alles läuft reibungslos und es kann problemlos zusätzliche Aufgaben übernehmen.
- Ernst: Das System ist stark ausgelastet, aber die Situation ist noch beherrschbar. Das System funktioniert gut, könnte aber an seine Grenzen stoßen:
- Die Taktgeschwindigkeit (je nach Wechsel- oder Gleichstromversorgung) ist gleichbleibend hoch.
- Die Hitze ist hoch, aber immer noch überschaubar und verursacht keine Drosselung.
Wenn Sie in diesem Moment mehr Arbeit hinzufügen, wechselt das System möglicherweise in einen kritischen Zustand.
- Kritisch:Das System erreicht jetzt seine Limits, hat sie aber noch nicht überschritten. „Kritisch“ bedeutet nicht, dass das System aktiv gedrosselt wird. Dieser Zustand ist jedoch auf Dauer 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 die Arbeitslast zu verringern.
Compute Pressure API aktivieren
Die Compute Pressure API ist in Chrome standardmäßig nicht aktiviert. In Chrome 115 können Sie sie jedoch testen, indem Sie die Funktion explizit aktivieren.
Sie können sie lokal aktivieren, indem Sie das Flag enable-experimental-web-platform-features
aktivieren.
Damit die Funktion für alle Besucher Ihrer App aktiviert werden kann, läuft derzeit ein Test für Ursprünge, der in Chrome 118 (18. Juli 2023) endet. Wenn du am Test teilnehmen möchtest, registriere dich und füge entweder im HTML- oder im HTTP-Header ein Meta-Element mit dem Test-Token für den Ursprung ein. Weitere Informationen finden Sie im Hilfeartikel Einstieg in Ursprungstests.
Rechenlast beobachten
Das folgende Code-Snippet zeigt, wie sich der Arbeitsspeicherdruck überwachen und bei Änderungen darauf reagieren lässt:
// 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 über einen IFrame verwendet wird:
<iframe src="https://mysite.com/" allow="compute-pressure">
<script>
// Use Compute Pressure API.
</script>
</iframe>
Plattformunterstützung
Die Compute Pressure API ist in Chrome 115 für Linux, ChromeOS, macOS und Windows verfügbar.
Demo
In der unten eingebetteten Demo sehen Sie, wie sich der Zustand des Rechendrucks aufgrund eines künstlichen Drucks ändert.
Falls Ihr Browser die API nicht unterstützt, sehen Sie sich das Video unten an.
Feedback
Das Feedback von Entwicklern ist in dieser Phase sehr wichtig. Bitte melden Sie Probleme auf GitHub und machen Sie Vorschläge oder stellen Sie Fragen.
Nützliche Links
- Öffentliche Erläuterung
- Spezifikationen
- Chromium-Tracking-Fehler
- Eintrag in ChromeStatus.com
- TAG-Überprüfung
- Absicht zu Experimenten
- Compute Pressure API-Demo | Compute Pressure API-Demoquelle
Danksagungen
Das Hero-Image wurde von Robert Anasch bei Unsplash erstellt. Dieser Artikel wurde von Rachel Andrew und Thomas Steiner geprüft.