成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET中的動態編譯

開發 后端
本文介紹ASP.NET中的動態編譯,為什么要進行預編譯?我們先要看看動態編譯有什么不好的地方。

1.為什么要進行預編譯

ASP.NET 2.0的編譯方式大體可以分成兩種:動態編譯和預編譯,要回答為什么要進行預編譯,我們先要看看動態編譯有什么不好的地方。我們回顧一下上一篇介紹的ASP.NET進行動態編譯的簡單的流程:當來自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創建一個單獨的HttpContext對象,用于保存request的Context信息。在Http Runtime Pipeline中,Http request會被注冊的一系列的Http module處理,比如OutputCache Module,Session Module,Authentication Module,Authorization,ErrorHandler Module等等。在Pipeline的終端,ASP.NET需要需要根據request創建對應的HttpHandler對象來處理該Request,并生成結果Response到Client。對于一個基于Aspx的Http request,對應的Http handler對象一般就是一個System.Web.UI.Page對象。

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

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

同時動態編譯就以為著Web server上放置的是Source code,而且他們是可被修改的。而對于一個開發完畢的Web Application,我們更希望以Binary Assembly的方式進行部署,這樣Server上部署的都是Binary Assembly,不怕被別人篡改而導致系統的崩潰,從知識產權來講,也更利于保護商業秘密。這也是我們為什么要進行預編譯的另一個原因。

下面我們就來講講如何進行預編譯,以及與編譯背后的原理。同時在這里我需要特別提出的是,在上一部分講的一些術語和原理,比如Preservation file,FastObjectFactory,同樣適用于預編譯,重復的內容,在這里就不必再介紹了。同時我也將沿用上一部的Sample。如果想看看相關的內容,請參閱[原創]深入剖析ASP.NET的編譯原理之一:動態編譯(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編譯到我們一個臨時的目錄下面,這個臨時目錄也就是我們在介紹動態編譯提到的那個臨時目錄。而且這個編譯的方式,包括生成的文件也和動態編譯完全一樣,唯一不同就是編譯的時間:預先編譯,編譯的范圍:整個Web site。這種編譯就是你常用的在VS的build。這種編譯方式一般用于開發階段。

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

注:在ASP.NET的編譯都是通過一個叫做 aspnet_compiler的工具執行的,該工具隨ASP.NET 2.0一起發布,你完全可以利用此工具以命令行的方式的執行編譯,并通過傳遞不同的命令行開關設置不同的編譯選項。該工具被置于了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進行動態編譯。

  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. 微軟發布ASP.NET MVC 2預覽版 多項功能更新
  2. ASP.NET服務器自定義控件安全準則
  3. ASP.NET編程規范之編碼規范淺析
  4. 關于ASP.NET Session的一點認識
  5. ASP.NET編程工具ASP.NET Web Matrix詳細介紹
責任編輯:佚名 來源: csdn
相關推薦

2009-08-04 18:10:35

ASP.NET動態編譯

2009-07-28 15:38:14

aspx文件編譯ASP.NET

2009-07-21 15:40:59

Asp.Net動態頁面

2009-07-24 10:10:22

ASP.NET

2009-07-24 16:17:42

WebRequestEASP.NET

2009-08-04 15:52:58

ASP.NET編譯器

2009-07-28 10:01:16

ASP.NET Exc

2009-08-04 15:58:06

ASP.NET動態控件

2009-07-21 15:14:32

預編譯應用程序ASP.NET

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2009-07-23 16:20:48

HTTP協議ASP.NET

2009-07-30 13:28:55

ASP.NET中的ja

2009-09-11 09:09:00

ASP.NETAdRotator控件

2009-07-31 10:08:33

OutputCache

2009-07-20 13:32:24

ScriptManagASP.NET

2009-07-20 14:54:23

HttpWorkerRASP.NET

2009-07-30 12:35:51

ASP.NET中的對象

2009-07-20 15:19:52

ViewState本質ASP.NET

2009-07-27 13:01:28

TreeViewASP.NET
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久在线精品视频 | 国产高清免费在线 | 黄色一级网 | www.黄色网| 国产免费观看一区 | 日韩精品在线观看一区二区 | 日韩一级 | 亚洲最大的黄色网址 | 成人在线免费视频 | 中文字幕视频在线看5 | 久久国产精品久久久久 | 欧美日韩一区二区在线播放 | 亚洲精品乱码久久久久久按摩观 | 久久在线 | 欧美三级久久久 | 黄网免费看 | av天天看| 免费久久久久久 | 欧洲成人午夜免费大片 | 成人精品一区亚洲午夜久久久 | 免费观看一级特黄欧美大片 | 天天干天天干 | 久久久激情 | 国产影音先锋 | 国产91久久久久 | www一级片 | 色黄爽 | 天天视频一区二区三区 | 一级特黄视频 | 国产在线91 | 亚洲久草| 国产精品久久久久久久免费观看 | 91精品国产91久久久久久密臀 | 正在播放国产精品 | 7777在线视频免费播放 | 午夜精品| 91精品国产一区二区三区 | 欧洲精品码一区二区三区免费看 | 欧美一区二区三区的 | 综合久久av| 久草精品视频 |