تمت الإجابة على أسئلة Blazor: الأمان ودعم المتصفح والمزامنة والمزيد

إذا كانت أطر العمل مثل Angular تشعر بأنها شديدة الانحدار في منحنى التعلم بحيث لا يمكنك التعامل معها، فقد يكون الوقت قد حان للتحقق من Blazor.
يسمح لك Blazor، وهو إطار عمل Microsoft، ببناء نفس التجارب الغنية في المتصفح مع الاعتماد بشكل كامل على C# وHTML، باستخدام بناء جملة مشابه جدًا لتطوير ASP.NET.
لقد طلبنا مؤخرًا من مهندس الحلول ومؤلف Pluralsight Gill Cleeren الإجابة على العديد من الأسئلة الشائعة التي يطرحها المطورون حول استخدام Blazor والبناء معه.
س: هل يدعم Blazor جميع المتصفحات الرئيسية اليوم؟
ج: يعتمد الأمر حقًا على طراز استضافة Blazor الذي ستستخدمه. إذا كنت تخطط لاستخدام Blazor WebAssembly (WASM)، فإن متصفحك يحتاج إلى دعم WASM.
وهذا هو الحال بالنسبة لجميع المتصفحات الحديثة، بما في ذلك متصفحات الهاتف المحمول. سيتم تشغيل تطبيق Blazor WASM الخاص بك بشكل جيد على Chrome وEdge وFirefox وSafari وأيضًا على إصدارات الأجهزة المحمولة منها.
ومع ذلك، لا يدعم Internet Explorer WASM وبالتالي لا يمكنه تشغيل تطبيقات Blazor من جانب العميل. إذا كان هذا مهمًا لحالتك، فلا يزال بإمكانك استخدام خادم Blazor.
في هذه الحالة، يتم تنفيذ التعليمات البرمجية على الخادم ومن ثم لن يكون هناك دعم من جانب العميل مطلوب لـ WASM.
س: كيف يمكنك الاختيار بين Blazor أو Xamarin لتطبيقات الهاتف المحمول؟ ما هي الاعتبارات؟
ج: أستخدم Xamarin في معظم مشاريع تطوير الأجهزة المحمولة، نظرًا لأنه يوفر لي القدرة على إنشاء تطبيقات الهاتف المحمول الأصلية باستخدام إما Xamarin.Forms أو Xamarin الأصلي.
هناك بالتأكيد منحنى تعليمي عند اتباع مسار Xamarin، لأنك تقوم ببناء تطبيق أصلي.
إذا اخترت Xamarin.Forms، فسوف تستخدم XAML وC# (أو C# فقط). من ناحية الأداء، تعد هذه التطبيقات هي الأفضل في فئتها – وبما أنها تطبيقات أصلية، فهي قادرة على الوصول إلى جميع ميزات الجهاز بما في ذلك أجهزة الاستشعار والتخزين والكاميرا وما إلى ذلك.
تطبيقات Blazor هي تطبيقات ويب وبالتالي يتم تنفيذها على هذا النحو، ولكن من الممكن إنشاء تطبيق ويب تقدمي (PWA) باستخدام Blazor.
في تطبيقات PWA التي أنشأتها باستخدام Blazor، نقوم ببناء التطبيق مع دعم دون اتصال بالإنترنت، بحيث تستمر هذه الميزات في العمل بشكل جيد.
فيما يتعلق بالاستفادة من المعرفة، يستخدم Blazor HTML وC#، وبالتالي فإن منحنى التعلم أصغر كثيرًا. بالطبع، كونه PWA، هناك حدود لما يمكن أن يفعله التطبيق على الجهاز فيما يتعلق بالوصول إلى الميزات الأصلية.
هناك تجارب مثيرة للاهتمام جارية لتطوير Blazor لتطبيقات الهاتف المحمول الأصلية باستخدام Mobile Blazor Bindings، والتي قد تثبت وجود مستقبل حيث يمكن استخدام Blazor لإنشاء تطبيقات الهاتف المحمول الأصلية.
س: كيف يتم استخدام الموارد من جانب العميل عند تشغيل تطبيق Blazor، خاصة عند استخدام شيء مثل Silverlight؟
ج: لم أواجه أي مشاكل معها حتى الآن. التطبيق الذي أقوم بإنشائه حاليًا باستخدام Blazor كبير جدًا ويستخدم الكثير من الميزات – البيانات غير المتصلة بالإنترنت، والمزامنة، والكثير من الشاشات – ويعمل بشكل جيد حقًا، حتى على الأجهزة المحمولة ذات المواصفات المنخفضة.
لقد قمت بالكثير من استخدام Silverlight في الماضي ولا أستطيع تذكر أي مشكلات كبيرة به فيما يتعلق بالذاكرة أو استخدام الموارد.
س: ما الذي تراه برامج الزحف المضمنة داخل Blazor، إن وجد؟ هل يؤثر هذا على تحسين محركات البحث؟
ج: يجب أن تعتبر Blazor أداة لبناء تطبيقات الويب. تطبيقات الويب ثقيلة على العرض من جانب العميل.
ومن هذا المنظور، فإن تطبيقات Blazor هي نفس تطبيقات Angular أو Vue: فهي تركز على جانب التطبيق، وليس جانب المحتوى. بالنسبة لهذه الأنواع من التطبيقات، لا يعد تحسين محركات البحث وإمكانية اكتشاف المحتوى أمرًا مهمًا.
س: ما هو عدد الاتصالات المتزامنة الممكنة نظرًا لأن الخادم يحتفظ بالتطبيق في الذاكرة لجميع العملاء؟
ج: تتوقع أن يحتاج Blazor من جانب الخادم إلى قدر كبير من الذاكرة لتشغيل التطبيق لجميع المستخدمين. وتبين أن هذا ليس هو الحال.
باستخدام تطبيق Blazor العادي ومثيل D1 V2 القياسي في Azure (الذي يتوفر به ذاكرة بسعة 3.5 جيجابايت)، يمكن للخادم التعامل بسهولة مع 5000 مستخدم متزامن.
قم بزيادة ذلك إلى 14 جيجابايت من الذاكرة ويمكنه التعامل مع 20000 مستخدم متزامن. يمكنك العثور على مزيد من المعلومات هنا.
س: كيف يمكنك تمرير القيم من صفحة إلى أخرى في WASM؟
ج: يستطيع Blazor تمرير المعلمات عبر سلسلة الاستعلام، وسيتم التقاط هذه المعلمات بواسطة الصفحة المستهدفة. في الصفحة المستهدفة، يمكنك بعد ذلك استخدام السمة [المعلمة] للوصول إلى القيمة.
ومع ذلك، يمكنك فقط تمرير قيم سلسلة بسيطة من خلال سلسلة الاستعلام.
ضع في اعتبارك أيضًا أن التطبيق يعمل على العميل، لذا يمكن لصفحاتك المختلفة الوصول إلى نفس الكائنات في الذاكرة. هذا يعني أنه يمكنك القيام بإدارة الحالة، حيث تقوم بتخزين بيانات التطبيق والوصول إليها من أي صفحة.
س: هل يعمل تطبيق Blazor في وضع عدم الاتصال؟ عندما تصبح الشبكات متاحة، هل يمكن مزامنة البيانات مع الخادم؟
ج: عندما يتم تنزيل تطبيقات Blazor (WebAssembly) إلى متصفح العميل، فيمكن تشغيلها على العميل دون الاتصال بالواجهة الخلفية.
إذا قمت بتصميم تطبيقك بحيث يمكنه القيام بذلك، فيمكن أن يعمل بكامل طاقته ويعمل مع البيانات محليًا.
مع القليل من المساعدة من JavaScript، يستطيع Blazor أيضًا اكتشاف ما إذا كان اتصال الشبكة متاحًا أم لا.
عادةً ما أقوم بإنشاء تطبيقات حتى نتمكن من الرجوع إلى العمل محليًا، وبمجرد توفر الاتصال مرة أخرى، تتم مزامنة البيانات المحلية مع الواجهة الخلفية.
يتطلب هذا بعض التفكير مقدمًا، نظرًا لأن تطبيقك (أثناء العمل دون اتصال بالإنترنت) لن يتمكن من الاتصال بالواجهة الخلفية للحصول على بيانات محدثة.
س: هل من الممكن لـ Blazor WebAssembly الاتصال بـ SQL Server أو قواعد البيانات الأخرى؟
ج: يعمل Blazor على العميل؛ إنه رمز .NET. سيتم تنزيل كود IL إلى جانب العميل، مما يعني أنه من الممكن إجراء هندسة عكسية.
وهذا يعني أنه لا ينبغي عليك أبدًا وضع أي أسرار (مثل كلمات المرور) في كود Blazor WASM الخاص بك.
من أجل الاتصال بقاعدة بيانات بعيدة، سيحتاج تطبيق Blazor الخاص بك إلى الاتصال باستخدام مجموعة اسم المستخدم وكلمة المرور، والتي لا يمكن تخزينها إلا في التطبيق. سيكون ذلك بمثابة خطر أمني كبير، لذا لا تفعل ذلك!
وبدلاً من ذلك، يجب ألا تتمكن من الوصول إلى البيانات البعيدة إلا من خلال طبقة وصول يمكن التحكم فيها: وهي الخدمة.
قم بإنشاء واجهة برمجة تطبيقات الخدمة (مثل REST، على سبيل المثال) حول قاعدة البيانات الخاصة بك والتي تكشف عن العمليات التي تريد الكشف عنها.
في واجهة برمجة التطبيقات هذه، يمكنك بعد ذلك العمل مع رموز الأمان للتأكد من أن المستخدمين المصرح لهم فقط هم من يمكنهم الوصول إلى واجهة برمجة التطبيقات، وبالتالي بياناتك.
س: ما النموذج الذي توصي به لتطبيقات LOB — العميل WASM أو جانب الخادم؟
ج: لدي المزيد من الخبرة الشخصية في العمل من جانب العميل، حيث أن ذلك قدم لي المزيد من الخيارات لنوع التطبيقات التي قمت بإنشائها باستخدامها (مع كون الدعم دون اتصال بالإنترنت هو أهم الاعتبارات على الأرجح).
بالنسبة للسيناريوهات الأخرى، أنا متأكد من أن جانب خادم Blazor يمكن أن يكون حلاً أيضًا، لكنه يعتمد حقًا على ما تتوقعه من إطار العمل.
س: هل قوالب Blazor متوفرة في Visual Studio لنظام التشغيل Mac؟
ج: نعم. يمكنك اختيار إنشاء تطبيقات Blazor باستخدام جهاز Mac. أستخدم Visual Studio في معظم الأوقات، ولكن يمكن أيضًا استخدام VS Code لإنشاء تطبيقات Blazor. وهذا يعمل على نظام Mac أيضًا.
س: كيف يتم تنفيذ التخزين من جانب العميل؟
ج: يتم تشغيل WebAssembly (وبالتالي Blazor أيضًا) ضمن نفس سياق الأمان مثل JavaScript، لذا يمكنه فعل الكثير فقط على النظام المحلي. وهذا أمر جيد، وإلا فإنه يشكل خطرا أمنيا.
ومع ذلك، ليس لدى Blazor إمكانات مدمجة لتخزين البيانات المحلية في هذه المرحلة.
ولكن نظرًا لأنه يمكننا الوصول إلى ما هو متاح داخل المتصفح بالفعل من Blazor، فيمكننا أيضًا الوصول إلى التخزين المحلي، المتاح من JavaScript.
من خلال التشغيل المتداخل لـ JavaScript، يمكننا بسهولة تخزين البيانات محليًا باستخدام واجهة برمجة التطبيقات المضمنة هذه.
س: هل Blazor جاهز لتطبيقات الإنتاج؟
ج: أود أن أقول نعم. لقد قمت بإنشاء تطبيقات باستخدامه لبعض الوقت، حتى قبل إصداره.
س: ما هي فوائد Blazor مقارنة باستخدام Angular؟
ج: تتمتع Angular بميزات رائعة وإطار عمل رائع، ولكن قد يكون من الصعب تعلمها، خاصة إذا لم يكن لديك الكثير من الخبرة في JavaScript.
مع Blazor، يمكنك استخدام ما تعرفه بالفعل كمطور .NET (C# و.NET Core) لبناء نفس تجربة SPA لمستخدميك.
المصدر: pluralsight
شاهد المزيد: