2009-03-28 36 views
65

Tôi có một đối số thân thiện với một đồng nghiệp về vấn đề này và ý kiến ​​cá nhân của tôi là ứng dụng web được biên dịch ASP.NET-MVC sẽ chạy hiệu quả hơn/nhanh hơn so với cùng một dự án sẽ được viết bằng PHP. Bạn tôi không đồng ý.Tốc độ thực thi mã: ASP.NET-MVC so với PHP

Rất tiếc, tôi không có bất kỳ dữ liệu chắc chắn nào mà tôi có thể sử dụng để sao lưu đối số của mình. Để làm điều này, tôi đã cố gắng tìm kiếm câu trả lời cho Google để tìm ra bằng chứng để chứng minh anh ta sai, nhưng hầu hết thời gian cuộc tranh luận đều trở thành nền tảng nào tốt hơn để phát triển, tính năng bảo mật, chi phí, vv ... Vì lý do này, tôi thực sự không quan tâm về bất kỳ điều gì.

Tôi muốn biết cộng đồng tràn ngăn xếp nghĩ gì về tốc độ/hiệu quả của trang web nói chung được phát triển trong ASP.NET với MVC so với chính xác cùng một trang web được phát triển với PHP?

Có ai có bất kỳ ví dụ thực tế nào trong các tình huống thực tế so sánh hiệu suất của hai công nghệ không?

(Tôi nhận thấy đối với một số bạn này rất có thể là một cuộc tranh cãi không liên quan và có thể ngu ngốc, nhưng nó là một cuộc tranh cãi, và tôi vẫn muốn nghe câu trả lời của những người tốt ở đây tại SO)

+32

Trong trường hợp bạn không biết, StackOverFlow được xây dựng trên ASP.NET MVC. Vì vậy, đây là một ví dụ tốt đẹp của một dự án tuyệt vời bằng cách sử dụng ASP.NET MVC. –

Trả lời

63

Đó là một so sánh khó để thực hiện bởi vì sự khác biệt trong các ngăn xếp tương ứng có nghĩa là bạn sẽ làm điều tương tự khác và nếu bạn làm như vậy cho mục đích so sánh thì đó không phải là một thử nghiệm rất thực tế.

PHP, mà tôi thích, ở dạng cơ bản nhất được tải với mọi yêu cầu, được giải thích và sau đó bị loại bỏ. Nó rất giống với CGI về mặt này (điều này không có gì đáng ngạc nhiên khi xem xét nó khoảng 15 tuổi).

Bây giờ trong nhiều năm tối ưu hóa khác nhau đã được thực hiện để cải thiện hiệu suất, đáng chú ý nhất là mã hóa bộ nhớ đệm với APC, chẳng hạn như APC sẽ là một phần chuẩn của PHP 6 và không phải là một mô-đun tùy chọn như bây giờ).

Nhưng các tập lệnh PHP vẫn cơ bản thoáng qua. Thông tin phiên là (thông thường) dựa trên tệp và loại trừ lẫn nhau (session_start() chặn các tập lệnh khác truy cập cùng một phiên người dùng cho đến khi session_commit() hoặc tập lệnh kết thúc) trong khi đó không phải là trường hợp trong ASP.NET. Ngoài dữ liệu phiên, nó khá dễ dàng (và bình thường) để có các đối tượng sống trong ngữ cảnh ứng dụng trong ASP.NET (hoặc Java cho vấn đề đó, ASP.NET nào tương tự hơn).

Đây là điểm khác biệt chính. Ví dụ, truy cập cơ sở dữ liệu trong PHP (sử dụng mysql, mysqli, PDO, vv) là tạm thời (các kết nối liên tục) trong khi .Net/Java sẽ gần như luôn luôn sử dụng các nhóm kết nối liên tục và xây dựng trên đầu trang này để tạo các khuôn khổ ORM và tương tự, bộ nhớ cache vượt quá bất kỳ yêu cầu cụ thể nào.

Là nền tảng giải mã bytecode, ASP.NET về mặt lý thuyết nhanh hơn nhưng giới hạn cho những gì PHP có thể làm cao đến nỗi không liên quan đến hầu hết mọi người. 4 trong số 20 trang web được truy cập hàng đầu trên internet là ví dụ về PHP. Tốc độ phát triển, mạnh mẽ, chi phí vận hành môi trường, vv… có xu hướng quan trọng hơn nhiều khi bạn bắt đầu mở rộng quy mô hơn bất kỳ sự khác biệt về tốc độ lý thuyết nào.

