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 otros terceros en la API de Compute Pressure. En Chrome 115, puedes registrarte para obtener una prueba de origen para ayudar a probar esta nueva API. En esta publicación, se explican los problemas que la API está diseñada para resolver y se muestra cómo usarla.

El problema

La Web se está convirtiendo en una plataforma de aplicaciones clave, con nuevas capacidades que hacen que aplicaciones como las videoconferencias no solo sean posibles, sino que también sean una experiencia agradable para los usuarios. Las experiencias basadas en la Web se cargan al instante, se puede acceder a ellas desde cualquier lugar y no requieren instalación previa.

Los usuarios quieren aplicaciones responsivas y de carga rápida. También quieren aprovechar al máximo la duración de batería y aprovechar los dispositivos silenciosos que no están calientes al tacto. A veces, estas características pueden ser difíciles de lograr cuando también se crean experiencias avanzadas, ya que las animaciones fluidas y el desenfoque de video en segundo plano usan mucha 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 usan para acceder a las aplicaciones web. Una laptop de cinco años tendrá capacidades muy diferentes a las de una computadora de escritorio nueva, incluso si ejecuta la misma versión del navegador.

Los desarrolladores a menudo optan por desarrollar para el mínimo común denominador y evitan usar algunas funciones que gravarían a dispositivos más antiguos o con menos capacidad. Sin embargo, si fuera posible optimizar la experiencia de los usuarios que tienen equipos adecuados y se encuentran en el entorno correcto para beneficiarse de ella, ¿por qué no hacerlo? Por ejemplo, cuando te unes a una videollamada desde tu teléfono, es probable que la mejor experiencia sea ver solo al orador actual. Sin embargo, en una computadora de escritorio, sería bueno ver a todos en la llamada, y el hardware suele estar a la altura de la tarea. Para lograrlo, necesitas telemetría de hardware en vivo, sin sacrificar la privacidad del usuario, que se pueda usar para programar tareas y activar y desactivar funciones de forma 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 Compute Pressure?

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

Por ejemplo, las CPU modernas están diseñadas para funcionar bien con un uso del 100% en la mayoría de las situaciones, en un solo núcleo o en todos los núcleos, por lo que una API que codifique por hardware el 80% de uso como crítico podría provocar que los desarrolladores no aprovechen las capacidades del hardware y ofrezcan una experiencia del usuario poco óptima. Por otro lado, es posible que un sistema no tenga el enfriamiento adecuado, o que la temperatura ambiente sea muy alta como en verano, y que el sistema se limite incluso antes de alcanzar un alto uso de CPU. La API actual funciona en la presión global de la CPU, pero planeamos experimentar con la habilitación de la presión de la 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 preservar la energía.
  • Buena: El sistema funciona bien, todo es fluido y puede realizar trabajos adicionales sin problemas.
  • Grave: Hay una presión grave en el sistema, pero se puede controlar, y el sistema funciona bien, pero podría estar llegando a sus límites:
    • La velocidad de reloj (según la alimentación de CA o CC) es alta de forma constante.
    • Las temperaturas son altas, pero aún se pueden controlar y no causan estrangulamiento.

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

  • Crítico: El sistema está a punto de alcanzar sus límites, pero aún no lo hace. Crítico no significa que el sistema se esté regulando de forma activa, pero este estado no es sostenible a largo plazo y podría provocar una limitación si la carga de trabajo sigue siendo la misma. Este indicador es la última llamada para que la aplicación web alivie 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 con ella en Chrome 115 si se habilita la funcionalidad de forma explícita. Para activarlo de forma local, habilita la marca enable-experimental-web-platform-features.

Para habilitarlo para todos los visitantes de tu app, actualmente se está realizando una prueba de origen que finalizará en Chrome 118 (18 de julio de 2023). Para participar en la prueba, 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 entrada Cómo comenzar a usar las pruebas de origen.

Observe la presión de procesamiento

En el siguiente fragmento de código, se muestra cómo supervisar los cambios de presión de procesamiento y tomar medidas al respecto:

// 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 la presión de procesamiento en función de una presión artificial.

Si tu navegador no es compatible con la API, en el siguiente video se muestra una grabación de la demostración.

Comentarios

Los comentarios de los desarrolladores son muy importantes en esta etapa, así que 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.