ASP.NET Precompilation – प्रत्येक ASP.NET Webpage को Runtime में Compilation के रूप में एक Extra Step से गुजरना पडता है, ताकि Web Browser के लिए Response के रूप में अन्तिम रूप से Return होने वाला Markup Generate हो सके।
जब हम Website Project Create करते हैं, तब हम Markup व Code-Behind File दोनों को ज्यों ता त्यों Deploy करते हैं तथा जब User इन Webpages की Request करता है, तब Requested Webpage Compile होता है। लेकिन जब हम Web Application Project Create करते हैं, तब हम Deployment के दौरान Markup Files के साथ Code-Behind Files नहीं, बल्कि Compiled Assemblies को Deploy किया जाता है।
जब हम Visual Studio का प्रयोग करते हुए Website Project को Publish करते हैं, तो हमारे सामने Web Application Project के दौरान Display होने वाले User Interface की तुलना में भिन्न User Interface Show होता है, जिसे Site Precompilation नाम के अलग नाम से Identify किया जाता है।
Site Precompilation एक ऐसी प्रक्रिया है, जिसके अन्तर्गत ASP.NET Runtime हमारी Web site के सभी Pages को Exactly उसी तरह से Programmatically Invoke करता है, जैसे कि उन्हें User द्वारा One-by-One Invoke किया गया हो। जहां User जब इन Pages की Request करता है, तो सभी Pages पहले से ही Programmatically Compiled होने की वजह से इस Compilation के दौरान लगने वाला समय बच जाता है।
साथ ही इस Precompilation के दौरान यदि कोई Error Trigger होता है, तो उस Error को भी User द्वारा Request Perform किए जाने से पहले ही Resolve किया जा सकता है, ताकि User को एक Error Free Web Experience प्राप्त हो।
Precompilation दो प्रकार के हो सकते हैं, जिन्हें In-Place Precompilation व Deployment Precompilation के नाम से जाना जाता है।
In-Place Precompilation
In-Place Precompilation के अन्तर्गत एक Tool हमारी ASP.NET Website के सभी Webpages को One-by-One Internally Request करता है, जिसके परिणामस्वरूप प्रत्येक Webpage पूरी तरह से Compile हो जाता है और User जब किसी Webpage के लिए Request करता है, तो उसे वह Precompiled Page Serve कर दिया जाता है। जिसकी वजह से User को First-Time Request Delay को Face नहीं करना पडता।
In-Place Precompilation सामान्यत: तब काम करता है, जब Website को Target Machine पर Deploy तो कर दिया जाता है, लेकिन Public के लिए वह Site Available नहीं होता। यानी User उस Website के Pages को Access करे, उससे पहले ही उस Website के सभी Pages को एक Tool द्वारा Target Deployed Machine पर Internally Compile कर दिया जाता है।
जबकि अपनी Website को Precompil करने के लिए हमें Command Prompt पर निम्नानुसार Statement को Use करना पडता है, जहां /myWebSiteProject हमारे Web Application के Virtual Folder को Represent कर रहा है:
aspnet_compiler –v/myWebSiteProject
जब हम ये Command Line Statement Use करते हैं, तब हमारा Website उसकी Default Location पर Deploy होता है। लेकिन यदि हम इसे किसी Specific Path पर Deploy करना चाहें, तो Deployment के लिए निम्नानुसार Path भी Specify कर सकते हैं।
aspnet_compiler –v/W3SVC/2/Root/myWebSiteProject
इस स्थिति में हमारा Website Project उस Website में Address होता है, जिसका ID 2 है।
यदि हम हमारी Website को एक बार Precompile करने के बाद फिर से Precompile करते हैं, तो उस स्थिति में Compiler उन Webpages को फिर से Compile नहीं करता, जो Up-to-Dateहोते हैं, बल्कि केवल उन्हीं Webpages को Compile करता है, जिनमें कोई Change किया गया होता है अथवा जो Pages किसी अन्य Changed Page पर Depend होते हैं। इस Optimization के कारण ही किसी Website में किसी भी प्रकार का Change करने के बाद उसे Compile किया जाना जरूरी होता है।
Precompilation एक Batch Compilation होता है, जो Server Machine की Fixed ASP.NET Directory में सभी जरूरी Assemblies Generate करता है। यदि Compilation के दौरान एक भी File का Compilation Fail हो जाता है, तो उस पूरे Application के लिए Precompilation Fail हो जाता हैं। ASP.NET Compiler Tool Target Directory को भी Support करता है। यदि हम इस Option को Select करते हैं, तो ये Tool उस Distinct Output Directory को भी Generate करता है, जिसे हमने Specify किया होता है। उसी Directory में सभी Deploy की जाने वाली Files होती हैं। इसलिए उसी Directory को Zip करके एक Zipped File के रूप में हम हमारी IIS Machine पर Manually Deploy कर सकते हैं।
Precompilation for Development
इस तरीके को Use करने पर हमारे Website का एक Deployment Representation तैयार होता है, जिसमें Assemblies, Static Files व Configuration Files (Manifest) होती हैं। ये Representation Target Machine पर Generate होता है और इसे एक MSI Fileके रूप में Packaged भी किया जा सकता है तथा इस Packaged MSI को Production Machine पर Copy करके Install भी किया जा सकता है।
इस तरीके का Precompilation Use करने पर हमें Target Machine पर अपनी Website के Source-Codes को Deploy करने की जरूरत नहीं होती, जैसाकि In-Place Precompilation के दौरान होता। इसलिए हमारी Web Site का Source Code पूरी तरह से सुरिक्षत रहता है।
Precompilation for Deployment को aspnet_compiler Command-Line Tool द्वारा भी Achieve किया जा सकता है और इसे Use करने का Common तरीका निम्नानुसार होता है:
aspnet_compiler–m metabasePath-c virtualPath-p physicalPathtargetPath
इस Command-Line Tool के साथ Use किए जा सकने वाले विभिन्न Supported Parameters निम्नानुसार हैं:
-aptca | यदि इस Switch को Specify किया गया हो, तो Compiled Assemblies, Partially Trusted Callers को Allow करता है। |
-c | यदि इस Switch को Specify किया गया हो, तो Precompiled Application पूरी तरह से Rebuild होता है। |
-d | यदि इस Switch को Specify किया गया हो, तो Precompilation के दौरान Debug Information को Output के रूप में Emit किया जाता है। |
-delaysign | यदि इस Switch को Specify किया गया हो, तो Precompiled Assemblies Createहोते समय पूरी तरह से Signed नहीं होती हैं। |
-errorstack | यदि इस Switch को Specify किया गया हो, तो Precompiled Assemblies के दौरान Extra Debugging Information Show होती हैं। |
-m | यदि इस Switch को Specify किया गया हो, तो Application का पूरा IIS Metabase Path Indicate होता हैं। |
-f | यदि इस Switch को Specify किया गया हो, तो Precompilation के दौरान यदि Target Directory पहले से Exist हो, तो उस Directory के सभी Existing Contents पूरी तरह से Overwrite होकर Lost हो जाते हैं। |
-fixednames | यदि इस Switch को Specify किया गया हो, तो Compiled Assemblies को एक Fixed Name दिया जाता हैं। |
-keycontainer | यदि इस Switch को Specify किया गया हो, तो Strong Names के लिए ये Parameter Key Container को Indicate करता हैं। |
-keyfile | यदि इस Switch को Specify किया गया हो, तो Strong Names के लिए ये Parameter Key File को Indicate करता हैं। |
-p | यदि इस Switch को Specify किया गया हो, तो Compile किए जाने वाले Application के Physical Path को ये Parameter Indicate करता है। यदि ये Switch Missing हो, तो IIS Metabase का प्रयोग Application को Locate करने के लिए किया जाता है। इस Switch को हमेंशा–v Switch के साथ Combined रूप से ही Use किया जाना चाहिए। |
-u | यदि इस Switch को Specify किया गया हो, तो ये Parameter इस बात को Indicate करता हैं कि Precompiled Application Updatable है। |
-v | यदि इस Switch को Specify किया गया हो, तो ये Parameter Compile किए जाने वाले Application के Virtual Path को Indicate करता हैं। जबकि यदि कोई Virtual Path Specify न किया गया हो, तो Application को Default Site (W3SVC/1/Root)माना जाता है। |
यदि कोई Target Path Specify न किया गया हो, तो Precompilation, Application के Virtual Path में Perform होता है और इसीलिए Source Files Preserved रहती हैं। जबकि यदि Different Target को Specify किया गया हो, तो केवल Assemblies ही Copy होती हैं और हमारा Application Production Environment में बिना Source-Files के Run होता है।
उदाहरण के लिए यदि हम myWebProject Application को इस तरीके से Precompile करना चाहें, तो हमारा Command-Line Parameter निम्नानुसार हो सकता है:
aspnet_compiler –v /myWebProject C:\inetpub\www\DeployedWebSite
Static Files (Images, Web.config, HTML Pages, etc…) Compile नहीं होते, बल्कि वे केवल Destination Folder पर Copy होते हैं।
Precompilation for Deployment भी मूलत: Update Support के साथ व Update Support के बिना दो भिन्न रूपों में Compile होता है। जो Websites Deployment के लिए Packaged होती हैं, उन्हें Updatable नहीं रखा जाता। इसलिए जब इन Websites में Change करने की जरूरत होती है, तब हम हमारी Website की Original Files को Modify करते हैं, पूरी Website को Recompile करते हैं और फिर से पूरी Website को Redeploy करते हैं।
इस पूरी प्रक्रिया में केवल Configuration में हम किसी प्रकार का Change नहीं करते और Web.config File को Production Server की पिछली File के समान ही रखते हैं, जब तक कि नई Settings की जरूरत न हो।
जबकि Update Support के साथ Precompilation करने पर हम केवल Generate होने वाली Assemblies को ही Produce करते हैं जबकि Compiler .aspx Files को Touch भी नहीं करता और उन्हें ज्यों का त्यों Final Layout के रूप में Copy कर देता है। इस तरीके में हमें ASP.NET Pages को Compile करने के बाद काफी Limited Changes ही करने होते हैं।
उदाहरण के लिए Compiling के बाद हम Form के Controls या उनकी Positions, Colors, Fonts व Visual parameters को Change कर सकते हैं। हम हमारे Existing Page पर एक Controls भी Add कर सकते हैं, जब तक कि उनके साथ किसी ऐसे Handler या अन्य Code को Add करने की जरूरत न हो, जिसे Compile करना जरूरी हो।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Core ASP.NET WebForms with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Core ASP.NET WebForms in Hindi | Page:647 | Format: PDF