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 stronami nad interfejsem Compute Pressure API. W Chrome 115 możesz zarejestrować się w okresie próbnym źródła, aby wziąć udział w testowaniu nowego interfejsu API. W tym poście omawiamy problemy, jakie ten interfejs ma rozwiązywać, oraz pokazuje, jak z niego korzystać.

Problem

Internet staje się kluczową platformą aplikacyjną, a dzięki nowym funkcjom, takim jak rozmowy wideo, aplikacje takie jak wideokonferencje nie tylko są dostępne, ale też zapewniają użytkownikom doskonałe wrażenia. Rozwiązania internetowe wczytują się natychmiast, są dostępne z dowolnego miejsca i nie wymagają uprzedniej instalacji.

Użytkownicy oczekują szybko ładujących się i elastycznych aplikacji. Chce jak najdłużej korzystać z baterii oraz cichych urządzeń, które nie są gorące w dotyku. Czasami trudno jest uzyskać te rzeczy podczas tworzenia zaawansowanych funkcji, ponieważ płynne animacje i rozmycie filmu w tle pochłaniają dużą moc obliczeniową, co powoduje, że sprzęt doprowadza się do granic możliwości i zużywa baterie.

Ponadto istnieje wiele różnych urządzeń używanych do uzyskiwania dostępu do aplikacji internetowych. Pięcioletni laptop ma zupełnie inne możliwości co nowy komputer stacjonarny, nawet jeśli używa tej samej wersji przeglądarki.

Programiści często wolą tworzyć aplikacje z najniższym wspólnym mianownikiem, unikając korzystania z funkcji, które obciążałyby starsze lub mniej wydajne urządzenia. Możemy jednak zoptymalizować wrażenia użytkowników, którzy dysponują odpowiednim sprzętem i znajdują się w odpowiednim środowisku, z którego mogą korzystać. Dlaczego nie warto tego robić? Na przykład: jeśli dołączasz do rozmowy wideo na telefonie, najlepszym rozwiązaniem jest poznawanie bieżącego głośnika. Na komputerze dobrze byłoby jednak zobaczyć wszystkich uczestników rozmowy, a sprzęt zazwyczaj wykonuje wszystkie zadania. Aby to osiągnąć, potrzebujesz telemetrycznych danych dotyczących sprzętu na żywo, które nie chronią prywatności użytkowników. Można ich używać do planowania zadań oraz stopniowego włączania i wyłączania funkcji w celu zapewnienia ich płynności. Z pomocą przychodzi tu interfejs Compute Pressure API.

Czym jest Compute Pressure API?

Interfejs Compute Pressure API udostępnia stany wysokiego poziomu, które odzwierciedlają nacisk na system. Te ogólne stany zapewniają odpowiednią równowagę między prywatnością (bez udostępniania zbyt wielu szczegółowych informacji umożliwiających identyfikację użytkownika) a informacjami, na podstawie których deweloperzy mogą łatwo się zastanowić. Dodatkowo umożliwia wdrożenie używania odpowiednich podstawowych wskaźników sprzętowych, aby użytkownicy mogli korzystać ze całej dostępnej dla nich mocy obliczeniowej, o ile system nie jest podatny na stres.

Nowoczesne procesory są zaprojektowane tak, aby w większości sytuacji działać z użyciem 100% z jednym rdzeniem lub we wszystkich rdzeniach. Dlatego interfejs API, który w 80% jest wykorzystywany na stałe jako kluczowy, może spowodować, że deweloperzy nie będą w pełni wykorzystywać możliwości sprzętu i zapewnią użytkownikom gorsze wrażenia. Z drugiej strony system może nie mieć odpowiedniego chłodzenia lub temperatura otoczenia może być bardzo wysoka jak w lecie, a system może ograniczać swoje działanie jeszcze przed osiągnięciem wysokiego wykorzystania procesora. Obecny interfejs API działa w związku z globalnym obciążeniem procesora, ale planujemy przetestować jego wykorzystanie na każdej stronie w wątku głównym i instancjach roboczych.

Ciśnienie obliczeniowe ma następujące stany:

  • Nominalny: bieżące zadania powodują minimalne obciążenie, dzięki czemu system może działać z mniejszą częstotliwością zegara i oszczędzać energię.
  • Średnio: system działa prawidłowo, wszystko działa sprawnie i może bez problemów wykonywać dodatkowe czynności.
  • Poważnie: na system wywierana jest duża presja, można sobie z nim radzić, sprawnie funkcjonuje, ale zbliża się do jego granic:
    • Szybkość zegara (w zależności od zasilania prądem zmiennym lub stałym) jest stale wysoka.
    • Temperatury są wysokie, ale mimo to można sobie z nimi poradzić i nie powodują ograniczania.

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

  • Krytyczny: system wkrótce zbliży się do swoich limitów, ale jeszcze nie został osiągnięty. Krytyczny nie oznacza, że system jest aktywnie ograniczany, ale ten stan nie jest zrównoważony w dłuższej perspektywie i może spowodować ograniczenie, jeśli obciążenie pozostanie bez zmian. Ten sygnał to ostatnie wywołanie aplikacji internetowej, która zmniejszy obciążenie zbioru zadań.

Włączanie interfejsu Compute Pressure API

Domyślnie interfejs Compute Pressure API nie jest włączony w Chrome, ale można z nim eksperymentować w Chrome 115, bezpośrednio włączając tę funkcję. Możesz ją aktywować lokalnie, włączając flagę enable-experimental-web-platform-features.

Aby umożliwić korzystanie z niej wszystkim użytkownikom Twojej aplikacji, obecnie trwa okres próbny źródła, który zakończy się w Chrome 118 (18 lipca 2023 r.). Aby wziąć udział w okresie próbnym, zarejestruj się i w nagłówku HTML lub HTTP umieść metatag z pierwotnym tokenem testowania. Więcej informacji znajdziesz w poście Pierwsze kroki z testami origin.

Obserwuj obciążenie obliczeniowe

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żyć interfejsu Compute Pressure API z elementu iframe:

<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 urządzeniach z systemem Linux, ChromeOS, macOS i Windows.

Pokaz

Skorzystaj z poniższej demonstracji, aby zobaczyć, jak zmienia się stan nacisku obliczeniowego w zależności od sztucznego nacisku.

Jeśli Twoja przeglądarka nie obsługuje tego interfejsu, nagranie wersji demonstracyjnej znajdziesz w poniższym filmie.

Prześlij opinię

Opinie deweloperów są na tym etapie bardzo ważne, dlatego prosimy o zgłaszanie problemów w GitHubie z sugestiami i pytaniami.

Podziękowania

Baner powitalny został utworzony przez Roberta Anascha w aplikacji Unsplash. Ten artykuł sprawdzili Rachel Andrew i Thomas Steiner.