ASP已老,尚能飯否?

編碼磚家發表於2022-06-15

我對ASP的感情,跟大海一樣深。我用它實現了第一個動態網頁,也用它做了畢業設計,畢業設計的名字是《畢業設計管理系統》(是不是有點繞)。在 PHP 和 ASP.NET、Java 高歌猛進的今天,很少程式設計師還在使用ASP了。

1996年微軟公司推出 ASP(Active Server Page),很快成為中小型網站開發的首選。許多企業的入口網站和中小型新聞網站都採用基於ASP開發的內容管理系統。用友軟體公司早期幾款安身立命的ERP軟體,也是採用ASP開發。

2000年微軟釋出第一個 .NET Framework Beta 版本,在 2003 年升級到 v1.1,推出了 ASP.NET,完善了桌面應用開發和 Web 開發。ASP.NET支援用 C# 或者 VB.NET 開發 Web 應用。無論是底層結構還是開發模式,都和ASP完全不一樣。

ASP最大的特點是簡單易學,我們來看一個提交表單的程式碼示例:

<html>
<body>
<form action="demo.asp" method="post">
Your name: <input type="text" name="username" size="20" />
<input type="submit" value="Submit" />
</form>
<%
dim username
username = Request.Form("username")
Response.Write("How are you today" & username)
%>
</body>
</html>

從程式碼示例可以看到,<%%>裡面是用VB指令碼編寫的業務邏輯,嵌入在頁面的HTML程式碼中中,倒是一目瞭然。這樣組織程式碼的壞處也很明顯,沒有分離頁面和邏輯,一旦業務變複雜,很難組織好模組,程式碼可讀性急劇下降。

ASP擴充套件功能也是個麻煩事。ASP的VB指令碼能夠直接呼叫的系統介面非常有限,必須在伺服器上安裝額外的COM元件才能擴充套件功能,COM元件通常採用C++開發。相比之下,ASP.NET或者Java平臺提供了足夠的API,採用C#或者Java就能實現功能,並且可以隨著應用程式一起打包上線。

擴充套件元件和業務程式碼分離會造成兩個問題:ASP程式設計師要額外學習COM元件開發;伺服器部署COM元件,增加運維成本。與ASP同時代的PHP也有類似的問題,但是它一直升級,已經孕育龐大的生態和解決方案,最終發展出PHP + Apache + MySQL的黃金組合,還有一大堆知名的網站如facebook、wordpress、wikipedia。

ASP也只能部署在Windows平臺上,系統標配是Windows Server 系列和IIS。限制軟體的執行平臺,是微軟一貫的作風。

曾經做畢業設計的時候,我對ASP愛不釋手,也痛罵其詬病。最近我看了一些Go和Rust語言的發展歷史和程式設計資料,突然理解ASP的設計思路了。在當時的環境下,微軟作為一個商業公司在ASP上做出了最優的設計,理由如下:

  • 簡單易學。簡單就是生產力。
  • 功能簡單。定位小型網站,完全夠用。
  • 複用COM元件技術、VB語言。這兩者比ASP還早出現。
  • 執行環境繫結Windows,符合商業利益。

世上只有兩種程式語言:一種被人罵,一種沒人用,每次看到技術社群討論語言優劣的話題,我都直接劃過不看。與其陷入語言優劣之爭,不如多學習計算機基礎和系統架構。

如果時光倒流,再回去做畢業設計,你會選擇哪種語言呢?我會選擇PHP,畢竟PHP是最好的語言

COM:COM是component的縮寫,微軟提出的一種軟體的元件物件模型,是關於如何建立元件以及元件之間進行互動的規範。
COM元件:由以Win32動態連結庫(DLL)或可執行檔案(EXE)形式釋出的可執行程式碼所組成。一個COM元件可以包含多個COM物件,一個COM物件又可以有多個介面。
COM物件:類似於C++語言中的類,類的每個例項代表一個COM,包括屬性和方法。

Go:又稱Golang,是Google開發的一種靜態強型別、編譯型、併發型,並具有垃圾回收功能的程式語言。Go作為伺服器程式設計言語,很適合處理日誌、資料打包、虛擬機器處理、檔案體系、分散式體系、資料庫代理、網路等方面。
Rust:Rust是一門系統程式語言,專注於安全 尤其是併發安全,支援函式式和命令式以及泛型等程式設計正規化的多正規化語言。Rust最初是由Mozilla研究院的Graydon Hoare設計創造,然後在Dave Herman, Brendan Eich以及很多其他人的貢獻下逐步完善的。

相關文章