Impeller es un nuevo motor de renderizado desarrollado por el equipo de Flutter que soluciona el problema de retraso al iniciar una aplicación. Compila shaders anticipadamente y optimiza el rendimiento. Este avance promete abrir un sinfín de posibilidades para Flutter, que me dispongo a contarte a continuación 😉
¿Qué es Impeller?
El año pasado se nos dio a conocer un nuevo motor de renderizado en el que estaba trabajando el equipo de Flutter. Se trata de Impeller, una tecnología que promete solucionar un molesto problema llamado “early-onset jank”, este inconveniente provoca que, al iniciarse una aplicación, esta se trabe por unos instantes tras ejecutarse por primera vez. Hecho que provoca una pésima primera impresión por parte del usuario, algo totalmente inadmisible para los desarrolladores.
El motor de renderizado actual, Skia, renderiza las animaciones, efectos y transiciones, en el instante en el que se necesitan, es decir, mientras se ejecuta el programa. En cambio, Impeller propone un nuevo tiempo de ejecución para estas tareas tan demandantes. Se agrupan y precompilan los shaders necesarios para el renderizado en conjuntos más pequeño y simples en el momento en el que se construye la aplicación. Algo así como precargar los recursos más demandantes antes de ser llamados, por lo que no se compilan en tiempo de ejecución y evitan así, ese cuelgue inicial.
¿Por qué se desarrolló Impeller?
Impeller se creó con los siguientes objetivos en mente:
- Rendimiento predecible: Impeller compila todos los shaders y la reflexión en el momento en el que se construye la aplicación. Construye por adelantado todas las animaciones, las transiciones, etc. Además, el motor controla la memoria caché y se pueden almacenar esos recursos de forma explícita, esto quiere decir que el desarrollador puede ver y modificar la caché según sus necesidades.
- Instrumentable: Impeller etiqueta todos los recursos gráficos como texturas y búferes para facilitar su organización. Por otra parte, puede capturar y persistir animaciones en disco sin afectar el rendimiento de renderizado por fotograma.
- Portátil: Flutter no vincula Impeller a una API de renderizado específica. Puede escribir shaders una vez y convertirlos a los formatos específicos del backend que se esté utilizando según sea necesario.
- Aprovecha las API gráficas modernas: Impeller utiliza, pero no depende de las funciones disponibles en las API modernas como Metal o Vulkan.
- Aprovecha la concurrencia: Impeller puede distribuir cargas de trabajo de un solo fotograma en varios subprocesos en caso de ser necesario.
Disponibilidad
IOS:
En sistemas operativos IOS, Flutter activa el motor Impeller por defecto. En caso de no querer hacer uso de esta tecnología mientras se depura la aplicación, se puede pasar el parámero --no-
enable-impeller
al comando flutter run
. Quedaría de la siguiente manera:
flutter run --no-enable-impeller
Si se desea desactivar Impeller a la hora de lanzar la aplicación, se deben añadir las siguientes etiquetas justo debajo de la etiqueta <dict> en el archivo Info.plist de la aplicación.
<key>FLTEnableImpeller</key> <false />
Android:
En sistemas operativos Android, Impeller sigue en desarrollo y, por ende, no está terminado, por lo que está desactivado por defecto. De todas formas, es posible activarlo en caso de querer experimentar con este nuevo motor gráfico. Para habilitarlo mientras se depura la aplicación se debe pasar el parámetro --enable-impeller
al comando flutter run
. Tal que así:
flutter run --enable-impeller
Y a la hora de lanzar una aplicación, se debe añadir la siguiente etiqueta debajo de la etiqueta <application> del archivo AndroidManifest.xml:
<meta-data android:name="io.flutter.embedding.android.EnableImpeller" android:value="true" />
Ejemplos
En conclusión, Impeller mejora el rendimiento de Flutter al reducir el tiempo que se tarda en compilar los shaders y al optimizar el uso de la memoria y la GPU.
Además, este motor está diseñado para soportar modelos 3D. Por otra parte, Skia, su predecesor, es un motor de renderizado únicamente 2D que ya se utilizaba antes de Flutter. Esto quiere decir que Impeller es un motor mucho más potente que Skia, y que está hecho y pensado exclusivamente para Flutter, por lo que no sería exagerado deducir que, a largo plazo, esta nueva tecnología abrirá un sinfín de posibilidades para exprimir todo el potencial que tiene Flutter por ofrecer.