روش های ترجمه در ASP.NET 2.0
ASP.NET به همراه خود يك مدل ترجمه را ارائه داده است كه در آن اسمبلی ها به صورت پويا ترجمه می گردند . برنامه همواره به عنوان يك نسخه ترجمه شده ( با هدف افزايش كارآئی ) اجراء می گردد .
ASP.NET از سه روش مختلف برای ترجمه برنامه های وب استفاده می كند :
- Classic precompilation : اين مدل ترجمه همزمان با عرضه اولين نسخه ASP.NET ارائه گرديد . در اين روش ، بخش هائی از وب سايت نظير فايل های code-behind و هر نوع اسمبلی مرجع ترجمه و بخش هائی ديگر نظير فايل های حاوی تگ (فايل های aspx . ، و ASMX ) در زمان اجراء و همزمان با اولين مرتبه درخواست ، بطور پويا ترجمه می شوند . از مدل فوق صرفا" به همراه مدل code-behind سنتی كه در آن صفحه واقعی از كلاس پايه ترجمه شده به ارث رسيده باشد ، می توان استفاده كرد.
در روش فوق ، فايل های code-behind به اسمبلی ترجمه و در دايركتوری bin / قرار می گيرند و فايل های aspx . بر اساس نياز و درخواست ترجمه می شوند .
- Dynamic compilation : اين مدل ترجمه همزمان با عرضه اولين نسخه ASP.NET 2.0 ارائه گرديد و در آن برنامه به همراه تمامی تگ ها و فايل های كد منبع بر روی سرويس دهنده وب بكارگرفته شده و ASP.NET بطور كامل ترجمه را به صورت پويا و on the fly انجام می دهد . ايجاد تغييرات در فايل های حاوی تگ ها و يا فايل های كد منبع به صورت on the fly از مهمترين ويژگی های روش فوق است . در چنين مواردی ، برنامه بطور اتوماتيك و پس از بروز هر گونه تغيير ترجمه می گردد .
با توجه به اين كه ترجمه پويا همزمان با اولين درخواست انجام می شود ، همواره برای پاسخ به اولين درخواست پس از اعمال تغيير در كد مدت زمان بيشتری نسبت به درخواست های بعدی صرف خواهد شد .
- Site precompilation : در ASP.NET 2.0 يك مدل جديد برای ترجمه precompilation ارائه شده است كه اجازه می دهد تمامی وب سايت را به باينری ترجمه كرد .
در اين روش می بايست قبل از بكارگيری يك پروژه در ابتدا آن را بطور كامل ترجمه نمود . در اين مدل تمامی فايل های code-behind ، صفحات aspx . ، فايل های Html ، منابع گرافيكی و ساير عناصر موجود در back-end به يك و يا چندين اسمبلی قابل اجراء ترجمه می گردند . مدل فوق ، دارای بالاترين سطح كارآئی و امنيت است ولی امكان تغيير محتويات وب سايت در زمان فعال بودن سايت را نمی دهد . اين مدل ، برای سايت هائی كه فركانس بهنگام سازی آنها اندك است و خواستار امنيت بالائی می باشند مناسب است .
در زمان ايجاد يك وب سايت جديد ، ASP.NET به صورت پيش فرض گزينه Dynamic compilation را انتخاب می نمايد . اين بدان معنی است كه تمامی كد و صفحات به عنوان فايل های حاوی كد و تگ بر روی سيستم فايل سرويس دهنده وب ذخيره می گردند و ASP.NET بطور اتوماتيك آنها را ترجمه خواهد كرد . در چنين مواردی ، پاسخ به اولين درخواست نيازمند صرف زمان بيشتری است تا ASP.NET بتواند تمامی صفحه را ترجمه نمايد .
برای site precompilation ، می بايست از يك ابزار جداگانه با نام aspnet_compiler.exe جهت ترجمه برنامه وب استفاده كرد. كمپايلر فوق در دايركتوری Microsoft .NET Framework قرار دارد و می بايست در ابتدا از آن بر روی ماشين تست و پياده سازی استفاده كرد و در ادامه خروجی را بر روی ماشين عملياتی بكار گرفت .
كمپايلر فوق چندين فايل را در دايركتوری مقصد ايجاد می نمايد . در صورتی كه دقيق تر محتويات يكی از فايل های aspx . را بررسی نمائيم ، مشاهده خواهيم كرد كه فايل فوق حاوی هيچگونه تگ مفيدی نمی باشد و صرفا" شامل اطلاعات زیر است :
"This is a marker file generated by the precompilation tool, and should not be deleted!"
تمامی كد واقعی و تگ ها به باينری ترجمه و در دايركتوری Bin قرار داده می شوند . پس از اين كار می توان محتويات و ساختار دايركتوری ايجاد شده را بر روی ماشين مقصد بكار گرفت و دايركتوری فوق را به عنوان دايركتوری مجازی پيكربندی تا شرايط اجرای برنامه فراهم گردد .
مفهوم page class در ASP.NET
پس از درخواست يك صفحه ASP.NET از سرويس دهنده و به منظور پاسخ گوئی به كاربران، می بايست در سمت سرويس دهنده پردازش های متعددی صورت پذيرد . كدی كه در سمت سرويس دهنده اجراء می گردد منحصرا" كدی نيست كه توسط پياده كننده ايجاد شده است . در مقابل ، ASP.NET در زمان اجراء يك و يا چندين كلاس را كه دقيقا" عمليات مورد نظر را انجام خواهد داد توليد و ترجمه می نمايد .
يك صفحه ASP.NET به عنوان يك unit اجراء و شامل عناصر سمت سرويس دهنده موجود در صفحه ( نظير كنترل ها ) و كد مربوط به event-handlers است كه توسط پياده كننده نوشته شده است . پياده كنندگان مجبور نيستند كه صفحات را از قبل به اسمبلی ترجمه نمايند . ASP.NET بطور پويا صفحات را ترجمه و آنها را در اولين مرتبه ای كه توسط يك كاربر درخواست می گردند ، ترجمه می نمايد . در صورتی كه در صفحه و ساير منابع مربوط به آن تغييراتی ايجاد شده باشد ، صفحه بطور اتوماتيك مجددا" ترجمه می گردد .
كلاس و يا كلاس هائی كه توسط كمپايلر ايجاد می گردد به نوع كدينگ ( مدل Inline code و يا code-behind ) بستگی دارد .
مدل Inline code
در اين مدل ، تگ ها و عناصر سمت سرويس دهنده به همراه كد مربوط به event-handler در يك فايل با انشعاب aspx . قرار می گيرد . كمپايلر يك كلاس جديد را كه مشتق شده از كلاس page و يا يك كلاس پايه سفارشی تعريف شده توسط خصلت Inherits دايركتيو Page@ را توليد و ترجمه می نمايد .
مثلا" در صورتی كه دارای يك صفحه وب ASP.NET با نام SamplePage1 در فهرست ريشه برنامه وب باشيم ، يك كلاس جديد با نام ASP.SamplePage1_aspx از كلاس Page مشتق می گردد . برای صفحات موجود در فولدرهای برنامه ، از نام فولدر به عنوان بخشی در نام كلاس توليد شده استفاده می گردد . كلاس توليد شده شامل تعاريف كنترل های موجود در صفحه aspx .، كد های سفارشی و event handlers است .
پس از توليد صفحه ، كلاس ايجاد شده به يك اسمبلی ترجمه و پس از استقرار در application domain ، امكان اجرای آن به منظور توليد خروجی مورد نظر جهت ارسال برای مرورگر فراهم می گردد . در صورتی كه در صفحه تغييراتی داده شود كه بر روی كلاس توليد شده تاثير بگذارد ( نظير افزودن كنترل های جديد و تغيير در كد ) ، كلاس ترجمه شده غيرمعتبر شده و يك كلاس جديد ايجاد می گردد .
شكل 1 ، مدل توارث برای page class در صفحات وب ASP.NET كه از مدل inline code ( يا تك فايل ) استفاده می كنند را نشان می دهد .

