.NET Conf 2023 – Celebrating the Release of .NET 8! – Save the Date!
NET 8 ha incorporado mejoras a la función nativa de compilación anticipada (AOT), que fue introducida por primera vez en .NET 7. Al publicar una aplicación como AOT nativa, se genera una versión autónoma de la aplicación que no requiere un run time, ya que todo está incluido en un solo archivo.
.NET 8 incluye soporte para las arquitecturas x64 y Arm64 en macOS. Es decir, que ahora podremos publicar nuestras apliccaciones .NET como AOT nativas para sistemas macOS.
Las últimas mejoras en aplicaciones AOT nativas en sistemas Linux han llevado a una reducción significativa en los tamaños de las aplicaciones. Las pruebas recientes muestran que las aplicaciones AOT nativas construidas con .NET 8 (v8.0.100-rc.2) ocupan casi un 50% menos de espacio en comparación con las construidas con .NET 7.
Ejemplo:
La anterior captura muestra una comparación del tamaño de una aplicación «Hello World» (una aplicación de CLI del temaplate estandar de Visual Studio 2022, tal cual sin ninguna modificación) que incluye todo el run time de .NET.
Y la siguiente captura se muestra la diferencia entre versiones de .NET:
Para compilar solamente tienes que ir al CLI y ejecutar: dotnet publish -r win-x64 -c Release
Estos avances en la compilación anticipada nativa (AOT) nos ayudará a crear aplicaciones más pequeñas, rápidas y eficientes que se ejecutan en diversas plataformas sin requerir dependencias externas.
Y donde yo veo la mejor ayuda es en la generación de contenedores introduciendo el paso de la compilación AOT:
- Optimización de la imagen base: usar una imagen base que sea lo más pequeña posible, por ejemplo las imágenes de alpine.
- Compilación AOT: En .NET 7 (ahora .NET8), puedes compila tu código en código máquina nativo en el momento de la compilación, en lugar de en tiempo de ejecución. Esto puede reducir significativamente el tamaño de la aplicación y mejorar el rendimiento.
- Multietapa Dockerfile: usa un Dockerfile de múltiples etapas para construir tu aplicación en una etapa y luego copiar el resultado en una imagen más pequeña.
- Eliminación de archivos innecesarios: después de construir la aplicación, asegúrate de eliminar cualquier archivo innecesario, como los archivos de código fuente y las dependencias de desarrollo. Este paso depenerá de como generes el multietapa.
- Compresión de la imagen: Puedes utilizar herramientas como
docker-squash
para comprimir la imagen final y reducir aún más su tamaño.