Saltar al contenido principal

Este es el sitio de Mole para Mac. ¿Quieres ir al sitio de la versión para Windows?

Ir al sitio de Windows
Mole
MacWindows
Funciones Probadas Opiniones Precio FAQ Blog
EnglishEN 简体中文中 繁體中文繁 日本語日 한국어한 FrançaisFR DeutschDE ItalianoIT EspañolES PortuguêsPT NederlandsNL
Comprar Descargar

    Ayuda, documentación, versiones y artículos.

    Blog

    Cómo la lista de desinstalación de Mole aparece al hacer clic

    Sobre MolePublicado 28 de octubre de 20267 min de lectura

    Al hacer clic en una app en la página de desinstalación de Mole, la parte derecha se quedaba un momento en blanco, luego mostraba «Analizando», y solo después de medio segundo a un segundo aparecían los restos. Xcode tardaba tres o cuatro segundos en cada clic, ChatGPT seis, y al desplazarse por la lista desplegada de ChatGPT había tirones. Quería ver en qué se iba realmente ese tiempo, y de paso miré cómo resuelven el mismo problema algunos desinstaladores de código abierto. Los cambios quedaron listos el 5 de octubre y llegaron con Mole 1.16.0; esto es lo que medí entonces y las decisiones que tomé.

    Lo lento no era la app

    Esperaba que las apps grandes fueran más lentas, y no fue así: una utilidad pequeña de 6,6 MB con seis restos seguía tardando unos 0,56 segundos en el primer clic. La mayor parte del tiempo se iba en unas cuantas tareas fijas que se ejecutaban en cada clic. Son medianas de tres pasadas con una compilación Release en mi M5 Pro:

    • Leer el catálogo de casks de Homebrew, un archivo de 5,6 MB, costaba unos 200 ms cada vez, solo para saber si la app se había instalado con Homebrew.
    • La firma de código de la app se validaba, y dos veces, a razón de 1 ms por MB de ejecutable aproximadamente; MindNode gastaba 260 ms en ello por clic.
    • La tarea de análisis más lenta era la lista de documentos recientes: unos 230 ms para 775 entradas, casi todo comprobando rutas una por una.

    Algunas apps añadían su propio coste. El recibo de instalación de Xcode ocupa 41 MB y enumera 125.000 rutas, y se volvía a leer en cada clic. ChatGPT deja unas 15.000 carpetas temporales, y había que comprobar una por una que fueran suyas.

    Qué cambió

    • El catálogo de casks se lee en segundo plano en cuanto se abre la página de desinstalación, no al hacer clic.
    • El clic lee la información de firma sin validarla y fija la app por su identidad de archivo. La validación completa se ejecuta en segundo plano después de que aparece la lista, y tiene que terminar antes de borrar nada.
    • Los documentos recientes se filtran primero por nombre; solo los que coinciden pasan por la comprobación completa de propiedad.
    • Las raíces de la biblioteca se listan en paralelo, la identidad de los contenedores se guarda en caché por archivo de metadatos, y los prefijos de identificador de los programas auxiliares se calculan una vez por análisis.
    • Los recibos de instalación se guardan en caché por archivo de recibo, así que un segundo clic en Xcode no vuelve a leer esos 41 MB.
    • Las carpetas temporales cuyo nombre ya demuestra a quién pertenecen toman un camino rápido; el paso de borrado sigue comprobando cada ruta.
    • Las tareas de análisis largas empiezan primero, y los cientos de tareas pequeñas esperan detrás.
    • Un análisis iniciado al pasar el puntero se detiene cuando el puntero se va, y un análisis iniciado antes de una desinstalación ya no puede escribir resultados obsoletos después.

    Con la validación de firma, lo más fácil habría sido quitarla. En su lugar la moví a después del clic. Ahora, cuando la validación en segundo plano falla, la app se desinstala igualmente, y solo se quedan los tipos de restos que se encontraron a través de la información de firma, como los contenedores asociados por el ID de equipo del desarrollador. El resultado los muestra como «No se pudo verificar la firma de la app», conservados en lugar de fallidos. Una app sustituida por otra después del análisis se sigue rechazando.

    Cuánto más rápido

    Primer clic unos 1,5 segundos después de abrir la página de desinstalación, compilación Release:

    App Antes Después
    Shottr 556 ms 137 ms
    MindNode 1233 ms 169 ms
    Raycast 716 ms 171 ms
    Parallels Desktop 871 ms 194 ms
    VS Code 584 ms 232 ms
    WeChat 605 ms 238 ms
    Xcode 3689 ms 384 ms
    ChatGPT 6134 ms 1530 ms

    La mayoría de las apps habituales quedan ahora por debajo de 250 ms, de modo que los restos aparecen de una vez, sin mostrar antes «Analizando». La validación de firma en segundo plano termina entre 12 y 434 ms después de que aparece la lista.

    Las quince mil filas de ChatGPT

    Con los clics ya rápidos, desplazarse por un ChatGPT desplegado seguía dando tirones. Mostraba 15.175 filas, y 15.143 eran carpetas temporales del tipo T/.com.openai.codex.XXXXXX, 1,0 GB en total, unas cuantas más cada vez que se abre la app. Hina, una app que hago yo, era parecida: 323 de sus 344 filas eran archivos Hina-<Suite>-<UUID>.plist dejados por pruebas, 0,01 MB entre todos. En ambos casos, una sola forma con nombre aleatorio llenaba casi toda la lista.

    El número de filas no era la única causa. La fila desplegada reordenaba todos los restos cada vez que se redibujaba, y pasar el puntero redibujaba toda la fila de la app, así que cada fila que se deslizaba bajo un puntero quieto provocaba otra ordenación. Con los datos reales de ChatGPT, un redibujado pasó de 309 a 354 ms a 56 a 58 ms, Hina de 33 a 36 ms a 17 a 19 ms, y la altura desplegada de ChatGPT bajó de 3200 pt a 1225 pt.

    Ahora varias filas comparten una sola cuando tienen la misma categoría, carpeta, propietario y selección por defecto, y sus nombres solo difieren en una parte que generó la app: un sufijo aleatorio, un UUID, una larga secuencia hexadecimal o la marca de tiempo de un informe de fallo. La fila compartida conserva la etiqueta de categoría, muestra la ruta con * en lugar de la parte que cambia, seguida del número de elementos y el tamaño total, con una sola casilla, y no se despliega. ChatGPT bajó a 33 filas en 13 categorías, Hina a 24.

    Los mismos restos de ChatGPT antes y después: antes, cada carpeta temporal tiene su propia fila; después, comparten una fila que indica 15.143 elementos y 1,02 GB, y el resto de los restos aparece por categorías.
    Los mismos restos de ChatGPT, una fila por carpeta temporal antes, una fila compartida después.

    Las carpetas hermanas con nombre propio conservan cada una su fila, como las siete cachés de Electron de ChatGPT, GPUCache, Code Cache, Crashpad y las demás. Fusionarlas también habría dejado a Hina con unas siete filas, y eso ya no parece una limpieza a fondo; una docena larga es lo justo. Un nombre que lleva una palabra de seis letras, como T/<id>.helper, también se queda en su propia fila, porque seis letras por sí solas no se distinguen de un sufijo aleatorio.

    Dos intentos anteriores siguieron descartados. Uno anidaba un grupo plegable dentro de la fila de la app ya desplegada; se probó el 30 de septiembre y se quitó el 2 de octubre, porque metía un plegado dentro de otro y repartía rutas parecidas entre el grupo y filas sueltas. El otro mostraba una fila por categoría; se usó desde el 4 de septiembre y se revirtió una semana después, porque escondía ubicaciones distintas detrás de una sola fila.

    Cómo lo hacen otros desinstaladores

    Pearcleaner lista unas 62 raíces en paralelo y compara por nombre, sin prueba de propiedad ni caché; es rápido porque hace menos. Tencent Lemon calcula los restos de todas las apps al entrar en la página y los actualiza a diario, así que los clics son instantáneos, a cambio de un gran análisis en segundo plano en cada visita, lo que va contra la regla de Mole de no añadir trabajo residente. MangoDisk, Uninstally y Mole CLI usan raíces fijas con concurrencia limitada.

    Ninguno tenía una primitiva de bajo nivel más rápida que getattrlistbulk y readdir, que Mole ya usa. También probé Spotlight: cada consulta tardaba 0,3 a 0,4 segundos y se dejaba la mayoría de los restos, ya que encontró uno de los cuatro de VS Code, mientras que searchfs funciona en APFS pero tarda unos 15 segundos por consulta. Así que el trabajo se redujo a quitar tareas repetidas del análisis que Mole ya tenía. Para saber cómo leer esa lista de restos antes de borrar nada, sigue con Restos de apps en el Mac: revisa antes de borrar.

    ¿Tu Mac se queda sin espacio o va cada vez más lento? Mole puede limpiar la basura, eliminar apps por completo y mantener macOS a punto.

    Probar Mole

    Sigue leyendo

    • Sobre MoleMole CLI o la app Mole para Mac9 min de lectura
    • Sobre MoleDespués de reenviar más de 400 correos de licencia de Mole6 min de lectura
    • Sobre MoleMenos ajustes, decisiones más claras4 min de lectura

    Mole · 鼴

    Limpieza, apps y estado del Mac.

    v1.19.0 (348) · Versiones

    Producto

    Limpieza del Mac Desinstalador de apps Mantenimiento del Mac Análisis del disco Monitor del sistema

    Soporte

    Ayuda Documentación Versiones Blog

    Legal

    Condiciones del servicio Política de privacidad Política de reembolso

    Recursos

    Para Windows Herramienta CLI Programa de afiliados

    Contacto

    Twitter hi@mole.fit

    El único sitio oficial de Mole mole.fit · Evita instaladores de origen desconocido

    La CLI sigue siendo gratuita para la terminal.