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 podmiotami 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 opisujemy problemy, które ten interfejs ma rozwiązywać, oraz wyjaśniamy, 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ą wcześniejszej instalacji.

Użytkownicy oczekują aplikacji, które wczytują się szybko i są responsywne. Chcą też wydłużyć czas pracy na baterii i mieć ciche urządzenia, które nie nagrzewają się podczas użytkowania. 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. Laptop, który ma 5 lat, będzie miał zupełnie inne możliwości niż nowy komputer stacjonarny, nawet jeśli będzie na nim uruchomiona ta sama wersja 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 można by zoptymalizować działanie dla użytkowników, którzy mają odpowiednie urządzenia i znajdują się w odpowiednim środowisku, dlaczego tego nie zrobić? Na przykład podczas dołączania do rozmowy wideo z telefonu najlepiej jest widzieć tylko aktualnie mówiącą osobę. Na komputerze stacjonarnym łatwiej jest jednak zobaczyć wszystkich uczestników rozmowy, a sprzęt zwykle wystarcza do tego celu. Aby to osiągnąć, potrzebujesz bieżącej telemetrii sprzętowej, która nie narusza prywatności użytkowników i może służyć do planowania zadań oraz stopniowego włączania i wyłączania funkcji w celu zapewnienia płynnego działania. W takich sytuacjach pomocne może być użycie Compute Pressure API.

Czym jest interfejs Compute Pressure API?

Interfejs Compute Pressure API udostępnia stany ogólne, które reprezentują obciążenie systemu. Te stany ogólne zapewniają odpowiednią równowagę między prywatnością (nieudostępnianiem zbyt wielu informacji, które mogłyby umożliwić identyfikację użytkownika) a informacjami, które deweloperzy mogą łatwo interpretować. 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 ograniczać wydajność 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żna sytuacja: system jest pod dużą presją, 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 prądem przemiennym lub stałym) 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 zadań, 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 długoterminowy i może prowadzić 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, ręcznie włączając 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 ma się zakończyć 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 artykule Pierwsze kroki z testami pochodzenia.

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 na 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.