ASP已老,尚能飯否?
我對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以及很多其他人的貢獻下逐步完善的。