Rozpoczynamy drugą próbę origin Compute Pressure

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

W ciągu ostatniego roku firma Intel współpracowała z Google i innymi firmami nad interfejsem Compute Pressure API. W Chrome 115 możesz zarejestrować się do testowania origin interfejsu API, aby pomóc w testowaniu tego nowego interfejsu API. W tym poście wyjaśniamy, jakie problemy rozwiązuje ten interfejs API i jak z niego korzystać.

Problem

Internet staje się główną platformą aplikacji, a nowe możliwości sprawiają, że aplikacje takie jak konferencje wideo nie tylko są możliwe, ale też zapewniają użytkownikom przyjemne wrażenia. Aplikacje internetowe wczytują się natychmiast, są dostępne z dowolnego miejsca i nie wymagają instalacji.

Użytkownicy oczekują aplikacji, które wczytują się szybko i są responsywne. Chcą też jak najlepiej wykorzystać czas pracy na baterii i urządzenia ciche, które nie są gorące. Czasami trudno jest osiągnąć te cele, gdy tworzysz zaawansowane funkcje, ponieważ płynne animacje i rozmywanie tła w filmie wymagają dużej mocy obliczeniowej, co obciąża sprzęt i szybko wyczerpuje baterię.

Oprócz tego istnieje wiele różnych urządzeń, z których użytkownicy uzyskują dostęp do aplikacji internetowych. 5-letni laptop będzie mieć zupełnie inne możliwości niż zupełnie nowy komputer stacjonarny, nawet jeśli będzie działać z tą samą wersją przeglądarki.

Deweloperzy często wybierają opcję tworzenia aplikacji dla najniższego wspólnego mianownika, unikając korzystania z niektórych funkcji, które obciążałyby starsze lub mniej wydajne urządzenia. Jeśli jednak udałoby się zoptymalizować wrażenia użytkowników, którzy mają odpowiedni sprzęt i znajdują się w odpowiednim środowisku, aby z niego korzystać, dlaczego nie? Na przykład podczas dołączania do rozmowy wideo z telefonu najlepiej jest widzieć tylko aktualnie mówiącą osobę. Na komputerze dobrze byłoby też zobaczyć wszystkich uczestników rozmowy, bo sprzęt to zwykle do zadań zadań. Aby to osiągnąć, potrzebujesz danych telemetrycznych na temat sprzętu w czasie rzeczywistym, które można wykorzystać do planowania zadań oraz stopniowego włączania i wyłączania funkcji, aby zapewnić bezproblemowe działanie usługi. W takich sytuacjach pomocne może być użycie Compute Pressure API.

Czym jest interfejs Compute Pressure API?

Compute Pressure API udostępnia stany wysokiego poziomu, które reprezentują presję wywieraną na system. Te ogólne stany zapewniają odpowiednią równowagę między prywatnością (nieudostępnianie zbyt wielu konkretnych informacji umożliwiających identyfikację użytkownika) a informacjami, które deweloperzy mogą łatwo zrozumieć. Pozwala też implementacji korzystać z odpowiednich danych o sprzęcie, aby użytkownicy mogli korzystać z całej dostępnej mocy obliczeniowej, dopóki system nie będzie narażony na niekontrolowany stres.

Nowoczesne procesory są na przykład zaprojektowane tak, aby w większości sytuacji działać z 100% wykorzystaniem w pojedynczym rdzeniu lub we wszystkich rdzeniach, więc interfejs API, który w kodzie zapisuje 80% wykorzystania jako krytyczne, może spowodować, że deweloperzy nie wykorzystają w pełni możliwości sprzętu i nie zapewnią optymalnego działania aplikacji. Z drugiej strony system może nie mieć odpowiedniego chłodzenia lub temperatura otoczenia może być bardzo wysoka, jak w przypadku lata, i system może być ograniczany nawet przed osiągnięciem wysokiego wykorzystania procesora. Obecny interfejs API działa na podstawie globalnego obciążenia procesora, ale planujemy przetestować włączenie obciążenia procesora na stronie w przypadku głównego wątku i instancji roboczych.

Obliczanie ciśnienia ma te stany:

  • Nominalna: obecne obciążenia powodują minimalny nacisk, co pozwala systemowi działać z niższą częstotliwością zegara w celu oszczędzania energii.
  • Dobry: system działa prawidłowo, wszystko przebiega bez problemów i może wykonywać dodatkowe zadania.
  • Poważne: system jest poważnie obciążony, ale jest to do opanowania. System działa dobrze, ale może zbliżać się do swoich limitów:
    • Prędkość zegara (w zależności od zasilania AC lub DC) jest stale wysoka.
    • Temperatura jest wysoka, ale nadal można ją kontrolować i nie powoduje ona ograniczenia.

Jeśli w tym momencie dodasz więcej pracy, system może przejść w stan krytyczny.

  • Krytyczny: system zbliża się do limitu, ale go jeszcze nie osiągnął. Stan krytyczny nie oznacza, że system jest aktywnie ograniczany, ale oznacza, że nie jest to stan trwały i może doprowadzić do ograniczenia, jeśli obciążenie pozostanie takie samo. To sygnał, który jest ostatnią szansą dla aplikacji internetowej na zmniejszenie obciążenia.

Włączanie interfejsu Compute Pressure API

Domyślnie interfejs Compute Pressure API nie jest włączony w Chrome, ale można go wypróbować w Chrome 115, jeśli w wyraźny sposób włączysz tę funkcję. Możesz go aktywować lokalnie, włączając flagę enable-experimental-web-platform-features.

Aby umożliwić to wszystkim użytkownikom aplikacji, obecnie trwa testowanie wersji źródłowej, które zakończy się w Chrome 118 (18 lipca 2023 r.). Aby wziąć udział w testach, zarejestruj się i uwzględnij element meta z tokenem testowym pochodzenia w nagłówku HTML lub HTTP. Więcej informacji znajdziesz w poście Pierwsze kroki z testami origin.

Obserwowanie obciążenia obliczeniowego

Ten fragment kodu pokazuje, jak monitorować zmiany obciążenia obliczeniowego i reagować na nie:

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

Ten fragment kodu pokazuje, jak używać interfejsu Compute Pressure API z poziomu ramki wtyczki:

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

Obsługa platformy

Interfejs Compute Pressure API jest dostępny w Chrome 115 w systemach Linux, ChromeOS, macOS i Windows.

Prezentacja

Wypróbuj załączony poniżej demonstracyjny przykład, aby zobaczyć, jak stan obliczania ciśnienia zmienia się w zależności od sztucznego ciśnienia.

Jeśli Twoja przeglądarka nie obsługuje interfejsu API, poniżej znajdziesz film z prezentacją.

Prześlij opinię

Na tym etapie opinie programistów są bardzo ważne, dlatego zgłaszaj problemy na GitHubie, dodając sugestie i pytania.

Podziękowania

Obraz główny został stworzony przez Roberta Anascha na Unsplash. Ten artykuł został sprawdzony przez Rachel Andrew i Thomasa Steinera.