Скорость выполнения кода: ASP.NET-MVC против PHP - PullRequest
68 голосов
/ 28 марта 2009

У меня дружеский спор по этому поводу, и я лично считаю, что скомпилированное ASP.NET-MVC веб-приложение будет работать более эффективно / быстрее, чем тот же проект, который будет написан на PHP. Мой друг не согласен.

К сожалению, у меня нет надежных данных, которые я мог бы использовать для подтверждения своих аргументов. (и он тоже)

На это я пытался найти ответы в Google, чтобы попытаться найти доказательства, подтверждающие его неправоту, но большую часть времени споры переходили на то, какую платформу лучше разрабатывать, стоимость, функции безопасности и т. Д. ради этого аргумента мне действительно все равно.

Я хотел бы знать, что сообщество по переполнению стека думает о сырой скорости / эффективности веб-сайтов в целом, которые разработаны в ASP.NET с MVC, по сравнению с точно таким же веб-сайтом, разработанным с помощью PHP?

У кого-нибудь есть практические примеры в реальных сценариях, сравнивающие производительность двух технологий?

(я понимаю, что для некоторых из вас это вполне может быть неуместным и, возможно, глупым аргументом, но это аргумент, и я все же хотел бы услышать ответы хороших людей здесь, в SO)

Ответы [ 11 ]

65 голосов
/ 28 марта 2009

Это сложное сравнение, потому что различия в соответствующих стеках означают, что в итоге вы делаете одно и то же по-разному, и если вы делаете их одинаково для сравнения, это не очень реалистичный тест.

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, настолько велики, что не имеют значения для большинства людей. Например, 4 из 20 посещаемых сайтов в Интернете - это PHP. Скорость разработки, надежность, стоимость эксплуатации среды и т. Д., Как правило, гораздо важнее, когда вы начинаете масштабирование, чем любая теоретическая разница в скорости.

Имейте в виду, что .Net имеет примитивные типы, безопасность типов и такие вещи, которые делают код быстрее, чем PHP может его запустить. Если вы хотите сделать несколько несправедливый тест, отсортируйте массив из одного миллиона случайных 64-битных целых чисел на обеих платформах. ASP.NET убьет его, потому что они являются примитивными типами, и простые массивы будут более эффективными, чем ассоциативные массивы PHP (и все массивы в PHP в конечном итоге ассоциативны). Плюс PHP в 32-битной ОС не будет иметь собственного 64-битного целого числа, поэтому сильно пострадает за это.

Следует также отметить, что ASP.NET предварительно компилируется, тогда как PHP интерпретируется на лету (исключая кэширование кода операции), что может иметь значение, но гибкость PHP в этом отношении - это хорошо. Возможность развертывания скрипта без отскока вашего сервера - это прекрасно. Просто поместите это, и это работает. Brilliant. Но в конечном итоге он менее производительный.

В конечном счете, я думаю, что вы спорите о том, что на самом деле не имеет значения.

29 голосов
/ 06 июня 2012

ASP.NET работает быстрее. ASP.NET Разработка быстрее. Купи быстрый компьютер и наслаждайся им, если делаешь серьезные деловые веб-приложения

ASP.NET-код выполняется намного быстрее по сравнению с PHP, когда он построен в режиме Release, оптимизирован, кэширован и т. Д. И т. Д. Но для веб-сайтов (кроме крупных игроков, таких как Facebook) это менее важно - большая часть времени страницы время рендеринга обращается к базе данных и запрашивает ее.

В подключении базы данных ASP.NET намного лучше - в asp.net мы обычно используем LINQ, который переводит наши объектные запросы в хранимые процедуры в базе данных сервера SQL. Также постоянное соединение с базой данных, один на один веб-сайт, повторное подключение не требуется.

PHP, для сравнения, не может удерживать соединение с сервером sql между запросами, он соединяется, получает данные из базы данных и уничтожает, когда переподключение базы данных часто составляет 20-30% времени рендеринга страницы.

Также весь конфиг веб-приложения перезагружается в php при каждом запросе, где в asp.net он сохраняется в памяти. Это можно легко увидеть в больших корпоративных средах, таких как symfony / symfony2, много времени рендеринга составляют внутренние процессы symfony, где asp.net загружает его один раз и не тратит ваш сервер на бесполезную работу.

ASP.NET может хранить объект в кеше в памяти приложения - в php вы должны записать его в файлы или использовать хак, например memcache. использование memcache очень много работает с проблемами параллелизма и угроз (хранение кеша в файлах также имеет свои проблемы с параллелизмом - каждый запрос запускает новый поток на сервере Apache, и многие запросы могут работать одновременно - вам нужно подумать о параллелизме между потоки, это занимает много времени на разработку и не всегда работает, потому что php не имеет никаких мьютекс-механизмов в языке, поэтому вы не можете создавать критические секции в любом случае).

