Durante el último año, Intel colaboró con Google y otras partes 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 tener dispositivos silenciosos que no se calienten al tacto. A veces, esto puede ser difícil 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 suelen optar por desarrollar para el mínimo denominador común y evitar usar algunas funciones que sobrecargarían los dispositivos más antiguos o menos capaces. 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 de los usuarios, que se puede usar para programar tareas y activar y desactivar funciones de forma progresiva para 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 sobre 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, siempre y cuando el sistema no esté bajo una tensión 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, por lo que una API que codifique por hardware el 80% de uso como crítico podría provocar que los desarrolladores subutilicen las capacidades del hardware y ofrezcan una experiencia del usuario poco óptima. 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 esté limitando el rendimiento incluso antes de alcanzar un alto uso de la 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 la regulació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 elemento meta con el token de prueba de origen en el encabezado HTTP o HTML. Para obtener más información, consulta la publicación Cómo comenzar a usar las pruebas de origen.
Observa la presión de procesamiento
En el siguiente fragmento de código, se muestra cómo supervisar y actuar en función de los cambios de la presión de procesamiento:
// 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.
En caso de que tu navegador no sea 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.
Vínculos útiles
- Explicación pública
- Especificaciones
- Error de seguimiento de Chromium
- Entrada de ChromeStatus.com
- Revisión de TAG
- Intención de experimentar
- Demostración de la API de Compute Pressure | Fuente de la demostración de la API de Compute Pressure
Agradecimientos
Robert Anasch creó la imagen hero en Unsplash. Rachel Andrew y Thomas Steiner revisaron este artículo.