Saltar al contenido

Bloquear el hilo principal: el catálogo

Las seis formas de dejar el hilo de la interfaz ocupado, ordenadas por lo difíciles que son de encontrar. Y la que engaña a todo el mundo, porque el trabajo pesado estaba donde debía.

Las seis, de fácil a difícil

La que engaña

La sexta merece su sección porque tiene a mucha gente convencida de que el problema es de Tauri.

El razonamiento es este: «he movido todo el trabajo pesado a Rust, en tareas asíncronas, fuera del hilo principal. Y la aplicación se congela igual». Y es cierto: la interfaz se congela y no es culpa del core.

La causa es que el JavaScript también tiene un hilo, y una interfaz que hace trabajo pesado en él se congela exactamente igual. Recorrer diez mil elementos para filtrarlos, pintar una lista sin virtualizar, procesar una respuesta grande: todo eso ocurre en el hilo de la webview, y ahí Rust no ayuda.

Cómo se distingue de las cinco anteriores, en diez segundos:

Mueve la ventana. Si se mueve, el core está bien y el trabajo está en el frontend: hay que sacarlo de ahí, y eso es el track de Rendimiento Web, no este.

El orden de diagnóstico

  1. Mueve la ventana. Si se mueve, es el frontend: caso 6.
  2. Mira qué se estaba ejecutando. Si era un comando, comprueba si es síncrono: caso 1.
  3. Si se congela al arrancar, es el gancho de inicialización: caso 2.
  4. Si se congela al cerrar o al cambiar de ventana, es un manejador del bucle: caso 5.
  5. Si es intermitente y coincide con actividad, es contención de cerrojo: caso 4. Pon el medidor.
  6. Busca dónde encolas trabajo en el hilo principal: caso 3.

Con los seis pasos, la causa aparece casi siempre en los dos primeros.