Hãy nhớ rằng .Net có các kiểu nguyên thủy, loại an toàn và các loại điều này sẽ làm cho mã nhanh hơn PHP có thể chạy nó. Nếu bạn muốn làm một thử nghiệm hơi bất công, hãy sắp xếp một mảng gồm một triệu số nguyên ngẫu nhiên 64 bit trong cả hai nền tảng. ASP.NET sẽ giết nó vì chúng là các kiểu nguyên thủy và các mảng đơn giản sẽ hiệu quả hơn các mảng kết hợp của PHP (và tất cả các mảng trong PHP đều là kết hợp cuối cùng). Cộng với PHP trên một hệ điều hành 32 bit sẽ không có một số nguyên 64 bit do đó sẽ phải chịu đựng rất nhiều cho điều đó. Nó cũng nên được chỉ ra rằng ASP.NET được biên dịch trước trong khi PHP được giải thích on-the-fly (không bao gồm bộ nhớ đệm opcode), mà có thể tạo sự khác biệt nhưng tính linh hoạt của PHP trong lĩnh vực này là một điều tốt . Việc có thể triển khai một kịch bản mà không cần nảy lên máy chủ của bạn là rất lớn. Chỉ cần thả nó vào và nó hoạt động. Rực rỡ. Nhưng cuối cùng thì nó cũng kém hiệu quả hơn.

Cuối cùng, mặc dù tôi nghĩ bạn đang tranh cãi về những gì thực sự là một chi tiết không liên quan.

+4

"Là nền tảng phiên dịch bytecode, ASP.NET" - không có cách diễn giải cho Java hoặc .NET. Có một trình biên dịch 2 giai đoạn: mã nguồn 1 tới bytecode/IL, 2-bytecode/IL thành mã gốc. Cuối cùng chỉ có mã gốc được thực thi. –

+7

So sánh tuyệt vời và sâu sắc. Nhưng tôi phải chỉ ra một điều "... tính linh hoạt của PHP trong vấn đề này là một điều tốt. Việc có thể triển khai một kịch bản mà không cần nảy lên máy chủ của bạn là rất lớn." Bạn chắc chắn KHÔNG cần phải trả lại máy chủ của bạn trong ASP.NET để phát hành các thay đổi mã. – Tion

+0

@Tion Tôi ít quen với ASP.NET triển khai hơn một số khung công tác khác nhưng trong Java chẳng hạn bạn có thể thả các tệp JSP và * đôi khi * có thể tải lại các lớp nhưng trong nhiều trường hợp bạn chỉ cần khởi động lại. So sánh như thế nào? – cletus

18

Trong kinh nghiệm của tôi (không phải hardbenchmarked) Asp.Net chắc chắn có thể cạnh tranh (và trong một số khu vực vượt qua) PHP về tốc độ nguyên. Nhưng tương tự với rất nhiều câu hỏi liên quan đến ngôn ngữ khác mà câu sau đây là (trong trường hợp này) hợp lệ (theo ý kiến ​​của tôi):

  • Có các trang web chậm, lỗi trong ngôn ngữ x (có thể là PHP hoặc Asp. net)
  • có là rất lớn, các trang web nhanh bằng ngôn ngữ x (có thể là PHP hoặc Asp.Net)

gì tôi đang cố gắng để nói: các (tài năng của) nhà phát triển sẽ ảnh hưởng đến tốc độ tổng thể hơn hơn là một sự lựa chọn giữa hai công nghệ (tương đương gần như ở một mức độ trừu tượng).

Thực sự, so sánh 'tốc độ tổng thể' không có ý nghĩa gì khi cả hai có thể bắt kịp nhau theo cách này hay cách khác trừ khi bạn đang ở trong một chuyên gia thích hợp cụ thể (mà bạn chưa thông báo cho chúng tôi về).

1

Tôi có xu hướng đồng ý với bạn (ASP.NET MVC nhanh hơn), nhưng tại sao không đặt cược thân thiện với bạn bè của bạn và chia sẻ kết quả? Tạo một trang DYNAMIC thực sự đơn giản, bắt nguồn từ cơ sở dữ liệu MySQL và tải trang nhiều lần.

