|
ASP.NET 2.0支持兩種編譯模型(Compilation Model):
一為動(dòng)態(tài)編譯(Dynamic Compilation),另一個(gè)為先行編譯(Precompilation)。
這讓程序設(shè)計(jì)師可以有更寬廣的選擇以決定不同網(wǎng)站何時(shí)該用何種編譯模型,不但彈性大大提升,且若採(cǎi)用先行編譯網(wǎng)站執(zhí)行效能還可以更高,分述如下:
(一)ASP.NET網(wǎng)站動(dòng)態(tài)編譯(Dynamic Compilation)
在ASP.NET 1.0時(shí)就已經(jīng)支援網(wǎng)站動(dòng)態(tài)編譯,也就是使用者第一次請(qǐng)求網(wǎng)站網(wǎng)頁(yè)時(shí),ASP.NET會(huì)先將網(wǎng)站程式編譯成一個(gè).dll組件檔,而后續(xù)的請(qǐng)求就會(huì)以此來(lái)回應(yīng),而編譯過(guò)后的網(wǎng)站執(zhí)行效能明顯較未編譯網(wǎng)站快上許多。
然而雖說(shuō)ASP.NET 1.0具有動(dòng)態(tài)編譯的特性,但它只支援如.ASPx、.ascx、web.config或global.asax這幾種檔桉類(lèi)型,只要它們有異動(dòng)就會(huì)觸發(fā)系統(tǒng)進(jìn)行動(dòng)態(tài)編譯,但這個(gè)模式有個(gè)很明顯的問(wèn)題存在,就是像bin目錄下的組件、資源檔、Web Services等等在程式設(shè)計(jì)階段也常進(jìn)行修改,但這些檔桉即使用異動(dòng)也不會(huì)觸發(fā)系統(tǒng)重新進(jìn)行編譯,因此每每VS.NET 2003的專(zhuān)桉有修改異動(dòng),必須手動(dòng)重新編譯整個(gè)專(zhuān)桉,如此使用瀏覽器執(zhí)行網(wǎng)頁(yè)才會(huì)顯示最新修改的程式頁(yè)面。
但是可能不少人嫌煩或者是初學(xué)者根本不知道修改后要手動(dòng)重新編譯,因此微軟針對(duì)動(dòng)態(tài)編譯又再進(jìn)行了更人性化的改良,現(xiàn)在針對(duì)類(lèi)別、Web Service、具型別的DataSet、Master Page、Themes也支援異動(dòng)時(shí)的動(dòng)態(tài)編譯,各位只要針對(duì)IE瀏覽器重新Refresh就會(huì)自動(dòng)觸發(fā)系統(tǒng)進(jìn)行重新編譯,看到的也當(dāng)然是最新的畫(huà)面,省卻程式設(shè)計(jì)師必須手動(dòng)進(jìn)行編譯,算是一個(gè)貼心的改良。
ASP.NET 2.0動(dòng)態(tài)編譯和ASP.NET 1.0很像,但是更完美了,且當(dāng)您建置(Build)整個(gè)Web網(wǎng)站后,在bin目錄并不會(huì)產(chǎn)生.dll的專(zhuān)桉程式,許多ASP.NET 1.0的程式設(shè)計(jì)師開(kāi)始驚慌、疑惑與不安,為什麼找不到專(zhuān)桉.dll?沒(méi)有.dll檔要如何部署網(wǎng)站?等等的疑惑,其實(shí)沒(méi)什麼好疑惑的,各位之所以會(huì)疑惑是因?yàn)槟惆?a href=/itjie/ASPjishu/ target=_blank class=infotextkey>ASP.NET 1.0當(dāng)作是普世的標(biāo)準(zhǔn),凡是違反它的作法皆為異類(lèi),進(jìn)而ASP.NET 2.0的動(dòng)態(tài)編譯就成為您眼中的〝異類(lèi)〞,但那是人的執(zhí)著心與本位主義作崇的關(guān)係,事實(shí)上ASP.NET 2.0的動(dòng)態(tài)編譯才是更完美,完美到根本不再需要.dll,只要有使用者進(jìn)行請(qǐng)求時(shí)(Request),系統(tǒng)會(huì)自動(dòng)進(jìn)行動(dòng)態(tài)編譯(仍然看不見(jiàn).dll檔),所以若您要部署網(wǎng)站時(shí),利用複製網(wǎng)站工具將.ASPx、.ASPx.cs、Web.config、類(lèi)別檔全部複製一份到新網(wǎng)站就行了(唯獨(dú)沒(méi)有.dll檔),剩下的事情動(dòng)態(tài)編譯會(huì)替您全部打理好。
(二)ASP.NET網(wǎng)站先行編譯(Precompilation)
除了上面所講的動(dòng)態(tài)編譯外,ASP.NET 2.0尚提供先行編譯(Precompilation)網(wǎng)站的功能,它透過(guò)「ASPNET_ Compiler.exe」這個(gè)指令來(lái)預(yù)先編譯整個(gè)網(wǎng)站,祭司用通俗觀點(diǎn)來(lái)說(shuō)明這樣的做法有幾個(gè)好處:
(1)節(jié)省網(wǎng)頁(yè)第一次編譯的時(shí)間。以往在ASP.NET 1.0這個(gè)編譯的機(jī)制雖然有效加速ASP.NET網(wǎng)站整體性能,但許多使用者或不明究裡的初學(xué)者卻抱怨第一次執(zhí)行感覺(jué)好慢,而預(yù)先編譯整個(gè)網(wǎng)站是連第一次都省掉了,大概也不會(huì)有人再抱怨這個(gè)問(wèn)題了。
(2)保護(hù)網(wǎng)頁(yè)程式碼智慧財(cái)產(chǎn)。在ASP.NET 1.0時(shí)可以將Code Behind編譯進(jìn)dll之中,但是若是以In-Line Code開(kāi)發(fā)或HTML標(biāo)籤開(kāi)發(fā)的程式則是一點(diǎn)保護(hù)作用也沒(méi)有;此外即便您用Code Behind模式開(kāi)發(fā)Web應(yīng)用程式,仍然會(huì)有許多標(biāo)籤會(huì)產(chǎn)生在.ASPx之中,這種情況尤以ASP.NET 2.0更甚,如SqlDataSource連SQL命令都會(huì)顯示在HTML之中;故透過(guò)預(yù)先編譯不但連程式碼都可以編譯進(jìn)去,甚至連.ASPx網(wǎng)頁(yè)中的HTML標(biāo)籤也可以一併編譯進(jìn)去,對(duì)于程式碼的保護(hù)可以說(shuō)多了一層保障與選擇。
然而我們來(lái)看看微軟對(duì)于先行編譯好處的官方說(shuō)法:
(1)由于頁(yè)面和程式碼檔不需在第一次要求時(shí)編譯,因此使用者可得到更快的回應(yīng)時(shí)間,這對(duì)于經(jīng)常更
新的大型網(wǎng)站特別有用。
(2)使用者瀏覽網(wǎng)頁(yè)之前,識(shí)別編譯時(shí)期錯(cuò)誤的方法。
(3)不需原始程式碼,即可建立可部署到實(shí)際執(zhí)行伺服器已編譯網(wǎng)站版本的能力。
NET技術(shù):ASP.NET 2.0的編譯模型,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。