Anunciamos la segunda prueba de origen de presión de procesamiento

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

Durante el último año, Intel ha estado colaborando con Google y otras empresas en la API de Compute Pressure. En Chrome 115, puedes registrarte en una prueba de origen para probar esta nueva API. En esta publicación, se explican los problemas que se pueden resolver con la API y se muestra cómo usarla.

El problema

La Web se está convirtiendo en una plataforma de aplicaciones clave, con capacidades nuevas que hacen que las aplicaciones como las videoconferencias no solo sean posibles, sino que también sean una experiencia maravillosa para los usuarios. Las experiencias basadas en la Web se cargan de forma instantánea, son accesibles desde cualquier lugar y no necesitan instalación inicial.

Los usuarios quieren aplicaciones responsivas y que se carguen rápidamente. También quieren aprovechar al máximo la duración de su batería y aprovechar los dispositivos silenciosos que no están calientes al tacto. A veces, esto puede ser difícil de lograr cuando se crean experiencias avanzadas, ya que las animaciones fluidas y el desenfoque de videos de fondo usan una gran potencia de procesamiento, lo que lleva al hardware a sus límites y agota las baterías.

Además, hay una gran variedad de dispositivos que se utilizan para acceder a aplicaciones web. Una laptop de cinco años de antigüedad tendrá capacidades muy diferentes a las de una computadora de escritorio nueva, incluso cuando ejecuta la misma versión del navegador.

A menudo, los desarrolladores optan por desarrollar para el denominador común más bajo y evitan usar algunas funciones que gravarían a los dispositivos más antiguos o de menor capacidad. Sin embargo, si fuera posible optimizar la experiencia de los usuarios que tienen equipos capaces y están en el entorno correcto para beneficiarse de él, ¿por qué no hacerlo? Por ejemplo, cuando te unas a una videollamada desde tu teléfono, ver a la bocina actual probablemente sea la mejor experiencia. Sin embargo, en las computadoras de escritorio, sería bueno ver a todos los participantes de la llamada, y el hardware en general está a la altura de la tarea. Para lograrlo, necesitas telemetría de hardware activa, sin sacrificar la privacidad de los usuarios, que se pueda usar para programar tareas y activar y desactivar funciones de manera progresiva a fin de garantizar una experiencia del usuario fluida. Aquí es donde la API de Compute Pressure puede ayudar.

¿Qué es la API de presión de procesamiento?

La API de presión de procesamiento ofrece estados de alto nivel que representan la presión sobre el sistema. Estos estados de alto nivel garantizan un buen equilibrio entre la privacidad (sin compartir demasiada información específica que podría identificar a un usuario) y la información que los desarrolladores pueden razonar con facilidad. Además, permite que la implementación use las métricas de hardware subyacentes adecuadas para garantizar que los usuarios puedan aprovechar toda la potencia de procesamiento disponible, siempre y cuando el sistema no esté bajo un estrés inmanejable.

Las CPU modernas, por ejemplo, están diseñadas para funcionar bien con una utilización del 100% en la mayoría de los casos, en un solo núcleo o en todos los núcleos, por lo que una API que codifique el uso del 80% como crítico podría hacer que los desarrolladores usen poco las capacidades del hardware y ofrezcan una experiencia del usuario deficiente. Por otro lado, es posible que un sistema no tenga un enfriamiento adecuado, o que la temperatura ambiente sea muy alta como en verano y que el sistema se esté regulando incluso antes de alcanzar un alto uso de CPU. La API actual funciona con presión de CPU global, pero planeamos experimentar y habilitar la presión de CPU por página en el subproceso principal y los trabajadores.

La presión de procesamiento tiene los siguientes estados:

  • Nominal: Las cargas de trabajo actuales causan una presión mínima, lo que permite que el sistema se ejecute a una frecuencia de reloj más baja para conservar energía.
  • Regular: El sistema funciona bien; todo funciona sin problemas y puede requerir trabajo adicional sin problemas.
  • En serio: Existe una presión grave sobre el sistema, pero es administrable y funciona bien, pero podría estar cerca de sus límites:
    • La velocidad del reloj (según la alimentación de CA o CC) es constantemente alta.
    • Las temperaturas son altas, pero igualmente manejables, y no provocan limitaciones.

En este punto, si agregas más trabajo, es posible que el sistema pase a un estado crítico.

  • Fundamental: El sistema está a punto de alcanzar sus límites, pero aún no lo ha alcanzado. Que sea crítico no significa que el sistema esté limitado de forma activa, pero este estado no es sostenible a largo plazo y puede provocar una limitación si la carga de trabajo permanece igual. Este indicador es la última llamada para que la aplicación web alimente su carga de trabajo.

Habilita la API de Compute Pressure

De forma predeterminada, la API de Compute Pressure no está habilitada en Chrome, pero se puede experimentar en Chrome 115 si se habilita explícitamente la funcionalidad. Para activarlo de forma local, habilita la marca enable-experimental-web-platform-features.

Para habilitarla para todos los visitantes de tu app, actualmente hay una prueba de origen en curso que está configurada para finalizar en Chrome 118 (18 de julio de 2023). Para participar, regístrate y, luego, incluye un metaelemento con el token de prueba de origen en el encabezado HTML o HTTP. Para obtener más información, consulta la publicación Comienza a usar las pruebas de origen.

Observa la presión de procesamiento

En el siguiente fragmento de código, se muestra cómo supervisar los cambios en la presión de procesamiento y cómo actuar ante ellos:

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

En el siguiente fragmento de código, se muestra cómo usar la API de Compute Pressure desde un iframe:

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

Plataformas compatibles

La API de Compute Pressure está disponible en Chrome 115 en Linux, ChromeOS, macOS y Windows.

Demostración

Prueba la demostración incorporada a continuación para ver cómo cambia el estado de presión de procesamiento según la presión artificial.

En caso de que tu navegador no sea compatible con la API, el video a continuación muestra una grabación de la demostración.

Comentarios

Los comentarios de los desarrolladores son muy importantes en esta etapa. Por lo tanto, informa los problemas en GitHub con sugerencias y preguntas.

Agradecimientos

Robert Anasch creó la imagen hero en Unsplash. Rachel Andrew y Thomas Steiner revisaron este artículo.