Las ventajas que te ofrece Microsoft Azure y el mundo.NET

Flutter: Alcanza nuevas alturas con Impeller

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 MetalVulkan.
  • 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.

mm

Sobre Álvaro Ramos Martín

Desde que tengo memoria siempre he tenido un ordenador bajo el brazo, y gracias a la fascinación y curiosidad que tengo por la tecnología me animé a crear yo mismo sus aplicaciones. Tengo experiencia desarrollando para: React, React Native, Spring Boot y desde hace poco tiempo, Flutter, cuya forma de trabajo y desarrollo me ha fascinado desde el primer momento.
Esta entrada ha sido publicada en Flutter. Enlace permanente.
Suscríbete a Piensa en Sofware desarrolla en Colores

Suscríbete a Piensa en Sofware desarrolla en Colores

Recibe todas las actualizaciones semanalmente de nuestro blog

You have Successfully Subscribed!

ENCAMINA, piensa en colores