Rendimiento Blazor

84

Me gustaría comenzar 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, compilado en JavaScript?

¿Es cierto que el navegador deberá descargar la biblioteca de WebAssembly cada vez que se cargue la página?

En Internet no hay comparaciones del rendimiento de los marcos JS populares. Entonces me gustaría conocer el desempeño teórico del nuevo framework de Microsoft. Gracias de antemano.

FoxPro
fuente
En este artículo @chris sainty lo explico muy bien. chrissainty.com/what-is-blazor-and-why-is-it-so-exciting
Majedur Rahaman

Respuestas:

146

¿Es cierto que el navegador deberá descargar la biblioteca de Webassembly cada vez que se cargue la página?

No, los navegadores pueden almacenar en caché los archivos. CDN común para aplicaciones Blazor hará el truco.

¿Es este sistema más rápido de trabajar que, por ejemplo, React / Vue, compilado en JavaScript?

Blazor usa el ensamblaje web, el ensamblaje web en papel debería ser más rápido que cualquier biblioteca js, sin embargo, no todos los navegadores tienen un analizador de ensamblaje web maduro todavía. Por lo tanto, es posible que los navegadores no ejecuten el ensamblaje web a una velocidad óptima a partir de ahora.

Puede crear una pequeña aplicación Blazor y ejecutarla en Firefox, Chrome o Edge. En la mayoría de los casos, Firefox ejecuta aplicaciones Blazor mucho más rápido que Chrome o Edge, lo que implica que los fabricantes de navegadores aún necesitan mejorar, incluso Firefox puede mejorar.

Si su aplicación necesita acceder a DOM con frecuencia, definitivamente el ensamblaje web / Blazor será más lento en comparación con cualquier biblioteca JS, ya que el ensamblaje web no puede acceder directamente al DOM sin usar Invokes (que es lento en este momento, consulte mi punto de referencia de blazer a continuación) .

En Firefox 10,000 RegisteredFunction.InvokeUnmarshalle llamadas a métodos vacíos toman 250 ms, mientras que Chrome y Edge necesitan más de 2400 ms en mi PC '. En JS puro, se necesitan menos de 10 milisegundos para el mismo escenario.

Además, la implementación actual de Blazor tiene su propio motor MSIL en la parte superior del motor de ensamblaje web de los navegadores, lo que significa que hay dos intérpretes trabajando para ejecutar un proyecto Blazor, como dos traductores que interpretan una conversación en lugar de uno. Actualmente, Microsoft está trabajando en un compilador AOT, que aún no se ha lanzado. Una vez que su lanzamiento, Blazor será mucho más rápido que la implementación actual.

http://www.mono-project.com/news/2018/01/16/mono-static-webassembly-compilation/

Podemos asumir con seguridad que el ensamblaje web es el futuro del desarrollo web, pero por el momento no podemos decir nada sobre el futuro de Blazor. Sobre el papel, Blazor puede ser más rápido que cualquier marco que exista, sin embargo, necesitamos el compromiso de los encargados del montaje web, los desarrolladores de navegadores, Microsoft y las comunidades para que las teorías sean prácticas.

Actualización 10 de julio de 2018

Hay nuevas propuestas en los repositorios de WebAssembly.

  1. Permitir que WebAssembly maneje DOM directamente. https://github.com/WebAssembly/proposals/issues/8

  2. Tipos de referencia para WebAssembly con GC. https://github.com/WebAssembly/reference-types/blob/master/proposals/reference-types/Overview.md

Las dos propuestas anteriores allanarán el camino hacia una interacción mucho más rápida entre DOM y el ensamblaje web en el futuro. IOW Blazor será mucho más rápido en el futuro.

Actualización 17 de octubre de 2018

El equipo de Firefox pudo llegar a JS -> llamada WASM tan rápido como JS -> llamadas al método JS. A partir de ahora, FireFox está muy por delante de cualquier otro navegador cuando se trata de compatibilidad con WebAssembly

https://hacks.mozilla.org/2018/10/calls-between-javascript-and-webassembly-are-finally-fast-%F0%9F%8E%89/

VibeeshanRC
fuente
2
Tengo entendido que una de las razones por las que React y ahora Angular y otros marcos son muy rápidos es el concepto de DOM virtual, en comparación con el DOM real, y solo aplica las diferencias. ¿Es eso algo que Blazor hace o tiene previsto hacer en el futuro?
Cleverguy25
1
@ Cleverguy25 Angular NO usa un DOM virtual ... React lo hace, por lo que react dará un mejor rendimiento en aplicaciones grandes
MattE
1
@ Cleverguy25 Blazor usa DOM virtual como React que podría hacerlo bastante rápido. Angular intentó usar Virtual Dom pero, como sé, se ha retirado.
nzrytmn
3
Blazor tiene un DOM virtual para aplicar solo actualizaciones delta a html. También interpreta el código, actualmente no hay compilación de wasm.
Peter Morris
2
Cumplidor de AOT empujado al primer trimestre de 2021.
Rohan Bojja
1

Según tengo entendido, Blazor usa WebAssembly para compilar C # en el lado del cliente.

Medio cierto. Puede escribir su código en el lado del cliente de 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 renderizarse más rápido que si la lógica estuviera basada en un servidor, pero si su servidor se basaba, su código no se podía ver.

¿Este enfoque se ejecuta más rápido que, por ejemplo, React / Vue, compilado en JavaScript?

No. He hecho un montón de Vue y Vue corre más rápido. PERO puedo escribir código MUCHO más rápido usando 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ía de las veces 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ó comer mi pastel ... solo tenía que hacer algo bajo nivel de trabajo en JavaScript. La ejecución de Blazor se ha acelerado en los últimos 6 meses y el equipo dice que habrá más por venir cuando salga .Net 6. Pero es lo suficientemente rápido para el 99% de lo que he necesitado hacer.

¿Es cierto que el navegador deberá descargar la biblioteca de WebAssembly cada vez que se cargue la página?

No si están almacenados en caché. E incluso la primera vez que se cargan, no es lento si tiene una conexión decente. Es del orden de 10 megas.

La gran pregunta no formulada: ¿vale la pena usarla? Lo he estado usando durante unos 6 meses. Para mi ha sido genial. C # es un muy buen lenguaje. A veces echo de menos agregar una propiedad dinámicamente y, a menudo, tiene que iniciar manualmente un nuevo dibujo, pero con características como verificaciones de objetos que aceptan valores NULL advirtiendo que no verificó si su código podría causar una verificación de referencia nula, es mucho mejor que JS. A menudo sentía que era doloroso trabajar con la "cadena de herramientas" de JavaScript. Es tan bueno poder optar por no participar en la biblioteca thrash de JS.

usuario14198340
fuente