Me gustaría empezar a usar Blazor, a pesar de que todavía está en el nivel alfa.
Según tengo entendido, Blazor usa WebAssembly para compilar C# en el lado del cliente.
Y tengo estas preguntas:
¿Este enfoque se ejecuta más rápido que, por ejemplo, React/Vue.js, compilado en JavaScript?
¿Es cierto que el navegador necesitará descargar la biblioteca WebAssembly cada vez que se carga la página?
En Internet no hay comparaciones del rendimiento de los marcos de JavaScript populares. Por eso me gustaría saber el rendimiento teórico del nuevo framework de Microsoft.
En abril de 2021, hicimos una prueba de Blazor WASM contra una aplicación web heredada de Angular.js, así como contra Flutter Web (procesadores HTML y CanvasKit). Hemos recreado la página principal de la aplicación heredada (que es esencialmente una gran cuadrícula de datos con filtros, paginación, clasificación, etc.). Aquí hay algunas conclusiones:
Lighthouse perf. Scores Grid Displ. Data transf. Data uncomp. Reqs. FCP SI LCP TTI TBT CLS Blazor* 2.2s 4.7MB 13.7MB 99 0.5s 1.6s 0.5s 2.1s 1.3s 0.01 Flutter HTML 1.7s 2.1MB 3.7MB 15 1.9s 2.5s 2.2s 2.3 0.2s 0 Flutter CanvasKit^ 2.8s 4.7MB 10.5MB 17 1.0s 2.2s -/- 2.2s 1s 0 AngularJS` 1.9s 2.0MB 5.7MB 294 2.1s 2.2s 2.6s 2.6s 0.1s 0*Lighthouse proporciona un valor de LCP incorrecto (cuenta la página en blanco "Cargando..." de Blazor como LCP)
^El renderizador CanvasKit de Flutter no permite que Lighthouse obtenga mediciones LCP
`La aplicación heredada es mucho más grande que las PoC creadas, hay muchas más pantallas y activos que afectan la cantidad de solicitudes al iniciar la aplicación
Según tengo entendido, Blazor usa WebAssembly para compilar C# en el lado del cliente.
Cierto a medias. Puede escribir su código en el lado del cliente WebAssembly (WASM) (sí, es C# en el lado del cliente), pero también puede ejecutar el lado del servidor lógico. Ambos tienen beneficios. Todo su código es visible si sigue la ruta WASM. Pero puede volver a procesarse más rápido que si la lógica estuviera basada en un servidor, pero si está basada en un servidor, su código no se puede ver.
¿Este enfoque se ejecuta más rápido que, por ejemplo, React/Vue.js, compilado en JavaScript?
No. He hecho un montón de Vue.js y Vue.js se ejecuta más rápido. Pero puedo escribir código mucho más rápido con Blazor. Y Blazor ofrece una solución de desplazamiento virtual que puede hacer que aparezca más rápido. En mi caso, los componentes de trazado disponibles eran demasiado lentos. Escribí un componente Blazor usando C# y JavaScript que funcionó muy bien. La mayor parte del tiempo no me preocupa que el código WASM se ejecute demasiado lento... pero el trazado tenía que ser mucho más rápido... y Blazor me dejó mi pastel... Solo tenía que hacer un trabajo de bajo nivel en JavaScript. La ejecución de Blazor se ha vuelto más rápida en los últimos seis meses y el equipo dice que habrá más cuando salga .NET 6 . Pero es más que lo suficientemente rápido para el 99% de lo que necesito hacer.
¿Es cierto que el navegador necesitará descargar la biblioteca WebAssembly cada vez que se carga la página?
No si están en caché. E incluso la primera vez que se cargan, no es lento si tienes una conexión decente. Es del orden de 10 MB.
La gran pregunta sin respuesta: ¿vale la pena usarlo? Lo he estado usando durante unos seis meses.
Para mí ha sido genial. C# es un lenguaje muy bueno. A veces echo de menos agregar una propiedad dinámicamente y, a menudo, tiene que iniciar manualmente un redibujado, pero con funciones como las comprobaciones de objetos anulables que le advierten que no verificó si su código podría causar una verificación de referencia nula; es mucho mejor que JavaScript. A menudo sentí que era doloroso trabajar con la "cadena de herramientas" de JavaScript. Es muy agradable poder optar por no participar en la biblioteca de JavaScript.
La hoja de ruta de ASP.NET Core para .NET 6 se puede encontrar en github aquí . Descubrirá que Blazor tiene, con mucho, la mayoría de las tareas.
Tenga en cuenta que la lista indica aquellos elementos en los que se centrará el equipo de ASP.NET, lo que significa que están poniendo mucho énfasis en mejorar Blazor.
Este problema representa la lista de las principales inversiones en las que se centrará nuestro equipo durante el período de tiempo de .NET 6. Los elementos de esta lista son solo áreas importantes de inversión y no incluyen todas las funciones y correcciones de errores que abordaremos durante este tiempo.
A continuación se muestran algunas de las tareas en las que han estado trabajando:
Tareas completadas:
Compilación AOT. Compile todo en WebAssembly
Mejore la compatibilidad con SVG en Blazor. Problema de nivel superior para compatibilidad con SVG en Blazor
Admite la transferencia de matriz de bytes en JS Interop.
Tareas en progreso
Recarga en caliente para Blazor. Optimización del rendimiento de compilación
Pausar y reanudar las aplicaciones de Blazor.
Apunte e implemente en plataformas de escritorio.
Elimine las limitaciones de tamaño impuestas por el tamaño del mensaje de SignalR.
Arrastrar y soltar. Proporcione eventos a los que los usuarios puedan suscribirse arrastrando y soltando