Ví dụ: tạo bảng có 1.000.000 hàng chứa khóa chính tuần tự và sau đó là một số ngẫu nhiên trong cột thứ hai. Mỗi trang web của bạn có thể chấp nhận khóa chính trong GET, truy xuất số ngẫu nhiên dựa trên khóa được chuyển vào và hiển thị số ngẫu nhiên trong một số loại html được tạo động.

Tôi rất muốn biết kết quả ... và nếu bạn có blog hoặc tương tự, phần còn lại của thế giới cũng vậy (câu hỏi này được hỏi TẤT CẢ thời gian).

Sẽ tốt hơn nếu bạn có thể xây dựng ứng dụng nhỏ đơn giản này trong ASP thông thường. Heck, tôi thậm chí sẽ trả tiền cho bạn cho những kết quả này nếu thử nghiệm được thiết kế tốt. Nghiêm túc - chỉ thể hiện sự quan tâm của bạn ở đây và tôi sẽ gửi cho bạn e-mail của tôi.

+0

Đó là một ý tưởng thực sự tuyệt vời. Tôi chỉ có thể thử điều đó. – 7wp

3

Nói chung ASP.Net sẽ hoạt động tốt hơn trên một phần cứng nhất định so với PHP. ASP.Net MVC có thể làm tốt hơn (có thể là từ tác dụng ở đây). Phần lớn nền tảng được thiết kế với sự phát triển của doanh nghiệp. Mã thử nghiệm, tách mối quan tâm vv Rất nhiều bloat trong ASP.Net đến từ ngăn xếp đối tượng trong trang (điều khiển lồng nhau). Biên dịch trước làm cho trình diễn tốt hơn, nhưng nó có thể là một vấn đề chính. MVC có xu hướng cho phép làm tổ ít hơn, bằng cách sử dụng công cụ xem dựa trên webform (những người khác có sẵn).

Trường hợp sự chậm trễ lớn nhất trong các ứng dụng web xảy ra có xu hướng là dịch vụ từ xa, đặc biệt là sự kiên trì của cơ sở dữ liệu. PHP được lập trình mà không có lợi ích của việc kết nối tổng hợp hoặc trạng thái phiên trong bộ nhớ. Điều này có thể được khắc phục với memcached và các lớp dịch vụ có hiệu suất cao hơn (cũng có sẵn cho .Net).

Nó thực sự đi kèm với chi tiết cụ thể của trang web/ứng dụng. trang web này xảy ra để chạy MVC trên phần cứng khá khiêm tốn khá tốt. Một trang web tương tự dưới PHP có khả năng sẽ rơi vào trọng lượng riêng của nó. Những thứ khác để xem xét. IIS vs Apache vs LightHTTPD vv Thành thật mà nói php vs asp.net là nhiều hơn so với sự khác biệt hiệu suất thô. PHP không cho vay chính nó tốt cho các ứng dụng lớn, phức tạp gần như rất nhiều như asp.net MVC, đó là đơn giản ... Điều này chính nó có nhiều hơn để làm với VS + SCC hơn bất cứ điều gì khác.

5

Nếu không có bất kỳ tối ưu hóa nào, một ứng dụng được biên dịch .net sẽ chạy "nhanh hơn" so với php. Nhưng bạn chính xác rằng đó là một lập luận ngu ngốc và không liên quan bởi vì nó không mang về thế giới thực ngoài quyền khoe khoang.

1

Cần lưu ý rằng câu hỏi là .NET MVC so với PHP, chứ không phải .NET (Web Forms) so với PHP. Tôi không có sự thật, nhưng cảm giác chung là các trang web PHP chạy nhanh hơn các trang web biểu mẫu Web .NET (và tôi chỉ sử dụng .NET). Các biểu mẫu web .NET mặc dù được biên dịch và giải thích PHP thường chậm bởi vì tất cả đoạn mã được tự động phát sinh bởi công cụ .NET để hiển thị HTML cho từng điều khiển < asp: control> bạn sử dụng trên chế độ thiết kế. Bắt một mẫu web .NET để cạnh tranh về tốc độ với PHP là một odisea hoàn chỉnh bắt đầu bằng việc thiết lập EnableViewState = false, và có thể kết thúc bằng cách sử dụng mọi điều khiển html với runat = server ... crazy uh?

Bây giờ, MVC là một câu chuyện khác, tôi đã thực hiện hai trang web bằng cách sử dụng .NET MVC2 và cảm giác là tốt, bạn có thể cảm nhận được tốc độ ngay bây giờ! và mã là sạch sẽ như bất kỳ trang web PHP nào. Vì vậy, bây giờ, MVC cho phép bạn viết mã sạch như PHP, và MVC được biên dịch dựa trên PHP, nó chỉ có thể dẫn đến một điều, MVC nhanh hơn PHP ... thời gian sẽ chứng minh, khi ý thức chung là "các trang web MVC chạy nhanh hơn PHP "thì chúng ta sẽ đúng về những gì tôi nói ở đây ngày hôm nay.

xem/bạn /!

+1

Tôi có cùng cảm giác. – Nestor

10

Tôi muốn nói ASP.net

Những điều cần xem xét:

  • ASP.net là tiền biên dịch
  • ASP.net thường được viết bằng C#, mà nên thực hiện nhanh hơn so với PHP

Được cấp, sự khác biệt rất nhỏ. Có lợi thế cho cả hai, tôi nghĩ PHP dễ triển khai hơn nhiều và có thể chạy trên bất kỳ máy chủ nào không chỉ IIS. Tôi khá thích ASP.net MVC mặc dù.

26

ASP.NET chạy nhanh hơn. Phát triển ASP.NET nhanh hơn. Mua máy tính nhanh và tận hưởng nó nếu bạn thực hiện các ứng dụng web kinh doanh nghiêm trọng

Mã ASP.NET thực thi nhanh hơn rất nhiều so với PHP khi được xây dựng trong chế độ Phát hành, được tối ưu hóa, lưu trong bộ nhớ cache, v.v ... Nhưng đối với trang web (ngoại trừ những người chơi lớn, như Facebook), điều này ít quan trọng hơn - thời gian hiển thị trang nhiều nhất là truy cập và truy vấn cơ sở dữ liệu.

Trong kết nối cơ sở dữ liệu ASP.NET là tốt hơn rất nhiều - trong asp.net chúng tôi thường sử dụng LINQ dịch các truy vấn đối tượng của chúng tôi vào các thủ tục được lưu trữ trong cơ sở dữ liệu máy chủ SQL. Ngoài ra kết nối với cơ sở dữ liệu là liên tục, một cho một trang web, không cần phải kết nối lại.

PHP, so sánh, không thể giữ kết nối máy chủ sql giữa yêu cầu, nó kết nối, lấy dữ liệu từ db và phá hủy, khi kết nối lại cơ sở dữ liệu thường là 20-30% thời gian hiển thị trang.

Toàn bộ cấu hình ứng dụng web được tải lại trong php theo từng yêu cầu, trong đó asp.net nó vẫn tồn tại trong bộ nhớ. Có thể dễ dàng thấy trong các khung công tác lớn như symfony/symfony2, rất nhiều thời gian render là symfony internal processess, nơi asp.net tải nó một lần và không lãng phí máy chủ của bạn cho công việc vô dụng.

ASP.NET có thể giữ đối tượng trong bộ nhớ cache trong bộ nhớ ứng dụng - trong php bạn phải ghi nó vào tệp, hoặc sử dụng hack như memcache. sử dụng memcache là rất nhiều vấn đề với concurrency và các vấn đề nguy hiểm (lưu trữ cache trong các file cũng có vấn đề riêng với concurrency - mọi yêu cầu bắt đầu thread mới của apache server và nhiều request có thể làm việc cùng một lúc - bạn phải suy nghĩ về sự tương tranh giữa chúng chủ đề, phải mất rất nhiều thời gian phát triển và không phải lúc nào cũng hoạt động vì php không có bất kỳ cơ chế mutex nào trong ngôn ngữ, vì vậy bạn không thể tạo ra phần quan trọng bằng bất kỳ cách nào).

bây giờ có gì đó về tốc độ phát triển: ASP.NET có hai khung chính được thiết kế cho nó (Webforms và MVC), được cài đặt với môi trường, trong PHP bạn phải có khung công tác nguồn mở. Không có khung chuẩn trong php như trong asp.NET.

