Blazor vs Razor

asp.net-core blazor c# razor

Pregunta

Con la invención de Blazor, me pregunto si hay eficiencias significativas (tanto en la creación de código como en la compilación / ejecución real de código) entre estos dos idiomas.

https://github.com/SteveSanderson/Blazor

Si alguien lo ha implementado, ¿has realizado alguna prueba de rendimiento o has recibido comentarios anecdóticos (lo siento, disculpas, te lo estoy pidiendo) sobre el proceso de escritura de código, en comparación con Razor?

Respuesta aceptada

La información que presento a continuación está principalmente parafraseada en la entrada del blog del 2 de febrero de Steven Anderson y mi propia comprensión de los objetivos del proyecto:

El objetivo de Blazor es combinar las ideas de la pila actual de .NET Razor con la arquitectura moderna de la estructura SPA.

Creación de código

está pensado para ser flexible y fomenta diseños basados ​​en componentes, como se ve en este ejemplo:

<div class="my-styles">
   <h2>@Title</h2>
   @RenderContent(Body)
   <button onclick=@OnOK>OK</button>
</div>

@functions {
    public string Title { get; set; }
    public Content Body { get; set; }
    public Action OnOK { get; set; }
}

que crea un componente reutilizable en el código html:

<div class="my-styles">
   <h2>@Title</h2>
   @RenderContent(Body)
   <button onclick=@OnOK>OK</button>
</div>

@functions {
    public string Title { get; set; }
    public Content Body { get; set; }
    public Action OnOK { get; set; }
}

Ejecución

Se espera que Blazor sea rápido, porque webAssembly es rápido. Se compila en el bytecode que es ejecutado directamente por el cargador wasm del navegador. En javascript, por ejemplo, los archivos .js deben cargarse primero y los archivos separados se combinan, luego se analizan y se crean tokens y se integran en una estructura de árbol, que luego puede ser interpretada por el motor javascript de un navegador ( el motor v8 de Chrome , por ejemplo) .

Para una comparación en profundidad de la ejecución de webAssembly y javascript, consulte esta publicación .

SPA Arquitectura y Diseño

Como hay grandes marcos ya incorporados en javascript para la web, Blazor se ha inspirado en las ideas ya utilizadas en marcos modernos como React, Vue y Angular, y presentará conceptos detallados en la publicación, tales como:

  • Diseños
  • Enrutamiento
  • Inyección de dependencia
  • Carga lenta
  • Examen de la unidad

Tenga en cuenta que si bien estos conceptos existen para el lado del servidor en Razor, no todos ellos existen en el lado del cliente. El enrutamiento front-end no está disponible en Razor y, a menudo, se ha combinado con un marco javascript para llenar ese escenario.

Personalmente, he trabajado en aplicaciones empresariales que sirven páginas de Razor junto con AngularJs. A veces puede ensuciarse y nunca se sintió "limpio".

En resumen

Razor es una solución para la arquitectura basada en servidor que puede manejar la lógica de api y las plantillas del lado del servidor, pero no puede ofrecer la lógica del lado del cliente fuera de javascript.

Blazor es el siguiente paso (y, con suerte, el sucesor) que permitirá la misma funcionalidad del lado del servidor que Razor, pero integrará la lógica del lado del cliente con C# lugar de javascript.

Estoy trabajando en un proyecto de prueba pequeño en este momento con Blazor, y hasta ahora me resulta fácil de usar. Pero como las advertencias en el blog y la página de GitHub se establecen, ni siquiera está listo para la producción.

Edición de terceros desde 2018-09-26

En la .NET Conf. 2018 se anunció que los componentes de Razor ("servidor Blazor") formarán parte de .NET Core 3.0 . Este código fue mostrado:

<div class="my-styles">
   <h2>@Title</h2>
   @RenderContent(Body)
   <button onclick=@OnOK>OK</button>
</div>

@functions {
    public string Title { get; set; }
    public Content Body { get; set; }
    public Action OnOK { get; set; }
}



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué