Esta herramienta es un trabajo en progreso. Todavía no está completamente listo para la producción, pero puedes probarlo.
Perfguard es un analizador estático GO con énfasis en el rendimiento.
Admite dos modos de ejecución:
perfguard lint encuentra problemas potenciales, trabajos como el análisis estático tradicionalperfguard optimize utiliza perfiles de CPU para mejorar la precisión del análisisCaracterísticas clave de perfguard:
perfguard optimize--fix (QuickFixes)(*) No intenta cargar objetivos de análisis en la memoria de una vez.
Aquí hay algunos ejemplos de lo que puede hacer por usted:
Instale un binario perfguard debajo de su $(go env GOPATH)/bin :
$ go install -v github.com/quasilyte/go-perfguard/cmd/perfguard@latestSe recomienda que recopile perfiles de CPU en flujos de trabajo realistas.
Para una aplicación CLI de corta duración podría ser una ejecución completa. Para una aplicación de larga duración, es posible que desee activar los perfiles durante un minuto o más, luego guárdelo en un archivo.
Los perfiles que se obtienen de los puntos de referencia no son representativos y pueden conducir a resultados subóptimos.
Los puntos calientes en el perfil pueden aparecer en tres lugares principales:
Optimizar su propio código es sencillo. Ejecute perfguard en la raíz de su proyecto:
$ perfguard optimize --heatmap cpu.out ./... Esto solo sugerirá soluciones a la categoría (2) .
Para optimizar el código de (3) tenemos varias opciones.
La primera opción es preferible. Puede usar el mismo perfil de CPU para optimizar la biblioteca. Ejecute el perfguard en la raíz del código fuente de la biblioteca al igual que lo hizo con su aplicación.
La segunda opción puede funcionar para los casos cuando desea implementar un binario optimizado sin tener una forma de arreglar las dependencias utilizando la primera opción. Sigue estos pasos:
# Make dependencies easily available for perfguard.
$ go mod vendor
# Run the analysis over the vendor.
# We use --fix argument to immediately apply the suggested changes.
$ perfguard optimize --heatmap cpu.out --fix ./vendor/...
# Build the optimized binary.
$ go build -o bin/app ./cmd/myapp Luego puede revertir los cambios al ./vendor o eliminarlo si no está usando el proveedor.