PHP 碰上 Python

編寫網頁應用的語言多不勝數,人們總喜歡拿來互相比較,初學者也有興趣知道不同語言的特性,這次我們介紹 Ashish 所寫的「PHP 碰上 Python」,從語言特性到執行效能,比較 PHP 和 Python 兩種語言。

我們根據什麼來判斷一種編程語言比另一種好?有人說是靈活性、開發環境的友善程度、牌照政策(開源的或商業性的)、社區、可移植性、動態數據類型、支援不定數目的函式參數、把物件表達為一串字符的能力等等,文檔當然也是重要的因素,特別是當你尚未熟悉這種語言而需要提升你的技巧的時候。

支持 PHP 的特色:

  • 語法很接近 C 和 Perl,使用 { } 和 $ 符號
  • 使用類似 C 語言的 switch 語句和 do....while 結構
  • 遞增、遞減及指定運算元
  • 三元運算元/語句(... ? ... : ...)
  • 缺乏組織的函式名稱,目前 PHP 沒有命名空間,函式往往靠名稱的字首來標識其來源(但經常都沒有字首),有些人把函式放入類別中來模擬命名空間
  • 一種非常隨意的編程語言,全域變量經常被用作函式的引數(全域變量不應如此使用的,那不是 PHP 的錯)
  • 在很多系統中已經預先安裝
  • 別名(「$a =& $b」表示當 $b 改變,$a 也隨之改變)(應該叫作「參考」而不是「別名」,但 PHP 就是這樣叫)
  • 一種陣列類型,可作為一串值,也可作為一串「鍵/值」組
  • 出色的文檔
  • 龐大的用戶社區,網上有極龐大的源碼庫

支持 Python 的特色

  • 命名空間及模塊
  • 細小的核心
  • 透過縮排來標誌區塊結構,不使用大括號,使程式碼看起來更漂亮
  • 清楚、簡潔的語法
  • 藉著 docstrings 及 pydoc 自動產生文檔(PHP5 有 reflection 及 doc strings)
  • 真正的物件導向,及「first class」類別和函式
  • 在標準函式庫中大量使用類別
  • 多重繼承
  • 物件導向方式的文件處理
  • 方法鏈
  • 一切東西都是參考
  • 所有數據類型都可以使用「del」語句
  • 一致的大小寫區分政策(PHP 只對變量名稱分大小寫,函式名稱不分大小寫)
  • 簡單的陣列切片語法
  • 反覆器(只出現在 PHP5)
  • 結構化異常處理(只出現在 PHP5)
  • 操作符超載
  • 線程
  • 大量高層次的數據類型(列表、元組、字典、陣列等)
  • 日期不受 Unix 的時間戳記所限(<1970, >2038)
  • 支援所有主要的圖形用戶介面架構
  • 強大的國際化和 Unicode 支援
  • 成熟、穩定和向上兼容
  • 往往導致更多的可擴展性應用

與 PHP 那樣把網頁開發功能直接建在語言核心不同,Python 藉著附加模塊來提供網頁開發能力,基本 CGI 模塊提供基本的 CGI 功能,它是隨 Python 而來的標準函式庫一部份,Python 還有大量由第三方提供的模塊,有些是相輔相成,有些互相競爭,由此產生了一個更靈活的網頁開發基礎。

這種靈活性是有代價的,首先,可選擇的範圍可能令人困惑,除非你是經驗豐富的 Python 開發者,否則 PHP 會更容易上手。其次,在共享伺服器的環境,PHP 比 Python 更常見。

另一個不同之處是,PHP 是嵌入網站伺服器中,而 Python 的應用程式則可能同樣地嵌入在網站伺服器,也可能是一個單獨的進程。

現在我們比較一下兩種語言找尋 10000 以下所有質數的速度,每一個測試都會執行三次,以優化測試的結果。

$ time ./script.php 
語言  程式碼 1  程式碼 2  程式碼 3 
PHP  1.359 1.753 1.191
Python  1.894  1.636 1.634

結果似乎表明 PHP 比 Python 執行得更快,不過要注意一點,PHP 在執行短小的程式碼時比較快,但當我們討論到可擴展的大型系統時,Python 有更好的效能。尋找 10000 之內的質數是很短小的程式碼,這正好解釋了為何大多數小型的網頁應用都使用 PHP,PHP 得到幾個巨頭的採用也是原因之一。

我們再做一個牽涉數學運算的速度比較。測試用的程式碼包含一個 2,000,000 次的迴路,每次計算 N + N 的 MD5 散列值,其中 N 是迴路的執行次數。

結果:

語言  第一次  第二次  第三次  第四次 
PHP  21.4227  21.1122  9.811 9.857 
Python  9.8737  9.7241  4.429  4.280 

可以看到,執行這類操作時 Python 比 PHP 快兩倍以上,這在接近執行一個數學算法時優勢更加明顯。

有人認為,Python 是為數學算法而優化的,所以在這方面輕易把 PHP 擊倒,但如果比較兩種語言在同一時間內可以產生多少網頁,PHP 明顯快得多。

其他比較編程語言的重要因素包括:

執行速度

對於相當複雜的工作,兩種語言均沒有明顯的優勢,每一種都在特定的工作有較好的效能,所以可以說,99% 情況下我們無須理會哪一種執行得較快。

編寫的速度

假設兩種語言都以一個可接受的速度運行(事實上的卻如此),這就是第二個最重要的指標,Ashish 承認他對 Python 的熟悉程度不能夠公平地判斷哪一種語言的編寫速度較快,但他認為,迄今為止 Python 似乎更快。

容易維護

雖然 Ashish 使用 Python 的時間不夠長,但他很自信的認為 Python 的程式更容易維護。雖然 Ashish 在編寫 PHP 時必定會縮排,但他更喜歡 Python 無須大括號而強制縮排的語法,他也喜歡 Python 的作用領域存取語法多於 PHP(object.property 相對 $object->property)。當然這些都是個人品味的問題,如何取捨還是由你來決定。

易於安裝/可移植性

這裡 PHP 取勝了,在 PHP 中你無須像 Python 那樣自行輸出 HTTP headers,大多數的服務供應商都支援 PHP,PHP 也更易於連接到數據庫,網上也似乎有更多相關的教學文件。

支援/社區

Ashish 認為 PHP 的社區和支援都比較優勝,但同時他注意到大量 Python 社區正提供日益成熟的支援。

其他參考資料

以下是 Ashish 認為不錯的編程語言比較:C++ / Java / Python / Ruby / Jython / JRuby / Groovy 效能比較

結論 

鑒於 Python 在開發可擴展應用程式的優勢,Ashish 會選取 Python,這不是說 PHP 不能用來開發這類應用程式,只是 Python 比較容易。而且 Google 的 Google App Engine 支援 Python,Python 編寫的網站可以在 Google 伺服器上免費寄存,它也支援 Python 開發架構 Django,所以 Ashish 寧可投資在 Python 上。另一方面 PHP 擁有 60% 的市場,快將推出的新版本(PHP6)肯定會加入命名空間、高層次的數據結構等,令兩者的差距縮窄。


原文網站 / 轉載自:  HKPUG .NET

你可能感兴趣的:(Python)