Ngôn ngữ ASP.NET rất phong phú, thư viện chuẩn có các giải pháp cho rất nhiều vấn đề phổ biến, trong đó thư viện chuẩn PHP là ... khỏa thân ... chúng không thể giữ một quy ước đặt tên.

.NET có các loại, trong đó PHP là động, vì vậy nó có nghĩa là không kiểm soát mã nguồn cho đến khi bạn chạy hoặc viết các bài kiểm tra đơn vị.

NET có IDE tuyệt vời, nơi PHP IDE là trung bình hoặc trung bình-tốt (PHPStorm vẫn là tồi tệ hơn rất nhiều so với VS + resharper hoặc thậm chí không có nó)

PHP giàn giáo trong symfony được bắn từ dòng lệnh khi ASP. NET giàn giáo được tích hợp vào môi trường.

Nếu bạn có máy tính chậm như (một lõi 2,2ghz), việc phát triển các trang asp.net có thể rất đau đớn vì bạn phải biên dịch lại dự án của bạn về bất kỳ thay đổi mã nguồn nào, nơi mã PHP làm mới ngay lập tức.

Cú pháp ngôn ngữ PHP quá dở dang, không chắc chắn và trần truồng so với cú pháp C#. Các loại mạnh mẽ trong C# và nhiều tính năng ngôn ngữ linh hoạt có thể tăng tốc độ phát triển của bạn và làm cho mã của bạn ít bị lỗi hơn.

+0

Sheesh, nhắc đến LINQ nói mọi thứ. LINQ thường xuyên không phải là nhiều hơn một foreach thường xuyên/nếu điều đó hoạt động tốt nhưng nó chỉ có thể tiết kiệm một vài dòng mã trong khi hy sinh tính linh hoạt. Tuy nhiên, hầu hết thời gian, chúng ta nói về LINQ to SQL (chủ yếu là ghét), điều đó là tốt cho các dự án nhỏ nhưng nó vô ích đối với bất cứ điều gì phức tạp. Một DAO đơn giản và đóng gói là cách sạch hơn LINQ phức tạp. Và nó hợp lệ cho .net và cho PHP. Ví dụ (sau khi DAO lớp được thực hiện), để có được một đối tượng người dùng là như vậy đơn giản như để gọi C#: User = UserDAO.Get (id_user); và trong php $ User = $ UserDAO-> Get ($ id_user); – magallanes

+4

@magallanes LINQ là nhiều hơn một foreach thường xuyên/nếu, tùy thuộc vào việc thực hiện các nhà cung cấp LINQ. Ví dụ như kiểm tra Entity Framework. Một DAO được đóng gói đơn giản không có truy vấn được đánh máy, có khả năng tiêm SQL vì nhà phát triển bỏ lỡ cà phê buổi sáng không phải là cách sạch hơn, IMO là đối diện – Luis

+0

@Luis Hoàn toàn không phủ nhận, rằng LINQ to SQL (giống như bất kỳ ORM nào) cho biết thêm chi phí đáng kể trong phần lớn các trường hợp và tác động tiêu cực đến hiệu suất. StackOverflow là một trường hợp tại điểm, đã sử dụng rất nhiều LINQ, nhưng sau đó đã được hỗ trợ rất nhiều vì lý do hiệu suất và thay thế nó bằng vi-ORM trong nhà riêng của họ. – Craig

11

Tôi đã thực hiện kiểm tra hiệu suất.

Chương trình: Sum của 10000000 Số

enter image description here

enter image description here

đầu ra Với chứng minh rằng php là chậm mà C#

+3

Sự khác biệt về hiệu suất khi HHVM được sử dụng cho PHP ? Mã trông như thế nào cho cả hai bài kiểm tra? – Drellgor

+5

Để chính xác, C# /. NET thực hiện thử nghiệm này 42 * lần * nhanh hơn so với PHP. – Craig

+1

Ok máy chủ sẽ tạo kết quả sớm.Xem kích thước ASPX 285Bytes và Php 49Bytes Vì vậy, Trong trường hợp này nếu người dùng có kết nối chậm hơn thì đoán điều gì sẽ xảy ra? hoặc suy nghĩ về hóa đơn internet của người dùng truy cập trang web? – aimme

