php asp.net 比較 [推薦]

來源:互聯網
上載者:User

這些標記告訴前置處理器,它們包含代碼,並且應對它們作出處理。與 CGI 非常相似,這些代碼在伺服器上運行,並返回一些內容,這些內容表現為發回給瀏覽器的結果 HTML 頁面的部分外觀。開放原始碼指令碼語言 PHP 和 Microsoft 的 ASP.NET 架構中的語言都屬於這種類型;JavaServer Pages (JSP) 和 Perl/Mason 也以這種方式運行。
在本文中,我將重點講述 PHP - Oracle 已選擇合并到其產品中的技術 - 和 ASP.NET。我將概述兩者的各種優勢和弱點,並著重討論那些將協助您決定開發項目應選擇哪種技術的因素。有很多因素需要考慮,不同的項目可能訴諸於不同的技術。總之,您將看到在價格、速度和效率、安全性、跨平台支援等方面的逐項比較,以及開放原始碼解決方案的優勢。
什麼是 ASP.NET?
ASP 最新的版本 ASP.NET 並不完全與 ASP 早期的版本與舊版相容,因為該軟體進行了完全重寫。早期的 ASP 技術實際上與 PHP 的共同之處比與 ASP.NET 的共同之處多得多,ASP.NET 是用於構建 Web 應用程式的一個完整的架構。這個模型的主要特性之一是選擇程式設計語言的靈活性。ASP.NET 可以使用指令碼語言(如 VBScript、JScript、Perlscript 和 Python)以及編譯語言(如 VB、C#、C、Cobol、Smalltalk 和 Lisp)。新架構使用通用語言運行環境 (CLR);先將您語言的原始碼編譯成 Microsoft 中繼語言代碼,然後 CLR 執行這些代碼。
這個架構還提供真正的物件導向編程 (OOP),並支援真正的繼承、多態和封裝。.NET 類庫根據特定的任務(例如,使用 XML 或影像處理)組織成可繼承的類。
除了程式設計語言和方法之外,資料庫訪問也是要著重關心的一個因素。當您用 ASP.NET 編程時,可以用 ODBC 來整合資料庫;ODBC 提供了一組一致的調用函數來訪問您的目標資料庫。
優勢和弱點
ASP.NET 的優勢很明顯在於它簡潔的設計和實施。這是物件導向的編程人員的夢想:語言靈活,並支援複雜的物件導向特性。在這種意義下,它真正能夠與編程人員現有的技能進行互操作。
ASP.NET 的另一個優勢是其開發環境。例如,開發人員可以使用 WebMatrix(一個社區支援的工具)、Visual Studio .NET 或各種 Borland 工具(如 Delphi 和 C++ Builder)。例如,Visual Studio 允許設定斷點、跟蹤程式碼片段和查看呼叫堆疊。總而言之,它是一個複雜的調試環境。許多其他第三方的 ASP.NET IDE 解決方案也將必然出現。

但您得到了強健性,就將以損失效率為代價。ASP.NET 在記憶體使用量和執行時間方面耗費非常大,這大部分歸因於較長的代碼路徑。對基於 Web 的應用程式,這些局限可能是一個嚴重的問題,因為在 Web 上,您的應用程式可能擴充為每秒成千上萬的使用者。記憶體使用量率還可能成為 Web 服務器上的一個問題。
什麼是 PHP?
PHP 是基於預先處理 HTML 頁面模型的一種指令碼語言。當 Web 服務器中的 PHP 前置處理器發現像下面這樣的 PHP 語言標記時,將調用 PHP 引擎來執行該代碼:
<?php
some code here
?>
任何使用過命令式程式設計語言的編程人員都會對 PHP 非常熟悉;您會發現它與 Perl、C 和 Java 在文法上的相似處。嚴格來講,Java 是一種命令式程式設計語言,但它也利用了物件導向的結構和概念。PHP 在適宜的時候借鑒了這種結構,但它不是一種純粹的 OOP 語言。
在上面對 ASP.NET 的討論中,我提到了 ODBC 驅動程式,以及在考慮資料庫抽象的情況下如何構建應用程式。在 PHP 中,您也可以使用 ODBC 與資料庫對話,因此您已經有了一系列支援的資料庫可供選擇。也有 MySQL、Oracle 和 Postgres 的原生驅動程式。此外,如果要使用 Oracle,則有一個特殊的 OCI8 庫將提供對 Oracle 更多訪問功能,從而允許您使用諸如 LOB、BLOB、CLOB 和 BFILE 之類的特性。
這時您可能會問"為什麼與資料庫相關的資料庫被稱為 PHP 的特性?"資料庫抽象或獨立性是您在設法構建使用多種資料庫或需要在資料庫間移植(例如,從開發到投產時的移植)的應用程式時所要考慮的一個因素。而這些確實是應該關心和考慮的。
但正如 Tom Kyte 在他的新書 - Effective Oracle by Design (Oracle 出版社) - 中指出的那樣,資料庫相關性將成為您真正的目標,因為這將使您在該技術中的投資最大化。如果您對 Oracle 進行一般的訪問 - 無論通過 ODBC 或 Perl 的 DBI 庫,那麼您將無法使用其他資料庫所不具有的特性。此外,最佳化查詢在各個資料庫中各不相同。
Zend Technologies 是一家商業軟體公司,它對 PHP 作出了重大貢獻。它建立了一個稱為 Zend Studio 的商業開發環境,這個環境包含了一個複雜的調試器、一個監測器和其他特性。該公司還構建了免費的 Zend Optimizer,它與 Zend Encoder 結合使用來編譯 PHP 代碼,以提升效能。還有其他商業產品,如 Zend Performance Suite,它可以緩衝先行編譯的 PHP 頁面,從而進一步顯著提升總體效能。

優勢和弱點
到測試版 4 為止,PHP 5 仍然有一些缺點,包括缺少異常和基於事件的錯誤處理常式 - 它們能夠中斷正常的程式流,並將代碼跳轉到一個特殊的錯誤處理部分。Java 也提供了用於錯誤處理的異常,而 C++ 通過 try、catch 和 throw 文法提供異常處理。當然,您仍然可以在 PHP 中管理錯誤,但其結構不是標準化的,因而使得編程人員必須使用自己的工具來決定執行錯誤處理的方式,這將導致更低的一致性並往往導致推倒重來。
另一個弱點是 PHP 的函數名是不區分大小寫。雖然這不是一個嚴重的缺點,但有些程式員可能會覺得這一特性很討厭。
不過,我的確對 PHP 的物件模型心存疑慮。PHP 不是專門設計為一種物件導向的語言。這些特性中的一部分是後來添加的 - 儘管注意了保持與 PHP 3 的回溯相容性,因此兩種模型的特性都留有一些。實際上,在 PHP 5 中這些弱點中的許多都得到瞭解決。請留心關注。
PHP 在一些領域中缺少什麼,它就會在擅長的領域中迅速地彌補什麼。價格合理,因此您不需要擔心許可問題。它也是開放原始碼的,因此整個社區將密切關注開發過程:發現錯誤並將其修複。如果有一個特性您不喜歡,那麼您可以修改代碼。此外,PHP 可與 Apache 自然結合:它可以作為一個模組編譯,或直接編譯成 Apache 二進位檔案。
但在 Apache 上運行意味著,利用 PHP,您能夠利用您已經在任意伺服器投資,這是因為 Apache 能夠運行在 Windows、Linux、Solaris 和各種其他 Unix 平台上。此外,使用擁有 Apache 的追蹤記錄的 網頁伺服器意味著安全效能夠保持在最高的優先順序上。最後,PHP 擁有更小的代碼路徑,這意味著更少的分析和執行 PHP 頁面伺服器端代碼,這將帶來更高效的記憶體和使用率以及更快的運行。
在 PHP 5 中新增了哪些特性?
PHP 5 的第 4 個測試版在 2003 年 12 月底推出,變更記錄檔清楚地顯示已發現許多錯誤並已將其消除。雖然它仍在進行測試,但它的所有新特性和進步都確實值得關注。
PHP 5 的主要新成就在於它的異常處理和一個新對象,這個新對象引入的特性賦予了 PHP 真正的 OOP。異常處理無疑是 PHP 4 中最顯著的缺憾之一,而 PHP 5 對異常處理的引入無疑是一個成熟的標誌。異常處理意味著您在您的軟體中擁有了根據語言定義的和標準化的錯誤處理方法。只需使用 try、catch 和 throw 方法,您的 PHP 代碼就變得更加強健和簡潔。
<?phpclass blue {function openFile ($inFile)
{if (file_exists ($inFile))
{# code to open the file here} else {throw new Exception ("Cannot open file:$inFile");
} }}
$blueObj = new blue ();try {$blueObj->openFile ('/home/shull/file.txt');}
catch (Exception $myException) {echo $myException->getMessage ();
# rest of exception handling code here}# rest of blue methods here?>
新的物件模型為用 PHP 編寫的程式帶來許多積極的影響。在 PHP 4 中,當把將一個對象傳遞給函數或方法時,是通過值來傳遞的 - 除非您另行顯式告知 PHP。這個過程意味著必須複製對象的一個副本(記憶體中的所有資料結構)。這個步驟使用記憶體,使得訪問變慢和擁塞。而在 PHP 5 中,通常通過引用傳遞對象。
PHP 5 中新的物件導向的特性(包括構造器和析構器)值得關注。與 C++ 和 Java 相同,它們提供了一種標準方法,即通過一個構造器方法來建立對象、分配記憶體和執行任何必要的設定,並通過一個析構器方法來執行清理。
PHP 5 還引入了對類中方法和變數的更精細控制。在 PHP 4,一切都是公有的:您可以從類外或在繼承類中訪問您類中的變數。在 PHP 5 中,您仍然可以使變數或方法為公有,但您也可以使它們為私人,以使得只能在類本身中使用它們。還可以將它們保護起來,也就是說,可以在類內或在子類中查看方法和變數。
此外,PHP 5 引進了類型提示或更好的類型檢查。當您將一個對象傳遞給一個常式時,PHP 能夠檢查它是否是正確的類型,並在檢查失敗時產生類型不符錯誤。
由於還有其他特性(如靜態方法和變數以及抽象類別),因此請務必查看文檔,以擷取詳細資料。
安全性比較
ASP.NET 官方要求您使用 IIS。不幸的是,IIS 易受攻擊的曆史由來已久,這使得許多管理員不願意部署它來處理 Web 網站。這些弱點是因為 Microsoft 的缺陷或是因為 IIS 是駭客們攻擊的目標無關緊要:這些系統有被黑或被攻擊的曆史。PHP 也運行在 Apache 上,Apache 快速並且是開放原始碼的,並擁有很好的安全性記錄。此外,正如我提到過的,Apache 可以在許多平台上運行。
如果您在考慮 ASP.NET,但您想用 Apache 作為 Internet 門戶,那麼很幸運您可以有一些選擇。首先,您可以使用 Apache 將請求轉寄給在另一台電腦上內部啟動並執行 IIS。然後 Apache 處理靜態內容,並將 aspx 內容傳送給 IIS 伺服器(不暴露給 Internet)。
不過,如果您想利用 Apache 承載 ASP.NET,那麼提供了一些選項,這些選項 Microsoft 可能支援也可能不支援。作為最後一種選擇,有 Ximian 的 Project Mono,它致力於構建一個開放原始碼模組。請瀏覽 http://www.go-mono.com/,以擷取更多資訊。
資料庫編碼樣本
您在選用 PHP 或 ASP.NET 時首先要考慮因素之一就是與資料庫的串連。不過,利用 ASP.NET 更複雜,因為您可以從許多備選語言中選擇任意一種語言。當然,這些程式碼範例將必須嵌入到 HTML 頁面、執行個體化的類等之中。不過,以下資訊將使您對二者的編碼風格有所瞭解。
PHP 5 與 Oracle 串連
下面是一個 PHP 5 類,它提供了一個 Oracle 串連和斷開常式,用以示範利用 PHP 5(也可以使用其他驅動程式(如 ODBC 驅動程式)和通用的資料庫介面)與 Oracle 串連的一種方式:
class oracle_object {
protected $theDB;
protected $user;
protected $pass;
protected $db;
function __construct($u, $p, $d) {
$this->user = $u;
$this->pass = $p;
$this->db = $d;
}
function db_open () {
$theDB = @OCILogon($this->user, $this->pass, $this->db);
db_check_errors($php_errormsg);
}
function db_close() {
@OCILogoff($theDB);
db_check_errors($php_errormsg);
}
function __destruct () {
print ("so long...");
}
}
ASP.NET 與 Oracle 串連
如果您希望利用 VB.NET(Visual Basic 是 Microsoft 的預設 .NET 程式設計語言)與 Oracle 串連,那麼請看一下這個來自 MSDN 的樣本:
Imports System
Imports System.Data
Imports System.Data.OracleClient
Imports Microsoft.VisualBasic
Class Sample
Public Shared Sub Main()
Dim oraConn As OracleConnection = New OracleConnection
("Data Source=MyOracleServer;Integrated Security=yes;")
Dim oraCMD As OracleCommand = New OracleCommand
("SELECT CUSTOMER_ID, NAME FROM DEMO.CUSTOMER", oraConn)
oraConn.Open()
Dim myReader As OracleDataReader = oraCMD.ExecuteReader()
Do While (myReader.Read())
Console.WriteLine(vbTab & "{0}" & vbTab & "{1}",
myReader.GetInt32(0), myReader.GetString(1))
Loop
myReader.Close()
oraConn.Close()
End Sub
End Class

作出選擇
假定您還沒有決定選用 PHP,我可以斷言 PHP 的優勢遠遠超過它的弱點。(請參見表 1 中的概要。)這些優勢歸結為價格、速度和效率、安全性、跨平台適用性和開放原始碼機遇。它惟一的弱點是缺少一種純粹和完美的 OOP 實現,不過,這是一個很小的缺點。雖然語言結構的確有協助,但好的編碼最終是由實踐、執行、好的習慣和規範帶來的。
PHP與ASP.NET的比較
表 1
PHP 4 PHP5 ASP.NET
軟體價格 免費 免費 免費
平台價格 免費 免費 $
速度 強 強 弱
效率 強 強 弱
安全性 強 強 強
平台 強 強 弱(僅用於IIS)
平台 任意 任意 win32(僅用於IIS)
是否提供原始碼 是 是 否
異常 否 是 是
OOP 弱 強 強
價格
在此,我們不應簡單地考慮初始投資 - 對 PHP 而言,這很明顯是免費的 - 還應考慮實施、維護和調試的成本。對 PHP 而言,您可能需要購買 Zend 最佳化引擎。然而,使用 ASP,您將從一開始就進行投資,而且您還要為附加的技術 - 例如,執行圖形處理的庫 - 支付費用。但從長遠來看,PHP 將不會逼迫您升級並向您收取更多的許可費用。接觸過複雜許可的每一個人都知道,很多公司花費大量的時間和金錢僅是為了確保其順應性。此外,當在獲得錯誤修複的時間上,您得到的反應也有所不同。這當然將轉化成時間,時間又將轉化成總體開發的成本。
速度和效率
正如我先前提到的,ASP.NET 是一個允許您使用各種程式設計語言的架構。此外,它據稱擁有一個極好的物件導向模型。儘管所有這些都是真的,但在考慮到速度時,它卻是不利的。基於以上原因,在 ASP.NET 中運行 ASP 頁面與在 PHP 引擎中運行等效的 PHP 頁面相比需要執行更多代碼。PHP 是一種"快速粗糙"的解決方案,是為完成工作而設計的解決方案。雖然自 2.0 和 3.0 版本以來為其增強了許多強健性,但它仍然保留著核心的最佳化的高速方法。
速度不是惟一要考慮的因素。記憶體使用量率也很重要。
安全性
ASP.NET 運行在 IIS 上,而 IIS 已被攻擊了無數次 - 正如每隔一周的 IT 新聞報告所證實的。它已經成為這樣一種負擔,實際上,儘管其耗巨資進行銷售宣傳,但許多 IT 專業人員仍然拒絕用 IIS Web 服務器來開放他們的網路。而 PHP 使用 Apache。Apache 擁有已被證明的速度、可靠性和穩固的安全性的記錄。請瀏覽 http://www.securityfocus.com/,以擷取更多資訊。
跨平台適用性
ASP.NET 在 IIS 上運行,並且開始在 Apache 上運行(Apache 能夠在許多平台上運行)。PHP 從一開始就設計用於和 Apache 一起工作,因此您擁有許多可供選擇的已被證明和可靠的伺服器平台。
開放原始碼機遇
開放原始碼並不只靠一些異想天開的編程人員或想要節省一些許可費用的公司來開展。當您處理軟體本身的錯誤時,開放原始碼可能成為真正的天賜之物。
在使用 PHP 或 ASP.NET 的情況下,您都會有一個大的使用者群,他們使用軟體並且可能遇到錯誤。使用 ASP.NET,這些錯誤必須通過一個官方程式來通知、修複、測試,並在一個新的補丁或版本中消除。然而,PHP 補丁可以快速地得到修補並發布。目睹開放原始碼發展的任何人都知道,新的版本和補丁通常在幾天內而不是像商業軟體一樣在幾個星期或幾個月內推出。如果這不夠快,那麼您通常可以自己來修補問題(如果必要的話)。
PHP在WEB開發領域的優勢
你當前的位置:嘟妖老 --> 技術文檔全集 在多數WEB開發人員眼中,ASP和JSP都被認為是領跑者,而PHP卻被認為是個弱小的"掙紮者",或者說它是一門被貶低為業餘者才使用的語言,不值得參與企業WEB開發的競爭。在我看來,PHP沒有被當作競爭者的理由是評論者缺乏對它的瞭解,而且也不瞭解用於WEB開發的其他動作系統。和一些觀點相反,WINDOWS不再佔有WEB虛擬機器主機服務市場的最大份額,我猜想它在WEB開發這一領域裡也在被摧城拔寨。
在企業開發裡為什麼沒有PHP?
很顯然,PHP被認為落後ASP和JSP太多,以至於它是沒有什麼用的,但是這恰恰與事實不符。PHP本身就是一門強大的語言。它事實上在每個發行版的 LINUX上都有,在MAC OS X上也有。擷取開發和使用PHP代碼的構件(BUILDING-BLOCK)工具和軟體都是免費的。用於開發PHP應用程式的商業整合式開發環境(COMMERCIAL INTEGRATED DEVELOPMENT ENVIRONMENTS,IDES)也可以找到這樣的工具有KOMODO(它運行在LINUX和WINDOWS上)和ZEND STUDIO(這個應用程式能夠運行在任何帶有JAVA運行環境的作業系統上)。你幾乎可以在每個WEB虛擬機器主機上運行由PHP建立的網站,而不要考慮伺服器所啟動並執行是什麼作業系統,這一事實讓PHP更加具有吸引力。
PHP能夠提供什嗎?
先把PHP周圍有什麼忘掉一會兒,而考慮一下PHP自身能夠提供什麼。它是一門強健的伺服器端語言,能夠提供相當多的功能,而且能夠迅速地為頁面提供服務。
容易使用
使用C或者PERL或者具有類似風格和句法的另一種語言的任何使用者都能夠很快上手PHP。儘管它是設計用在WEB上的,但是它也能夠作為命令列語言使用。你正在編寫的WEB應用程式需要每個小時或者每天執行一次某些代碼嗎?使用CRON或者類似的計劃安排管理器,你可以計劃安排PHP代碼在你希望的時候執行,使用普通的命令解釋指令碼或者批次檔就能夠執行這樣的代碼。不需要自動呼叫瀏覽器就能夠查看專門的網頁,從而執行你的事件,也沒有必要依賴來訪者的點擊來告訴你的系統:特定的代碼需要在特定的時候被執行。PHP在這一領域可擴充性的事實是絕對具有吸引力的。
PHP的好處
我不是JSP或者ASP的老手,在此我也不想貶低這些語言。相反,我會把注意力放在PHP的好處上。
本地化
PHP 讓你能夠為網站的訪問者提供本地化的服務。當使用者點擊進入網站的時候,網站會根據他們瀏覽器的設定自動地以其母語向其提供頁面。要實現這一點不需要使用用於語言翻譯的煩雜檔案,而是使用和本地化的C程式所具有的相同能力,通過一個叫做GETTEXT的系統實現的。如果被請求的語言檔案存在,那麼使用者所看到的文本就是其母語;如果語言檔案不存在,那麼文本就是預設的英語或者其他任何你所指定的語言。許多本地化的UNIX應用程式都將GETTEXT作為標準,它讓第三方的翻譯變得輕而易舉。
輕易地使用命令列
PHP支援在需要的地方設定和執行命令列程式。使用標準的UNIX DIFF工具,它能夠建置錯誤最後一次修改同要使用電子郵件發送到錯誤的所有者的當前注釋之間的不同。PHP代碼對在系統上所編寫的兩個檔案執行 DIFF,將其輸出作為輸入,再產生一個要發送的電子郵件。這封電子郵件是通過PHP自己來發送的。
其他好處
上面的只是我在自己程式裡所用到的強大功能中的兩個,而還其他的功能。例如,你可以:
即時建立簡單的FLASH動畫。
即時建立PDF文檔。
使用進階數學功能,以及物件導向的編程技術。
讀取和寫入到本地和IMAP郵箱。
在PHP裡就可以使用任何標準的INTERNET協議。想要編寫基於PHP的FTP、WEB或者新聞用戶端?沒有問題!只使用PHP你就完全能夠編寫出使用標準TCP/IP通訊端的用戶端和伺服器,並以此建立自己的協議。
實現對加密的支援,以及對各種資料庫伺服器的支援。
缺乏遠見的評論
我覺得,那些尋找頂級WEB開發語言而排除掉PHP的人是極其短見的。我使用PHP編寫代碼已經有很多年了,無論是像錯誤追蹤系統這樣的進階功能,還是簡單地重複使用頁首和頁尾這樣的普通功能,我都使用PHP編寫過。我用PHP編寫過半靜態頁面,也編寫過全功能的多媒體示範。我不是唯一一個使用 PHP的人。如果PHP不值得引起注意,如果它只是小兒科或者愛好者的語言,那它為什麼會是在WEB開發上成長最快的語言呢?如果它沒有ASP或者JSP 那麼強大,那麼它為什麼會被用在流量巨大WEB網站上?例如YAHOO,據說它就是由PHP建成的。
開發人員習慣用熟悉的產品
我敢肯定,ASP 和JSP有它們各自的強項,但是我相信人們是用它們不是因為它們能夠提供比PHP更加強大的功能,而是因為人們已經瞭解了它們,並希望以自己習慣的方法編寫代碼。排除PHP只能表示對這一語言的無知。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.