Я собираюсь рискнуть и сделать прогноз. С момента появления Интернета большая часть нашей отрасли прилагала усилия, чтобы работать в Интернете, но избегая таких веб-технологий, как JavaScript, HTML и CSS. Примеры включают Java-апплеты (1995–2013 гг.), Microsoft ActiveX (поставлялись с Internet Explorer 3.0 в 1996 г.), Microsoft ASP.NET Web Forms (2002 г.), JavaServer Faces (JSF), Google Web Toolkit (2006 г.), Microsoft Silverlight ( 2007), а также многочисленные языки и транспиляторы для компиляции в JavaScript.

Широко распространенное недовольство JavaScript как языка существует с первых дней его существования, и его можно увидеть по неоднократным попыткам расширить язык с помощью статической типизации. Это восходит к черновику JavaScript 2.0 в 1999 году, Microsoft JScript.NET в 2000 году, Adobe ActionScript 2.0 в 2003 году и провалу ECMAScript 4 в том же году, Google Dart в 2011 году, чрезвычайно популярного TypeScript от Microsoft в 2012 году, Google Эксперимент SoundScript в 2015 году и Facebook Flow в 2016 году.

Сегодня у нас есть веб-сборка, которая была реализована во всех основных браузерах с конца 2017 года. Итак, почему эта технология и Blazor отличаются от вышеупомянутых технологий?

Все технологии, которые появились раньше, были одним из двух: либо расширение браузера, которое существует за пределами изолированной программной среды браузера, либо слой поверх HTML, CSS и JavaScript, пытающийся абстрагироваться от веб-технологий и даже протоколов.

WebAssembly отличается тем, что встроен в браузер, сам по себе является стандартной веб-технологией и работает в той же песочнице, что и JavaScript. В результате производители браузеров могут гарантировать, что WebAssembly является более безопасным продуктом и не требует от пользователей установки или обновления чего-либо, кроме самого браузера. WebAssembly выражается в байт-коде и упаковывается в двоичном формате (в отличие от обычного текстового JavaScript), что придает ему эффективность и компактность, о которых инструментарий JavaScript может только мечтать.

Как язык низкого уровня, WebAssembly не подходит в качестве цели для разработки веб-приложений, поскольку он предназначен для лучшей цели компиляции для других языков более высокого уровня, которые раньше можно было только скомпилировать или транспилировать в JavaScript. . Сегодня WebAssembly также не имеет прямого доступа к DOM и другим API-интерфейсам браузера. Здесь на помощь приходит Blazor.

Blazor позволяет компилировать приложение .NET, сокращая структуру и биты до того, что абсолютно необходимо для запуска приложения, и выполнять код .NET в браузере изначально. Вы можете буквально создать клиентское веб-приложение с помощью шаблонов C # и Razor. Это сильно отличается от переноса в JavaScript - он намного быстрее и имеет более гибкие возможности для хранения данных в памяти (т. Е. Не ограничивается такими вещами, как число JavaScript или Int32Array). Blazor также включает связующий код, необходимый для эффективного взаимодействия с DOM из вашего .NET-приложения. Blazor также использует исходные карты, поэтому вы можете выполнять отладку и пошагово выполнять свое приложение C # в браузере. Это само по себе является удивительным инженерным достижением.

Поскольку Blazor обеспечивает совместное использование библиотек классов и кода, написанного на C #, между браузером и сервером, определения типов и структуры данных могут совместно использоваться и проверяться в любом месте стека. Это дает более богатую информацию о типах, безопасность и уверенность, чем может дать добавление слоев проверки типов поверх JavaScript.

Blazor также может сравнительно легко взаимодействовать с существующим JavaScript. Вы можете вызывать статические методы .NET из JavaScript или вызывать функции JavaScript из Blazor.

Поскольку приложения Blazor разрабатываются с помощью C # в Visual Studio, вы можете пользоваться богатой экосистемой инструментов, которая уже существует для приложений .NET. Это подводит меня к следующему пункту.

Обещание веб-форм ASP.NET позволило разработчикам .NET забыть о веб-технологиях. Создать страничную и сортируемую сетку было так же просто, как перетащить элемент управления в редактор WYSIWYG. Добавить события щелчка к кнопке в браузере, которая что-то делает на сервере, было так же просто, как дважды щелкнуть ту же кнопку в редакторе и написать некоторый код C #. Я наблюдал, как бесчисленное количество разработчиков .NET пытаются развиваться вместе с современными веб-технологиями. Это не полностью их вина, поскольку все меняется так быстро, и в мире веб-форм ASP.NET все в основном было передано вам. Многие разработчики C # и VB.NET до сих пор не сделали этого.

Есть еще одна группа людей, которые, я думаю, тоже будут рады появлению Blazor. Многие разработчики .NET работают в магазинах, которые навязывают однородный технологический стек от одного поставщика - например, в финансовом и медицинском секторах нашей отрасли. Разрабатывать современные веб-приложения сегодня на Angular или React очень сложно без неограниченного доступа к npm, github и переполнению стека, но это не помешает крупным и медленно развивающимся организациям применять политики, стремящиеся заблокировать каждый аспект жизненного цикла разработки. процесс. Теоретически Blazor позволил бы таким организациям использовать единый язык программирования приложений для всего стека, что дает дополнительное преимущество в виде упрощения найма и аудита. Итак, где эти магазины часто берут свои компоненты из? Сторонние поставщики с лицензионными соглашениями, которые могут предлагать варианты платной поддержки, такие как Telerik уже имеет набор компонентов Blazor, готовый к работе.

Еще одно место, где стеку Microsoft не хватает, - это разработка кроссплатформенных настольных приложений. Поскольку WebAssembly - это веб-технология, люди уже экспериментируют с ней в Electron, который использует те же компоненты, что и веб-браузер Chrome для рендеринга своего пользовательского интерфейса, что позволяет разработчикам упаковать приложение Blazor, которое может работать в Windows, Mac OS и Linux. .

Хотите разрабатывать серверные приложения с Blazor? "Вы можете сделать это". Сам WebAssembly также может работать в серверном приложении node.js.

Хотите разрабатывать мобильные приложения с Blazor? Хотя Xamarin уже давно является вариантом для разработки мобильных приложений на C #, а Blazor уже работает в мобильных браузерах, на NDC Oslo были представлены некоторые экспериментальные материалы, сочетающие Google Flutter с Blazor (ближе к концу видео ). Сам Flutter имеет поддержку платформ для iOS, Android, Web, React Native, а также поддерживает Xamarin. Поддержка Mac OS, Windows и Linux находится на разных этапах, но над ней ведется работа. Есть также несколько экспериментальных проектов, в которых технологии, такие как React Native, напрямую сочетаются с WebAssembly. Если бы я сделал еще один прогноз, так это то, что довольно скоро появится первоклассное решение для создания приложений Blazor как собственных мобильных приложений, аналогично тому, как сегодня создаются приложения React Native.

В заключение

Путь сюда был долгим. Хотя WebAssembly никогда не предназначался для замены JavaScript, я знал, что в тот момент, когда наша отрасль получила возможность разрабатывать собственные веб-приложения для браузера на своих любимых языках, это было лишь вопросом времени, когда разработчики начнут пробовать. Хотя Blazor начинался как сторонний проект с открытым исходным кодом за пределами ASP.NET, чтобы проверить, жизнеспособен ли он вообще, Microsoft предусмотрительно внедрила его в платформу и сделала его частью стека. У .NET динамичная экосистема, и найти работу C # несложно во многих местах мира. C # как язык продолжает развиваться и перенимать функции других языков, такие как сопоставление с образцом, выражения переключения и создание ссылок, не допускающих значения NULL по умолчанию. С появлением Blazor C # и .NET в Интернете наверняка ждет очень яркое и захватывающее будущее.