Теперь немного о скорости разработки: ASP.NET имеет две основные платформы, разработанные для этого (Webforms и MVC), установленные с окружением, где в PHP вы должны получить среду с открытым исходным кодом. В php нет стандартного фреймворка, как в asp.NET.

Язык ASP.NET настолько богат, что у стандартной библиотеки есть решения для очень распространенных проблем, где стандартная библиотека PHP ... голая ... они не могут придерживаться одного соглашения об именах.

.NET имеет типы, где PHP является динамическим, так что это означает отсутствие контроля над исходным кодом, пока вы не запустите его или не создадите модульные тесты.

.NET имеет отличную IDE, где PHP IDE являются средними или средне-хорошими (PHPStorm все еще намного хуже, чем VS +, более резкий или даже без него)

PHP-леса в symfony запускаются из командной строки, когда ASP.NET-леса интегрированы в среду.

Если у вас медленный компьютер, такой как мой (одно ядро ​​2,2 ГГц), разработка страниц asp.net может быть затруднена, поскольку вам нужно перекомпилировать проект при любых изменениях исходного кода, когда код PHP обновляется немедленно.

Синтаксис языка PHP настолько незакончен, непрочен и неприкрыт по сравнению с синтаксисом C #. Сильные типы в C # и множество гибких языковых функций могут ускорить вашу разработку и сделать ваш код менее глючным.

20 голосов
/ 28 марта 2009

По моему опыту (не с жесткой привязкой) Asp.Net может определенно конкурировать (и в некоторых областях превосходить) PHP с точки зрения сырой скорости. Но, как и во многих других вопросах, связанных с выбором языка, следующее утверждение (в данном случае) действительно (на мой взгляд):

  • Есть медленные, глючные сайты на языке x (будь то PHP или Asp.Net)
  • Есть отличные, быстрые сайты на языке x (будь то PHP или Asp.Net)

Что я пытаюсь сказать: (талант) разработчика будет влиять на общую скорость в большей степени, чем выбор между двумя (примерно эквивалентными в некоторой абстрактной степени) технологиями.

Действительно, сравнение «общей скорости» не имеет большого смысла, так как оба могут так или иначе догнать друг друга, если вы не находитесь в очень специфической специализированной нише (о которой вы не сообщили нам) .

13 голосов
/ 27 марта 2014

Я сделал тест производительности.

Программа: сумма 10000000 номеров

enter image description here

enter image description here

Данный вывод доказывает, что php медленнее, чем C # ............

13 голосов
/ 05 марта 2012

Я бы сказал, ASP.net

Что нужно учитывать:

  • ASP.net предварительно скомпилирован
  • ASP.net обычно написан на C #, который должен выполняться быстрее, чем PHP

Конечно, различия очень незначительны. У обоих есть свои преимущества, я думаю, что PHP намного проще в развертывании и может работать на любом сервере, не только IIS. Я очень люблю ASP.net MVC, хотя.

5 голосов
/ 30 августа 2009

Без каких-либо оптимизаций приложение, скомпилированное .net, конечно, будет работать "быстрее", чем php. Но вы правы, что это глупый и нерелевантный аргумент, потому что он не имеет отношения к реальному миру, кроме хвастовства.

3 голосов
/ 28 марта 2009

Обычно ASP.Net будет работать лучше на данном оборудовании, чем PHP. ASP.Net MVC может сделать еще лучше (может быть здесь рабочее слово). Большая часть платформы разработана с учетом развития предприятия. Тестируемый код, разделение задач и т. Д. Большая часть раздувания в ASP.Net происходит из стека объектов на странице (вложенные элементы управления). Предварительная компиляция делает это лучше, но это может быть ключевым вопросом. MVC имеет тенденцию к уменьшению вложенности, используя механизм просмотра на основе веб-форм (доступны другие).

Там, где происходят самые большие замедления в веб-приложениях, это, как правило, удаленные службы, особенно сохранение базы данных. PHP программируется без использования пула соединений или состояния сеанса в памяти. Эту проблему можно решить с помощью memcached и других, более производительных сервисных слоев (также доступных для .Net).

Это действительно сводится к специфике сайта / приложения. на этом сайте MVC работает на довольно скромном оборудовании довольно хорошо. Подобный сайт под PHP, вероятно, подпадает под собственный вес. Другие вещи, чтобы рассмотреть. IIS против Apache против LightHTTPD и т. Д. Честно говоря, php против asp.net - это гораздо больше, чем просто разница в производительности. PHP не подходит для больших и сложных приложений почти так же, как asp.net mvc, это так просто ... Это само по себе больше связано с VS + SCC, чем с чем-либо еще.

