مایکروسافت در رویداد توسعهدهندگان Build اخیر خود اعلام کرد که چارچوب (Framework) بلیزر (Blazor) به عنوان سرمایهگذاری اصلی این شرکت در حوزه رابط کاربری وب (Web UI) برای ایاسپیداتنتکور (ASP.NET Core) شناخته میشود. این تصمیم علیرغم محبوبیت مستمر چارچوبهای قدیمیتر مانند ایاسپیداتنت امویسی (ASP.NET MVC) و صفحات ریزر (Razor Pages) اتخاذ شده است. مقاله حاضر به بررسی جامع این تغییر استراتژیک و پیامدهای آن برای توسعهدهندگان داتنت میپردازد.
معرفی Blazor و جایگاه آن در اکوسیستم داتنت
بلیزور (Blazor) یک پشته (Stack) کامل است که به توسعهدهندگان امکان میدهد از داتنت (.NET) و سیشارپ (#C) هم در سمت سرور (Server) و هم در سمت کلاینت (Client) در مرورگر استفاده کنند. این رویکرد، توسعه تمامپشته (Full-stack) را با یک زبان و اکوسیستم واحد تسهیل میکند. گونه دیگری از بلیزر با نام بلیزر هایبرید (Blazor Hybrid) نیز وجود دارد که در آن اپلیکیشنهای موبایل (Mobile) و دسکتاپ (Desktop) از یک کنترل نمای وب (Web view control) برای اجرای اپلیکیشنهای بلیزور بهره میبرند. اپلیکیشنهای بلیزر هایبرید قابلیت جاسازی در چارچوبهای دیگری نظیر داتنت مایو (NET MAUI.) که مخفف (Multi-platform app UI) است، دبلیوپیاف (WPF) که مخفف (Windows Presentation Foundation) است و ویندوز فرمز (Windows Forms) را دارا هستند. این انعطافپذیری، بلیزر را به گزینهای جذاب برای طیف وسیعی از پروژهها تبدیل کرده است.
چشمانداز آینده: قابلیتهای جدید در داتنت ۱۰
در یک جلسه تخصصی در رویداد Build با عنوان "آینده ASP.NET Core و Blazor"، مدیران اصلی برنامه، دنیل راث (Daniel Roth) و مایک کیستلر (Mike Kistler)، به تشریح ویژگیهای آتی در داتنت ۱۰ (.NET 10) پرداختند. داتنت ۱۰ به عنوان یک نسخه با پشتیبانی بلندمدت (LTS) شناخته میشود و انتظار میرود در نوامبر منتشر شود. از جمله قابلیتهای برجسته این نسخه میتوان به موارد زیر اشاره کرد:
اولین ویژگی قابل توجه، اضافه شدن قابلیت آزادسازی حافظه (Memory trimming) به وب سرور Kestrel (Kestrel web server) است که توسط ASP.NET Core استفاده میشود. تا پیش از این، Kestrel قادر به انجام این کار نبود و حافظه تخصیصیافته در زمان اوج بار کاری، حتی پس از کاهش تقاضا، همچنان در اشغال باقی میماند. این بهبود میتواند تأثیر مثبتی بر عملکرد و بهرهوری منابع در اپلیکیشنهای وب داشته باشد.
ویژگی مهم دیگر، پشتیبانی از احراز هویت (Authentication) مبتنی بر WebAuthN و Passkey است. مایکروسافت این قابلیت را به صورت داخلی در داتنت ۱۰ تعبیه خواهد کرد و پشتیبانی از داربستبندی (Scaffolding) آن را نیز در واسط خط فرمان داتنت (NET CLI.) و همچنین در ویزاردهای ویژوال استودیو (Visual Studio) فراهم خواهد آورد. به گفته کیستلر، این پشتیبانی جدید از یک کتابخانه (Library) شخص ثالث موجود به نام fido2-net-lib الهام گرفته خواهد شد، هرچند به دلایلی که کاملاً روشن نیست، از تمام بخشهای این کتابخانه استفاده نخواهد شد. این دلایل ممکن است شامل ویژگیهایی باشد که پشتیبانی نخواهند شد، مانند قابلیت تعیین اینکه یک طرف متکی (Relying party) کدام احراز هویتکنندهها را میپذیرد. علاوه بر این، مایکروسافت ابزارهایی برای بهروزرسانی اپلیکیشنهای موجود با پشتیبانی از Passkey برای چارچوبهایی چون ASP.NET Core، Blazor Hybrid و .NET MAUI ارائه خواهد داد.
از دیگر بهبودهای وعده داده شده در داتنت ۱۰ میتوان به پروفایلسازی (Profiling) مبتنی بر مرورگر برای اپلیکیشنهای Blazor WebAssembly، معیارهای (Metrics) اضافی برای احراز هویت (Authentication) و مجوزدهی (Authorization)، ابزارهای تشخیصی (Diagnostic tools) پیشرفتهتر برای Blazor WebAssembly، و deserialization جیسان (JSON deserialization) سریعتر اشاره کرد. همچنین، پشتیبانی از پچکردن جیسان (JSON patching) در کتابخانه System.Text.Json افزوده خواهد شد که این ویژگی ممکن است به توسعهدهندگان در مهاجرت از کتابخانه قدیمیتر اما همچنان محبوب Newtonsoft.Json کمک کند. بهبود عملکرد Blazor در داتنت ۱۰ نیز از طریق پیشبارگذاری منابع WebAssembly (WebAssembly resources) و فعالسازی کشینگ مرورگر (Browser caching) بیشتر برای داراییهای Blazor مورد انتظار است.
رهنمودهای مایکروسافت برای انتخاب چارچوب و توسعه اپلیکیشنها
انتخاب چارچوب برای یک اپلیکیشن جدید، یک تصمیم بلندمدت برای توسعهدهندگان است و آنها علاقهمندند بدانند کدام چارچوب در آینده بهترین پشتیبانی را خواهد داشت. به گفته راث، مایکروسافت اکنون بلیزور را "جامعترین و منعطفترین پیشنهاد رابط کاربری وب برای داتنت" میداند. اگرچه پشتیبانی از ASP.NET Core MVC و Razor Pages ادامه خواهد یافت، اما تمرکز آینده بر روی بلیزور خواهد بود.
در سمت سرور، کیستلر اظهار داشت که "APIهای حداقلی (Minimal APIs) با System.Text.Json جایگاه مناسبی برای سرمایهگذاریهای استراتژیک هستند." APIهای حداقلی یک رویکرد سادهشده برای ساخت APIهای HTTP هستند و میتوانند از ویژگیهایی مانند کامپایل پیش از موعد (AOT compilation) بهرهمند شوند که برای اپلیکیشنهایی که از چارچوب Web API مبتنی بر کنترلر (Controller-based Web API) قدیمیتر استفاده میکنند، در دسترس نیستند.
نکته دیگری که کیستلر ارائه داد این بود که "تمام اپلیکیشنهای وب شما در آینده باید مبتنی بر Aspire باشند." Aspire پروژهای برای کمک به توسعه و استقرار اپلیکیشنهای توزیعشده کانتینری (Containerised distributed applications) است.
استفاده داخلی از Blazor در مایکروسافت و دلایل آن
کیستلر و راث اشاره کردند که مایکروسافت به طور گسترده از ASP.NET Core به صورت داخلی استفاده میکند و آن را برای سرویسهایی مانند Microsoft 365، خدمات Xbox (Xbox services) و اکثر خدمات Azure (Azure services) به کار میگیرد. با این حال، همین امر در مورد بلیزور صادق نیست و استفاده داخلی از آن محدودتر است. به عنوان مثال، مایکروسافت آفیس (Microsoft Office) از React و React Native استفاده میکند که باعث شده برخی نسبت به تعهد این شرکت به بلیزر تردید کنند.
هنگامی که داتنت ۹ منتشر شد، نیک چاپساس (Nick Chapsas)، توسعهدهنده داتنت و پادکستر، از راث در این مورد سؤال کرد. راث دو دلیل اصلی برای استفاده کم از بلیزر در مایکروسافت، به ویژه برای اپلیکیشنهای عمومی مانند آفیس، ارائه داد. دلیل اول تاریخی است؛ زمانی که آفیس برای اولین بار React را پذیرفت، بلیزر هنوز در دسترس نبود. دلیل دوم اما روشنگرتر است. به گفته راث، بلیزر برای حل مشکل نیاز توسعهدهندگان داتنت به دانش عمیق جاوااسکریپت (JavaScript) طراحی شده است، مشکلی که او آن را "هزینه و بار نیاز به پل زدن بین اکوسیستمهای توسعهدهنده متعدد" نامید. او افزود که پلتفرم داتنت برای استفاده در سرور به خوبی بهینهسازی شده است و بلیزور تیمها را قادر میسازد تا از آن در مرورگر نیز استفاده کنند. بلیزر زمانی ارزش افزوده ایجاد میکند که "نیاز به انجام کارهای بیشتر بدون یک تیم فرانتاند جاوااسکریپت جداگانه" وجود داشته باشد.
راث اذعان داشت که شرکتهایی به بزرگی مایکروسافت از قبل تیمهای فرانتاند متخصص در جاوااسکریپت یا تایپاسکریپت (TypeScript) دارند، که این امر جذابیت بلیزر را برای آنها کمتر میکند، زیرا بلیزر دارای مقداری سربار (Overhead) است. این دیدگاه نشان میدهد که مایکروسافت بلیزر را بیشتر به عنوان ابزاری برای توانمندسازی تیمهای داتنت موجود برای پوشش کامل چرخه توسعه وب میبیند تا جایگزینی برای چارچوبهای جاوااسکریپت در سازمانهایی با منابع گسترده در حوزه فرانتاند.