تجميع المقاود-ترجمة إلى رمز C# الأصلي لتصوير HTML Serverside Serverside.
هذا المترجم هو نتيجة أطروحة البكالوريوس من جاكوب ديميلر التي تغطي النهج وقرارات التصميم وتفاصيل التنفيذ وتقييمها ويمكن العثور عليها هنا
هذا المشروع حاليا في مرحلة تجريبية.
تم إجراء مقارنة بين الأداء مع علامات microbenchmrks من مستودع المقابض.
| Microbenchmark | المقود | compiledHandleBars | تسريع |
|---|---|---|---|
| صفيف | 391 OPS/MS | 3039 OPS/MS | 7.77 |
| معقد | 120 OPS/MS | 1180 OPS/MS | 9.83 |
| بيانات | 295 OPS/MS | 1333 OPS/MS | 4.51 |
| العمق 1 | 228 OPS/MS | 3693 OPS/MS | 16.20 |
| عمق 2 | 63 OPS/MS | 1515 OPS/MS | 24.04 |
| قرار جزئي | 125 OPS/MS | 1895 OPS/MS | 15.16 |
| جزئي | 211 OPS/MS | 905 OPS/MS | 4.29 |
| مسارات | 2060 OPS/MS | 4646 OPS/MS | 2.25 |
| خيط | 5563 OPS/MS | 13964 OPS/MS | 2.51 |
| المتغيرات | 1991 OPS/MS | 4027 OPS/MS | 2.02 |
ما عليك سوى تثبيت حزمة VSIX من مشروع CustomTool وإعادة تشغيل Visual Studio. أضف قالب مقاود جديد إلى الحل الخاص بك (ينتهي على .hbs) ثم أضف "BillidBarsCompiler" إلى خاصية CustomTool الخاصة بالملف. سيتم استدعاء برنامج التحويل البرمجي في كل مرة يتم حفظ قالب المقود وسيقوم بإنشاء ملف {templatename} .hbs.cs يحتوي على الرمز الذي تم إنشاؤه.
كل مقاود-تحتاج إلى نوع يقدمه. كمثال على ذلك ، سيخدم فصل يسمى "ProfireModel":
namespace ViewModels
{
public class PersonModel
{
public string FirstName { get ; set ; }
public string LastName { get ; set ; }
public int Age { get ; set ; }
public List < string > EMailAddresses { get ; set ; }
}
}الآن ، يجب علينا توصيل النوع إلى المقود. في بداية كل مقود ، يجب أن يكون هناك طراز اجتماعي:
على سبيل المثال ، سيكون ذلك:
لاحظ أن النوع الموجود داخل طراز TodalToken يمكن أن يكون أيضًا فئة أساسية أو واجهة لنظام ViewModel الفعلي الذي يتم تمريره إلى القالب.
يتبع بقية المقاود المسلمين بناء جملة المقاود القياسية والدلالات. هذا هو المثال الكامل:
الجزأين لا تحتاج إلى التسجيل. فقط تأكد من تجميع الجزئي قبل المقاود التي تستخدم هذا الجزئي. لكل شيء آخر ينطبق منطق المقود.
complistHandleBars تسمح باستخدام وظائف المساعد. يجب أن تكون هذه ثابتة ، وإرجاع سلسلة ويتم شرحها بواسطة سمة. يتم فحص المعلمات إذا كانت متطابقة في وقت الترجمة بحيث يكون التحميل الزائد ممكنًا. بخلاف ذلك ، ليس لديهم أي قيود يمكن وضعها في أي مكان في قاعدة الشفرة الخاصة بك.
[ CompiledHandlebarsHelperMethod ]
pulic static string FullName ( PersonModel model )
{
return string . Concat ( model . FirstName , " " , model . LastName ) ;
} يوفر CompiledHandleBars وظائف مختلفة فيما يتعلق بالتخطيطات: يمكن تقديم أي مسدّة عنصرية داخل مقود. يختلف مقودات المقاوم عن لوحات المقود العادية بسبب رمز خاص {body}}:
لتقديم مقابض في هذا التصميم ، استخدم الرمز المميز {{layout}} مباشرة بعد الرمز المميز {{model}}:
نتيجة هذا القالب تساوي القالب التالي:
نظرًا للنهج المختلفة لإصدار المقود. يتم توصيل هذه المعلومات إلى المترجم بواسطة طراز خاص. بناء الجملة واضح:
على سبيل المثال:
يجب أن يكون هذا الرمز المميز في بداية كل مقود.
هناك حاجة إلى المتطلبات المسبقة بعد أن تكون قادرًا على بناء الحل: