簡體   English   中英

代碼執行速度:ASP.NET-MVC與PHP

[英]Speed of code execution: ASP.NET-MVC versus PHP

我對此同事的看法很友好,我個人的觀點是,與用PHP編寫的相同項目相比,ASP.NET-MVC編譯的Web應用程序可以更高效/更快地運行。 我的朋友不同意。

不幸的是,我沒有任何可靠的數據可以用來支持我的論點。 (他也不)

為此,我嘗試向Google尋求答案,以嘗試找到證據證明他是錯誤的,但是大多數時候,辯論都轉向開發哪種平台,成本,安全性等方面更好。為此,論證我真的不在乎任何。

我想知道堆棧溢出社區對使用MVC在ASP.NET中開發的網站與使用PHP開發的完全相同的網站的原始速度/效率有何看法?

在現實世界中,有沒有人將這兩種技術的性能進行比較的實際例子?

(我意識到對於你們中的某些人來說,這很可能是無關緊要的,也許是愚蠢的論點,但這是一個論點,我仍然想聽聽這里的優秀人士的回答)

之所以很難進行比較,是因為各個堆棧之間的差異意味着您最終做同一件事的方式不同,如果出於比較目的而進行相同的操作,那將不是一個很現實的測試。

我喜歡的PHP,以其最基本的形式加載了每個請求,被解釋然后丟棄。 在這方面,它非常類似於CGI(考慮到它已有15年的歷史,這不足為奇)。

多年來,多年來已經進行了各種優化來提高性能,例如,最顯着的是使用APC進行操作碼緩存(以至於APC將成為PHP 6的標准部分,而不是像現在這樣的可選模塊)。

但是,PHP腳本基本上還是暫時的。 會話信息通常是基於文件的,並且是互斥的(session_start()阻止其他腳本訪問同一用戶會話,直到session_commit()或腳本完成),而ASP.NET並非如此。 除了會話數據外,在ASP.NET(或者Java,ASP.NET與之更相似)中的應用程序上下文中存在對象也很容易(並且很正常)。

這是一個關鍵區別。 例如,PHP中的數據庫訪問(使用mysql,mysqli,PDO等)是瞬時的(盡管有持久連接),而.Net / Java幾乎總是使用持久連接池,並以此為基礎創建ORM框架等,超出任何特定請求的緩存。

作為字節碼解釋平台,ASP.NET從理論上講速度更快,但是PHP可以執行的操作限制如此之高,以至於對大多數人而言都是無關緊要的。 例如,互聯網上訪問量最高的20個站點中有4個是PHP。 開始擴展時,開發速度,健壯性,運行環境的成本等往往比任何理論上的速度差異都重要得多。

請記住,.Net具有原始類型,類型安全性以及諸如此類的事物,這些事物會使代碼比PHP運行它更快。 如果要進行不公平的測試,請在兩個平台上對一百萬個隨機的64位整數數組進行排序。 ASP.NET將殺死它,因為它們是原始類型,並且簡單數組將比PHP的關聯數組更有效(並且PHP中的所有數組最終都是關聯的)。 另外,在32位操作系統上的PHP將沒有本地64位整數,因此會遭受極大的損失。

還應該指出,ASP.NET是預編譯的,而PHP是即時解釋的(不包括操作碼緩存),這可以有所作為,但是PHP在這方面的靈活性是一件好事。 能夠在不啟動服務器的情況下部署腳本非常棒。 只需將其放入即可使用。 輝煌。 但這最終會降低性能。

最終,盡管我認為您是在爭論真正無關緊要的細節。

ASP.NET運行速度更快。 ASP.NET開發速度更快。 購買快速的計算機,如果您做認真的商業Web應用程序,請盡情享用

與PHP相比,ASP.NET代碼在發布模式下進行構建,優化,緩存等時,其執行速度要比PHP快得多。但是,對於網站(大型播放器(如Facebook)除外)而言,它的重要性降低了-大多數時間是頁面呈現時間訪問和查詢數據庫。

在連接數據庫方面,ASP.NET更好-在asp.net中,我們通常使用LINQ,它將我們的對象查詢轉換為SQL Server數據庫中的存儲過程。 此外,與數據庫的連接是持久的,一個網站一個網站,無需重新連接。

相比之下,PHP無法在請求之間保持sql服務器連接,它無法連接,從db抓取數據並銷毀,而在重新連接數據庫時通常占頁面呈現時間的20%至30%。

同樣,每次請求時,整個Web應用程序配置都會重新加載到php中,在asp.net中,它會持久存儲在內存中。 在大型企業框架(如symfony / symfony2)中可以很容易地看到它,很多渲染時間是symfony內部進程,因為asp.net一次加載它,並且不會浪費服務器進行無用的工作。

ASP.NET可以將對象保存在應用程序內存中的緩存中-在php中,您必須將其寫入文件,或使用像memcache這樣的黑客工具。 使用內存緩存會大量處理並發和危險問題(在文件中存儲緩存也有並發性的問題-每個請求都會啟動apache服務器的新線程,許多請求可以一次工作-您必須考慮兩者之間的並發性線程,這需要花費大量的開發時間,並且並不總是有效,因為php在語言上沒有任何互斥機制,因此您無法以任何方式創建關鍵部分)。

現在有關開發速度的問題:ASP.NET具有為其設計的兩個主要框架(Webforms和MVC),並隨環境一起安裝,在PHP中必須獲得一個開源框架。 像asp.NET一樣,php中沒有標准框架。

ASP.NET語言是如此豐富,標准庫提供了針對許多常見問題的解決方案,其中PHP標准庫是裸露的……它們無法保持一種命名約定。

.NET具有類型,其中PHP是動態的,因此這意味着您無法運行源代碼,除非您運行它或編寫單元測試。

.NET具有出色的IDE,其中PHP IDE的性能中等或中等(PHPStorm仍然比VS + resharper差很多,甚至沒有它)

將ASP.NET腳手架集成到環境中后,會從命令行觸發symfony中的PHP腳手架。

如果您的計算機速度較慢,例如我(一核2,2ghz),則開發asp.net頁面可能會很痛苦,因為您必須在源代碼發生任何更改的情況下重新編譯項目,而PHP代碼會立即刷新。

與C#語法相比,PHP語言語法還沒有完成,不夠固定和裸露。 C#中的強類型和許多靈活的語言功能可以加快開發速度,並減少代碼的錯誤。

以我的經驗(非硬性基准測試),Asp.Net的原始速度肯定可以與PHP競爭(在某些方面甚至超過PHP)。 但是,與許多其他與語言選擇相關的問題類似,(在我看來)以下陳述是有效的(在我看來):

  • 有x語言的慢速越野車網站(無論是PHP還是Asp.Net)
  • 有很多很棒的語言x的網站(無論是PHP還是Asp.Net)

我要說的是:開發人員的(人才)對整體速度的影響將大於在兩種(在某種程度上抽象上相等)技術之間進行選擇的可能性。

確實,“整體速度”比較沒有多大意義,因為除非您處於非常特殊的專業領域(您尚未告知我們),否則兩者都可能以某種方式相互追趕。

我已經做過性能測試。

程序:10000000個數字的總和

在此處輸入圖片說明

在此處輸入圖片說明

給定的輸出證明php比C#慢。

我會說ASP.net

注意事項:

  • ASP.net已預編譯
  • ASP.net通常用C#編寫,其執行速度應比PHP快

當然,差異很小。 兩者都有優點,我認為PHP易於部署,並且可以在任何服務器上運行,而不僅僅是IIS。 我非常喜歡ASP.net MVC。

如果不進行任何優化,.net編譯的應用程序當然比php運行“更快”。 但是您是正確的,它是一個愚蠢且無關緊要的論點,因為除了吹牛的權利之外,它對現實世界沒有影響。

我是這兩種技術(ASP.Net c#和PHP5)的開發專家。 經過多年的工作和在實際生產環境中進行比較,這些是我的印象:

  • 首先,不能對它們進行比較,從而形成一個值1.000.000相加的循環,這不是真實情況。

  • 在我的開發環境中將它們與實際生產環境進行比較是不同的。 例如:在開發中,ASP.Net默認情況下不使用IIS,請使用具有不同優化功能的內部開發服務器。 在開發人員中,沒有並發。

所以我的意見是下一個:

  • 循環1.000.000次c#會更快。(無意義)

  • 服務於訪問DB,顯示圖像,具有表格等的真實頁面。ASP.Net比PHP慢。

  • ASPX頁面的重量比PHP重10倍,因此最終用戶要等待更多時間來獲取頁面。

  • ASPX的開發速度比PHP慢,這很重要,因為最終是金錢。 我們在PHP中開發的速度比ASP.Net快35%,因為每次您要檢查smthg時都必須編譯並重新啟動。

  • 在大型項目中,長期使用ASP.Net可以更好地避免錯誤並具有復雜的體系結構。

  • 由於Windows Servers,IIS,...。最后,您需要一個功能強大的服務器來在ASP上容納與PHP相同數量的用戶。 例如:我們為ASP.net提供20.000個並發用戶,而在PHP中,同一台服務器可以獲得30.000個並發用戶。

唯一重要的不是循環是否更快。 問題是網站是真實的並且正在生產中,它們可以容納多少用戶,頁面有多沉重(===來自用戶的更多等待時間,更多的服務器凈費用,更多的服務器磁盤費用,更多的內存費用)服務器)。 嘗試並發檢查時間,您會看到。

希望能幫助到你。

通常,ASP.Net在給定的硬件上將比PHP表現更好。 ASP.Net MVC仍然可以做得更好(在這里可以作為執行詞)。 大多數平台在設計時都考慮了企業發展。 可測試的代碼,關注點分離等。ASP.Net中的許多膨脹來自頁面內的對象堆棧(嵌套控件)。 預編譯使該性能更好,但這可能是一個關鍵問題。 使用基於Web窗體的視圖引擎(其他可用),MVC傾向於減少嵌套。

Web應用程序出現最大減慢的地方通常是遠程服務,尤其是數據庫持久性。 PHP編程時沒有連接池或內存中會話狀態的好處。 可以使用memcached和其他性能更高的服務層(也可用於.Net)來克服此問題。

實際上,這取決於站點/應用程序的細節。 這個站點恰好在相當適中的硬件上運行MVC。 PHP下的類似站點可能會自行承擔費用。 其他要考慮的事情。 IIS,Apache,LightHTTPD等。老實說,php與asp.net的關系遠不止原始性能差異。 PHP不能很好地適合大型,復雜的應用程序,就像asp.net mvc一樣,它是如此簡單...它本身與VS + SCC有更多關系。

需要注意的是,問題是.NET MVC與PHP,而不是.NET(Web窗體)與PHP。 我沒有事實,但是總體感覺是PHP網站的運行速度比.NET Web表單網站快(並且我僅運行.NET)。 .NET Web表單盡管經過編譯與解釋,但PHP的運行速度通常較慢,因為由.NET引擎自動生成的所有代碼塊都可以為設計模式下使用的每個<asp:control>呈現HTML。 讓.NET Web表單在速度上與PHP競爭是一個完全的惡心,它始於設置EnableViewState = false,並且可能最終會在runat = server上使用每個html控件...瘋了嗎?

現在,MVC是一個不同的故事,我使用.NET MVC2創建了兩個網站,感覺不錯,您現在可以感覺到速度了! 而且代碼就像任何PHP網站一樣干凈。 因此,現在,MVC允許您像PHP一樣編寫干凈的代碼,並且MVC是針對PHP解釋編譯的,它只能導致一件事,即MVC比PHP快……時間將證明,通常意義上是“ MVC網站運行比PHP更快”,那么我們今天在這里所說的話將是正確的。

再見/!

我傾向於同意您的觀點(ASP.NET MVC更快),但是為什么不與您的朋友下注並分享結果呢? 創建一個非常簡單的從MySQL數據庫派生的DYNAMIC頁面,並多次加載該頁面。

例如,創建一個包含1,000,000行的表,其中包含一個順序的主鍵,然后在第二列中包含一個隨機#。 您的每個網站都可以接受GET中的主鍵,根據傳入的鍵檢索隨機數,並以某種類型的動態生成的html顯示隨機數。

我很想知道結果……如果您有博客或類似博客,那么世界其他地方也一樣(這個問題總是被問到)。

如果您也可以在常規ASP中構建這個簡單的小應用程序,那就更好了。 哎呀,如果測試設計得當,我什至會為您支付這些結果。 認真地說-在這里表達您的興趣,我會給您發送電子郵件。

C ++ ...現在,戰斗將在PHP和ASP.NET之間進行。 PHP將在易用性上取勝,ASP.NET將在Windows Server生態系統中的性能上取勝。 許多以php開頭的較大的網站都已升級為C ++。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM