日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
ASP.NET中的動態(tài)編譯

1.為什么要進行預編譯

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網(wǎng)站設計、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的湖南網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!

ASP.NET 2.0的編譯方式大體可以分成兩種:動態(tài)編譯和預編譯,要回答為什么要進行預編譯,我們先要看看動態(tài)編譯有什么不好的地方。我們回顧一下上一篇介紹的ASP.NET進行動態(tài)編譯的簡單的流程:當來自Brower的一個基于aspx的Http request抵達Web server,IIS handle這個request,通過分析注冊在IIS中的Application Mapping,將Request 傳給aspnet_isapi.dll ISAPI extension。ISAPI extension通過HttpRuntime進入Http Runtime Pipeline,HttpRuntime為每個Request創(chuàng)建一個單獨的HttpContext對象,用于保存request的Context信息。在Http Runtime Pipeline中,Http request會被注冊的一系列的Http module處理,比如OutputCache Module,Session Module,Authentication Module,Authorization,ErrorHandler Module等等。在Pipeline的終端,ASP.NET需要需要根據(jù)request創(chuàng)建對應的HttpHandler對象來處理該Request,并生成結果Response到Client。對于一個基于Aspx的Http request,對應的Http handler對象一般就是一個System.Web.UI.Page對象。

ASP.NET會先判斷對應的Page type是否存在于被Cache的Assembly中,如果存在,直接創(chuàng)建Page對象,否則ASP.NET會先對該Page的相關的Source code (包括code behind,html等等) 進行編譯,我們也說過這種編譯是一Directory為單位的,也就是說,處于同一個Directory下的需要編譯的文件會被編譯成到同一個 Assembly中。編譯生成的Assembly會被Cache,用于后續(xù)的Request。

正是因為對資源的首次訪問會導致一次編譯(這樣說不太準確,因為動態(tài)編譯是以directory為單位進行的,應該對對某個Directory下的資源進行首次訪問),這樣會嚴重降低Web Application的響應速度。所以我們?yōu)榱吮苊膺@種情況,需要預先對web site進行編譯,所以提高web site的響應是進行預編譯的最重要的原因。

同時動態(tài)編譯就以為著Web server上放置的是Source code,而且他們是可被修改的。而對于一個開發(fā)完畢的Web Application,我們更希望以Binary Assembly的方式進行部署,這樣Server上部署的都是Binary Assembly,不怕被別人篡改而導致系統(tǒng)的崩潰,從知識產權來講,也更利于保護商業(yè)秘密。這也是我們?yōu)槭裁匆M行預編譯的另一個原因。

下面我們就來講講如何進行預編譯,以及與編譯背后的原理。同時在這里我需要特別提出的是,在上一部分講的一些術語和原理,比如Preservation file,F(xiàn)astObjectFactory,同樣適用于預編譯,重復的內容,在這里就不必再介紹了。同時我也將沿用上一部的Sample。如果想看看相關的內容,請參閱[原創(chuàng)]深入剖析ASP.NET的編譯原理之一:動態(tài)編譯(Dynamical Compilation)。

2.In Place Pre-compilation V.S. Pre-compilation for Deployment

對于預編譯,有可以分為In Place Pre-compilation和Pre-compilation for Deployment,In Place Pre-compilation很簡單,實際上就是把整個Web site編譯到我們一個臨時的目錄下面,這個臨時目錄也就是我們在介紹動態(tài)編譯提到的那個臨時目錄。而且這個編譯的方式,包括生成的文件也和動態(tài)編譯完全一樣,唯一不同就是編譯的時間:預先編譯,編譯的范圍:整個Web site。這種編譯就是你常用的在VS的build。這種編譯方式一般用于開發(fā)階段。

為了部署為目的的編譯是我們今天討論的重點,下面我們就著重來討論Pre-compilation for Deployment。

注:在ASP.NET的編譯都是通過一個叫做 aspnet_compiler的工具執(zhí)行的,該工具隨ASP.NET 2.0一起發(fā)布,你完全可以利用此工具以命令行的方式的執(zhí)行編譯,并通過傳遞不同的命令行開關設置不同的編譯選項。該工具被置于了VS中,使你可以利用 VS進行可視化的編譯。

3.Non-updatable Pre-compilation V.S. Updatable Pre-compilation

ASP.NET 2.0為我們提供了幾種不同方式的預編譯和部署。為了弄清楚這些預編譯和部署方式,我們先來回顧一下ASP.NET 1.x下的編譯方式。我們知道在ASP.NET 1.x時代對整個Web site進行編譯,實際上我們只會對所有C#和VB.NET等后臺代碼進行編譯,并生成一個單一的Assembly。而Web page的aspx是不會參與編譯的。所以當我們訪問一個Web page的時候,ASP.NET必須對aspx進行動態(tài)編譯。

 
 
 
  1. <%@PageLanguage="C#"AutoEventWireup="false"  
  2. Codebehind="Default.aspx.cs" 
  3. Inherits="Default"%> 
  4. publicpartialclassDefault:System.Web.UI.Page  
  5. {  
  6. protectedvoidPage_Load(objectsender,EventArgse)  
  7. {  
  8. }  

【編輯推薦】

  1. 微軟發(fā)布ASP.NET MVC 2預覽版 多項功能更新
  2. ASP.NET服務器自定義控件安全準則
  3. ASP.NET編程規(guī)范之編碼規(guī)范淺析
  4. 關于ASP.NET Session的一點認識
  5. ASP.NET編程工具ASP.NET Web Matrix詳細介紹

本文題目:ASP.NET中的動態(tài)編譯
標題網(wǎng)址:http://www.5511xx.com/article/cogophs.html