最近剛好有網友詢問這個問題,當我們要把我們的系統上線,可以直接把原始碼放到Server上,也可以先行【建置→發行】,再將發行後的aspx+dll放到主機中。到底這兩個方式有什麼不同??運作速度、安全性、維護方便性到底如何呢??小喵就小喵所知道的,分享給各位網友們。
緣起
最近剛好有網友詢問這個問題,當我們要把我們的系統上線,可以直接把原始碼放到Server上,也可以先行【建置→發行】,再將發行後的aspx+dll放到主機中。到底這兩個方式有什麼不同??運作速度、安全性、維護方便性到底如何呢??小喵就小喵所知道的,分享給各位網友們。
運作的流程
字不如表,表不如圖。所以小喵把運作的過程,兩種方式的比較,做成兩張圖。先來看看這兩張圖,再來進一步做一些文字的補充吧。
(所有的圖都可以點圖放大,如果看不清楚的部分就煩請將圖放大看)
首先是當某一支aspx被呼叫時,兩種方式的運作過程如下圖
當第一次被呼叫,這兩種方式不同的地方,如果您放的是原始檔,那麼該原始檔必須先被經過【編譯】的程序,才能轉換成可在記憶體中執行運作的中間檔。而這個過程是動態的,用到哪個才編譯哪個。而已發行的因為之前已經將相關的編譯過了,就略過這個步驟,直接將編譯的結果(.dll)載入記憶體中運作。其中運作完後,並不會馬上把該程式從記憶體中釋放,這樣的機制有助於當地二次以後被呼叫,可以省略過再次編譯、載入的動作。直接從記憶體中的已經被載入存放好的程式區塊中直接運作執行。
接著來看第二次以後被呼叫的狀況
這裡原始碼的部分小喵少了一點東西,ASP.NET為了可以每次在程式碼有變更後,執行運作最新的結果,會去偵測原始碼是否與記憶體中上次編譯的是否相同。如果不同,就會等同地一次執行,會直接再次的重新編譯,載入記憶區塊。這也是為什麼我們每次修改過程式碼後,發現運作的是修改程式碼後的結果。
假設程式碼沒有被變更的情況,就如同上圖一般,兩種方式運作的過程幾乎相同。
兩種方式的比較表
小喵針對這兩個方式,在維護方式、維護方便性、安全性、運作速度上,做了一個比較表
維護方式:
使用原始碼確實方便很多很多,因為如果要修改東西,只需要將原始碼以文書處理軟體叫出來(記事本也可),修改後儲存即可。如果在別處更改好的,也只要把修改後的原始碼覆蓋掉原來的就可以了。
但是如果是用發行的方式,那麼每次修改後,都必須經過【建置→發行】的過程,將相關程式轉為.dll,然後再將該dll複製貼到主機上覆蓋原來檔案。所以對於維護方式,有很大的不同,使用發行的方式,要做的事情還不少哩。
維護便利性:
剛剛提到,如果方原始碼,只需要用文書處理軟體開起來改,改好後儲存即可使用。但是如果是原始碼,卻必須都測試好後,先行建置,建置沒問題,還需要做發行(小喵自己大都是發行到個人PC上),最後才將發行出來的aspx+dll覆蓋到主機上。因此光就便利性而言,原始碼方便很多很多。
安全性:
由於放原始碼所代表的內容都是明碼,因此如果萬一被取得原始碼,很容易的就可以知道您做了哪些事,也可能會被分析出進一步如何駭掉這個網站。而做過建置發行的,原始碼裡面已經沒了那些程式碼,取而代之的是一隻隻的.dll程式,就算要用反組譯的方式去看,也需要花費許多的時間或精力。因此就安全性而言,有閒置與發行的相對的安全一些。
第一次使用的速度:
由於第一次使用如果是原始碼,還必須透過動態編譯的步驟,才能轉為可執行的東西。所以運作上當然會比已經編譯過,可以直接將dll載入記憶體中的要慢上一些。
使用方式的選擇
以上是對於存放在主機上的兩種方式【原始碼方式】【建置發行方式】的簡略介紹,小喵沒有談得很深入,也沒有對細節很專研的去解釋,大致上需要考量的點,小喵把他們點了出來。
有了以上的概念後,看來各有各的優缺點,那麼到底要怎麼樣選擇比較合適呢??小喵提供一些方向讓大家參考判斷的方向。
- 對外部的網站/系統:外部網站系統安全性的考量應該要提高,因此如果對外的網站系統,小喵的建議是使用安全性較高的【建置發行】方式。
- 對內部的網站/系統:如果這系統是內部的使用者要用的,並沒有對外,那麼如果考量維護的簡便,以及對應使用者需求的調整,或許可以選擇直接存放原始碼。這樣雖然使用者在地一次使用會比較慢,但是在於使用者需求變更的對應,會比較容易修改與維護。因此小喵的建議是,對內的網站/系統,可以使用原始碼的方式。
以上是簡單的建議思考方向,實際上還是要針對自己的狀況,來決定安全性、運作速度、維護簡便否進行考量與取捨。
以下是簽名:
- 歡迎轉貼本站的文章,不過請在貼文主旨上加上【轉貼】,並在文章中附上本篇的超連結與站名【topcat姍舞之間的極度凝聚】,感恩大家的配合。
- 小喵大部分的文章會以小喵熟悉的語言VB.NET撰寫,如果您需要C#的Code,也許您可以試著用線上的工具進行轉換,這裡提供幾個參考
Microsoft MVP Visual Studio and Development Technologies (2005~2019/6) | topcat Blog:http://www.dotblogs.com.tw/topcat |