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
- Mueve la ventana. Si se mueve, es el frontend: caso 6.
- Mira qué se estaba ejecutando. Si era un comando, comprueba si es síncrono: caso 1.
- Si se congela al arrancar, es el gancho de inicialización: caso 2.
- Si se congela al cerrar o al cambiar de ventana, es un manejador del bucle: caso 5.
- Si es intermitente y coincide con actividad, es contención de cerrojo: caso 4. Pon el medidor.
- Busca dónde encolas trabajo en el hilo principal: caso 3.
Con los seis pasos, la causa aparece casi siempre en los dos primeros.