1 puntos por GN⁺ 5 시간 전 | 1 comentarios | Compartir por WhatsApp
  • Una configuración de shell rápida no se logra solo con una configuración mínima, y las herramientas modernas de Zsh mejoran la velocidad de arranque percibida de otras formas
  • time zsh -i -c exit mide tanto la inicialización como la salida, pero lo que el usuario realmente espera es el primer prompt, la ejecución del primer comando y la latencia de entrada
  • zsh-bench mide aspectos reales de la experiencia, como el tiempo hasta el primer prompt, el tiempo hasta ejecutar el primer comando, la latencia de comandos y la latencia de entrada
  • Un gestor de plugins no siempre es lento; antidote compila la lista de plugins en un único script estático y no resuelve dependencias al arrancar
  • Una configuración mínima no es el único camino hacia la velocidad, sino una elección por una simplicidad comprensible; incluso un shell con muchas funciones puede sentirse inmediato

Lo que medí mal

  • time zsh -i -c exit inicia un shell interactivo y luego lo cierra de inmediato, por lo que mide juntos el tiempo total de inicialización y el de salida
  • Es un benchmark muy usado, pero zsh-bench dedica una sección aparte a explicar por qué este método es incorrecto
  • Lo que el usuario realmente espera no es el tiempo total de inicialización, sino la aparición del prompt, la ejecución del primer comando y la latencia de cada pulsación posterior
  • Algunas configuraciones pueden salir lentas en este benchmark y aun así sentirse más rápidas en el uso real
  • zsh-bench mide el tiempo hasta el primer prompt, el tiempo hasta ejecutar el primer comando, la latencia de comandos y la latencia de entrada
  • instant prompt renderiza un prompt cacheado en el momento en que arranca el shell y permite escribir incluso antes de que .zshrc termine de cargarse
  • Cuando se aplica instant prompt, el tiempo de arranque percibido se acerca a 0 sin importar el costo de inicialización, por lo que la cifra del tiempo de salida pierde importancia

Correcciones sobre los gestores de plugins y el resaltado de sintaxis

  • La afirmación de que “los gestores de plugins agregan sobrecarga” era demasiado amplia

    • Algunos gestores de plugins sí añaden su propia sobrecarga y resolución de dependencias al inicio
    • Pero aplicar esa característica a toda la categoría de gestores de plugins era inexacto
    • antidote compila una lista simple de plugins en un único script estático y no resuelve dependencias al abrir el shell
    • El enfoque de antidote consiste en hacer source a un solo archivo generado, como si fueran líneas source escritas a mano
    • La distinción más precisa es que los frameworks pesados que resuelven plugins en cada arranque son lentos, mientras que los gestores modernos con empaquetado estático no lo son
    • Los gestores modernos con empaquetado estático también ofrecen gestión de actualizaciones, mientras que un script de instalación propio obliga a hacerlo manualmente
  • Recomendé un resaltador de sintaxis lento

    • Viéndolo en retrospectiva, fue una elección vergonzosa haber hecho source de zsh-syntax-highlighting en una configuración que hablaba de latencia de entrada
    • zsh-syntax-highlighting vuelve a resaltar todo el búfer en cada pulsación, y en líneas de comandos largas eso puede causar justamente esa latencia por tecla
    • Zsh-patina es un enfoque más nuevo y, si escribes comandos largos, puede sentirse mejor que la herramienta que uso ahora
  • El núcleo de lo que sí se mantiene

    • Poder leer todo el .zshrc de una sola vez sigue siendo algo que realmente prefiero
    • Lo importante es que el framework no decide por mí y que no hay plugins que yo no haya elegido
    • Como hay menos componentes, si aparece una parte lenta es más fácil encontrarla
    • Esta elección tiene más que ver con una preferencia por la simplicidad que con la velocidad en sí; que la simplicidad lleve a un sistema rápido es un efecto secundario
    • Incluso un shell con todas las funciones puede ser rápido y sentirse inmediato, y hay varias formas de llegar a ese objetivo
    • Mantengo una configuración mínima no porque sea el único camino a la velocidad, sino porque quiero entenderla
  • Cierre

    • El texto original se mantiene con una nota al inicio que apunta a este artículo
    • La configuración sigue estando en dotfiles, y el resaltador de sintaxis también sigue ahí
    • Algunas partes de la configuración se actualizarán para usar herramientas más recientes

1 comentarios

 
GN⁺ 5 시간 전
Opiniones de Lobste.rs
  • Es una buena nota de seguimiento que muestra el poder de la comunidad y del intercambio de ideas, y hace que internet se sienta un poco más humano

  • La primera reacción fue de sorpresa al ver que todavía es posible admitir errores y corregirlos
    Ya en serio, no me gustan mucho varios shells nuevos, así que me salté el primer artículo, pero este sí me gustó. ash no encaja con mi forma de usar el historial por su comportamiento predeterminado, y shells como fish me parecen cargados de funciones de UI que no me interesan
    Aun así, funciones como el caché automático del prompt sí se ven bien. Yo mismo he hecho prompts monstruosos y les he puesto caché de forma medio improvisada, así que me pega de cerca

  • Me gustan este tipo de artículos. Si más gente publicara sus errores y las correcciones posteriores, internet sería un lugar un poco más humano

    • Soy el autor. Gracias, y en especial trato de admitir mis errores de forma constante para dar el ejemplo al equipo
  • Después de ver el primer artículo ya había optimizado mi zshrc y reducido el tiempo a la mitad. Luego seguí investigando y también usé zsh-bench, así que ese artículo me sirvió como disparador para optimizar

  • Ya no tiene mantenimiento, pero zsh4humans está muy cerca del estado del arte en rendimiento. La persona que lo hizo parece una especie de genio de Zsh
    Yo no lo uso directamente porque quiero mantener el control. Aun así, tomé ideas en las partes que podía entender, como el transient prompt
    No sabía que zsh-bench también era un proyecto del mismo autor

    • Buen tip. Parece que el proyecto zsh4humans tiene partes que son verdaderas joyas, así que voy a revisarlo
  • Gracias a este artículo conocí zsh-patina
    Llevo años usando zsh-fast-syntax-highlighting, pero también debería evaluar esta herramienta nueva

  • Me pregunto si de verdad se nota que zsh-syntax-highlighting vuelve a resaltar todo el buffer en cada pulsación de tecla y eso genera latencia
    Los editores de código hacen algo esencialmente parecido y casi nunca noto retraso. Incluso los comandos “largos” en la línea de comandos suelen ser cortos comparados con los de un editor, así que me sorprende que eso cause problemas
    Aunque, si el resaltado de sintaxis es mucho más complejo de lo que parece, entonces sí podría pasar

  • Aprendí muchos trucos nuevos con este artículo. Hasta ahora solo había hecho ajustes simples, como evitar que los datos del prompt vinieran de backends lentos
    Aquí hay una optimización del prompt mucho más fina, y en un flujo diario donde abro incontables terminales, estas pequeñas mejoras se van acumulando y terminan teniendo un gran impacto