-2

C++ ... Ngay bây giờ cuộc chiến sẽ diễn ra giữa PHP và ASP.NET. PHP sẽ giành chiến thắng trên dễ sử dụng, ASP.NET sẽ giành chiến thắng trên hiệu suất (trong một hệ sinh thái máy chủ cửa sổ). Rất nhiều trang web lớn hơn bắt đầu bằng php đã tốt nghiệp với C++.

-3

Tôi là chuyên gia phát triển về cả hai công nghệ (ASP.Net C# và PHP5). Sau nhiều năm và nhiều năm làm việc và so sánh chúng trong môi trường sản xuất thực tế đây là những ấn tượng của tôi:

  • Trước hết, không thể so sánh chúng thực hiện một vòng lặp của việc thêm giá trị 1.000.000, đây không phải là một trường hợp thực sự.

  • Không giống như so sánh chúng trong môi trường phát triển của tôi so với môi trường sản xuất thực tế. Ví dụ: Trong phát triển ASP.Net không sử dụng IIS theo mặc định, sử dụng một máy chủ phát triển bên trong có tối ưu hóa khác nhau. Trong dev, không có đồng thời.

Vì vậy, quan điểm của tôi là tiếp theo:.

  • Looping 1.000.000 lần C# sẽ là nhanh hơn (không có ý thức)

  • Phục vụ một trang thực sự, truy cập DB, hiển thị hình ảnh, có biểu mẫu, v.v. ASP.Net chậm hơn PHP.

  • Trọng lượng của các trang ASPX lớn hơn x10 so với PHP, vì vậy điều này làm cho người dùng cuối cùng chờ thêm thời gian để tải trang.

  • ASPX chậm phát triển hơn PHP, điều này quan trọng vì cuối cùng là tiền. Chúng tôi phát triển nhanh hơn 35% trong PHP so với ASP.Net, vì phải biên dịch và khởi động lại mỗi khi bạn muốn kiểm tra smthg.

  • Trong các dự án lớn, ASP.Net trong dài hạn là tốt hơn để tránh lỗi và có cấu trúc phức tạp.

  • Vì máy chủ Windows, IIS, .... ở cuối, u cần một máy chủ mạnh mẽ để giữ cùng một lượng người dùng trên ASP so với PHP. Ví dụ: Chúng tôi phục vụ với ASP.net arround 20.000 người dùng đồng thời và trong PHP, cùng một máy chủ có thể nhận arround 30.000 người dùng.

Điều quan trọng nhất không phải là nếu vòng lặp nhanh hơn. Vấn đề là khi trang web là có thật và đang trong quá trình sản xuất, số lượng người dùng có thể giữ, mức độ nghiêm trọng của trang (nặng hơn == thời gian chờ đợi từ người dùng, chi phí ròng của máy chủ, phí đĩa nhiều hơn của máy chủ, phí bộ nhớ nhiều hơn máy chủ). Hãy thử thời gian kiểm tra với đồng thời và bạn sẽ thấy.

Hy vọng điều đó sẽ hữu ích.

+4

Cho đến khi bạn cung cấp một số chỉ số hợp lý hoặc một số liên kết đến bài viết thực tế, tất cả những gì tôi có thể nói để trả lời câu hỏi này là: Theo kinh nghiệm của tôi (bao gồm 15 năm phát triển ứng dụng web và máy chủ ứng dụng. Python đến .NET) PHP là thời gian chạy chậm nhất. Có thể bạn có thể nhầm lẫn ASP với ASP.NET MVC? Bởi vì câu hỏi thực sự là so sánh các ứng dụng web được phát triển bằng PHP (và tôi tin nó bao gồm giả định sử dụng khung MVC PHP, nhưng điều đó không cần thiết) và các ứng dụng web được phát triển trong ASP.NET MVC. –

+0

Cảm ơn bạn đã đăng 'câu trả lời' này, nó chắc chắn bổ sung thêm thông tin có giá trị và trình bày các lĩnh vực khác cần được xem xét.Những gì mọi người không nhận ra là họ nên có bất kỳ phản ứng với một hạt muối, chứ không phải là defacto câu trả lời. –

Các vấn đề liên quan