شكل 1 : مدل توارث page class در inline code صفحات code-Behind
در مدل code-Behind ، تگ های صفحه به همراه عناصر سمت سرويس دهنده ( شامل تعاريف كنترل ها ) در يك فايل aspx . ذخيره می گردند و كد صفحه در يك فايل جداگانه ديگر قرار می گيرد . فايل حاوی كد شامل يك partial class است (تعريف يك كلاس با استفاده از كليد واژه Partial ) . وپژگی فوق اين موضوع را به اثبات می رساند كه فايل فوق صرفا" شامل بخشی از تمام كدی است كه كلاس كامل صفحه را ايجاد می نمايد . در partial class ، كد مورد نياز برنامه كه عمدتا" شامل event handlers است به آن اضافه می گردد ( امكان اضافه كردن متدها و يا خصلت هائی ديگر با توجه اهداف عملياتی يك صفحه نيز وجود دارد ) .
مدل توارث برای صفحات code-behind نسبت به صفحات Inline code از پيچيدگی بيشتری برخوردار است :
- فايل code-Behind شامل يك partial class است كه از كلاس پايه صفحه به ارث می رسد . كلاس پايه صفحه می تواند كلاس Page و يا كلاس ديگری باشد كه از كلاس Page مشتق شده است.
- فايل aspx . شامل يك خصلت Inherits در دايركتيو Page@ است كه به كلاس partial مربوط به code-behind اشاره می نمايد .
- پس از ترجمه صفحه ، ASP.NET يك partial class را بر اساس فايل aspx . ايجاد می نمايد . اين كلاس ، يك partial class از فايل كلاس code-behind است . فايل partial class توليد شده شامل تعاريف كنترل های صفحه است . اين partial class فايل code-behind را قادر می سازد كه به عنوان بخشی از يك كلاس كامل و بدون الزام پياده كنندگان به تعريف صريح كنترل ها استفاده گردد.
- در نهايت ، ASP.NET كلاس ديگری را توليد كه از كلاس توليد شده در مرحله سوم به ارث رسيده است . اين كلاس توليد شده جديد شامل كد مورد نياز برای ايجاد صفحه است . كلاس توليد شده فوق و كلاس code-behind درون يك اسمبلی ترجمه تا پس از اجراء خروجی مورد نياز جهت ارسال برای مرورگر را توليد نمايد .
شكل 2 مدل توارث برای page class در يك صفحه وب ASP.NET كه از مدل code-Behind استفاده می كند را نشان می دهد .

شكل 2 : مدل توارث page class در code-Behind در بخش سوم به بررسی سه پرسش اساسی در خصوص ماهيت مدل كدينگ در ASP.NET خواهيم پرداخت .
علاقه مندی ها (Bookmarks)