Блазор против Бритвы

asp.net-core blazor c# razor

Вопрос

С изобретением Blazor мне интересно, есть ли существенная эффективность (как в создании кода, так и в фактической компиляции / исполнении кода) между этими двумя языками?

https://github.com/SteveSanderson/Blazor

Если кто-то на самом деле его реализовал, вы проводили какие-либо тесты производительности или получили анекдотические (да извините, извините, я прошу это) отзыв о процессе написания кода по сравнению с простым старым Razor?

Принятый ответ

Информация, представленная ниже, в основном перефразирована из записи в блоге Стивена Андерсона от 2 февраля и моего собственного понимания целей проекта:

Blazor предназначен для объединения идей из текущего стека .NET Razor с современной архитектурой инфраструктуры SPA.

Создание кода

предназначен для гибкости и поощрения компоновки на основе компонентов, как показано в этом примере:

<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; }
}

который создает повторно используемый компонент в html-разметке:

<MyDialog Title="Ski Lift controls" onOK="DismissSkiDialog">
    Gondola @gondolaId is now <em>running</em>
</MyDialog>

выполнение

Ожидается, что Blazor будет быстрым, потому что webAssembly быстро. Он компилируется в байт-код, который выполняется непосредственно загрузчиком wasm. Например, в javascript файлы .js должны быть сначала загружены, а отдельные файлы объединены, затем проанализированы и пронумерованы и встроены в древовидную структуру, которые затем могут быть интерпретированы механизмом javascript браузера (например, движком chrome v8 ) ,

Для углубленного сравнения выполнения webAssembly и javascript см. Этот пост .

Архитектура и дизайн SPA

Поскольку в Интернете есть большие рамки, уже встроенные в javascript для Интернета, Blazor вдохновлен идеями, уже используемыми в современных рамках, таких как React, Vue и Angular, и будет содержать концепции, подробно описанные в этой статье, такие как:

  • Макеты
  • маршрутизация
  • Внедрение зависимости
  • Ленивая загрузка
  • Тестирование устройства

Обратите внимание: хотя эти понятия существуют для серверной части Razor, не все они существуют на стороне клиента. Маршрутизация на передней панели недоступна в Razor и часто сочетается с инфраструктурой javascript для заполнения этого сценария.

Я лично работал над корпоративными приложениями, обслуживающими страницы Razor вместе с AngularJs. Время от времени оно может быть беспорядочным и никогда не чувствует себя «чистым».

В итоге

Razor - это решение для серверной архитектуры, которая может обрабатывать логику api и серверные шаблоны, но не может предлагать логику на стороне клиента вне javascript.

Blazor - это следующий шаг (и, надеюсь, преемник), который позволит использовать ту же функциональность на стороне сервера, что и Razor, но будет интегрировать клиентскую логику с использованием C# вместо javascript.

В настоящий момент я работаю над небольшим тестовым проектом с Blazor, и до сих пор я нахожу его простым в использовании. Но, как предупреждения на блоге и странице GitHub, он даже не близок к производству.

Редактирование третьей стороны с 2018-09-26

В .NET Conf 2018 было объявлено, что компоненты Razor («серверная Blazor») будут частью .NET Core 3.0 . Этот код был показан:

// inside index.cshtml - serverside use of blazor
<SurveyPrompt Title="How is Blazor working for you?" />
<div>
     <img id="bot" src="@imageurl" />
<div>
<button class="btn btn-primary" onclick="@changeImage">Click me</button>

@functions{

    string imageurl = "/images/dotnet-bot-1.png";

    void changeImage()
    {
        if(imageurl.Contains("1"))
        {
            imageurl= imageurl.Replace("1", "2");
        } 
        else 
        {
            imageurl= imageurl.Replace("2", "1");
        }
     }
}


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow