En qué me equivoqué sobre los terminales rápidos
(mijndertstuij.nl)- 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 exitmide 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 exitinicia 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
.zshrctermine 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
sourcea un solo archivo generado, como si fueran líneassourceescritas 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
sourcedezsh-syntax-highlightingen una configuración que hablaba de latencia de entrada zsh-syntax-highlightingvuelve 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
- Viéndolo en retrospectiva, fue una elección vergonzosa haber hecho
-
El núcleo de lo que sí se mantiene
- Poder leer todo el
.zshrcde 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
- Poder leer todo el
-
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
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ó.
ashno encaja con mi forma de usar el historial por su comportamiento predeterminado, y shells comofishme parecen cargados de funciones de UI que no me interesanAun 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
Después de ver el primer artículo ya había optimizado mi
zshrcy 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 optimizarYa 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-benchtambién era un proyecto del mismo autorzsh4humanstiene partes que son verdaderas joyas, así que voy a revisarloGracias a este artículo conocí
zsh-patinaLlevo años usando
zsh-fast-syntax-highlighting, pero también debería evaluar esta herramienta nuevaMe pregunto si de verdad se nota que
zsh-syntax-highlightingvuelve a resaltar todo el buffer en cada pulsación de tecla y eso genera latenciaLos 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