1 голос
/ 28 января 2015

Я эксперт по разработке обеих технологий (ASP.Net c # и PHP5). После многих лет работы и сравнения их в реальных производственных условиях, мои впечатления:

  • Прежде всего, не могу сравнить их, делая цикл добавления значений 1.000.000, это не реальный случай.

  • Это не то же самое, что сравнивать их в моей среде разработки, чем в реальной производственной среде. Например: в разработке ASP.Net по умолчанию не использует IIS, используйте сервер Inner Development, который имеет разные оптимизации. В dev нет параллелизма.

Так что мое мнение таково:

  • Цикл в 1.000.000 раз будет быстрее c # (бессмысленно)

  • Обслуживание реальной страницы, которая обращается к БД, показывает изображения, имеет формы и т.д .... ASP.Net работает медленнее, чем PHP.

  • Вес страниц ASPX в 10 раз тяжелее, чем у PHP, поэтому конечный пользователь будет ждать больше времени, чтобы получить страницу.

  • ASPX разрабатывается медленнее, чем PHP, это важно, потому что в итоге деньги. Мы разрабатываем на 35% быстрее в PHP, чем в ASP.Net, потому что приходится компилировать и перезапускать каждый раз, когда вы хотите проверить что-нибудь.

  • В больших проектах ASP.Net в долгосрочной перспективе лучше избегать ошибок и имеет сложную архитектуру.

  • Из-за Windows Servers, IIS, .... в конце вам понадобится мощный сервер, чтобы удерживать столько же пользователей на ASP, сколько на PHP. Например: мы обслуживаем с ASP.net около 20 000 одновременно работающих пользователей, а в PHP один и тот же сервер может принимать около 30 000 пользователей.

Единственное, что важно, это не цикл, который быстрее. Дело в том, когда веб-сайт является реальным и находится в производстве, сколько пользователей он может держать, сколько весит страница (больше == больше времени ожидания от пользователей, больше чистого заряда сервера, больше дискового пространства сервера, больше памяти сервер). Попробуйте время проверки с параллелизмом, и вы увидите.

Надеюсь, это поможет.

1 голос
/ 10 октября 2010

Необходимо отметить, что вопрос .NET MVC против PHP, а не .NET (веб-формы) против PHP. У меня нет фактов, но общее ощущение, что сайты PHP работают быстрее, чем сайты веб-форм .NET (а я только .NET). Веб-формы .NET, несмотря на то, что они компилируются против интерпретируемого PHP, обычно работают медленно, потому что весь фрагмент кода, автоматически генерируемый механизмом .NET для отображения HTML для каждого , который вы используете в режиме разработки. Получение веб-формы .NET для быстрой конкуренции с PHP - это полная возможность, которая начинается с установки EnableViewState = false и может заканчиваться использованием каждого элемента управления html с помощью runat = server ... crazy uh?

Теперь, MVC - это отдельная история, я сделал два сайта, используя .NET MVC2, и чувствую себя хорошо, вы можете почувствовать скорость сейчас! и код так же чист, как любой сайт PHP. Итак, теперь MVC позволяет вам писать чистый код, как это делает PHP, а MVC компилируется с интерпретацией PHP, это может привести только к одной вещи, MVC быстрее, чем PHP ... Время докажет, если говорить в общем смысле: «сайты MVC работают быстрее, чем PHP ", тогда мы будем правы относительно того, что я здесь сегодня говорю.

см / вы /!

1 голос
/ 28 марта 2009

Я бы с тобой согласился (что ASP.NET MVC быстрее), но почему бы не сделать дружескую ставку со своим другом и поделиться результатами? Создайте действительно простую ДИНАМИЧНУЮ страницу, полученную из базы данных MySQL, и загружайте страницу много раз.

Например, создайте таблицу с 1 000 000 строк, содержащих последовательный первичный ключ, а затем случайный # во втором столбце. Каждый из ваших сайтов может принять первичный ключ в GET, получить случайный # на основе переданного ключа и отобразить случайный # в некотором типе динамически генерируемого HTML.

Мне бы очень хотелось узнать результаты ... и если у вас есть блог или что-то подобное, остальной мир тоже хотел бы (этот вопрос задают ВСЕ время).

Было бы еще лучше, если бы вы могли создать это простое небольшое приложение и в обычном ASP. Черт, я бы даже заплатил вам за эти результаты, если бы тест был хорошо продуман. Серьезно - просто выразите свой интерес здесь, и я пришлю вам свое электронное письмо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...