Скорость выполнения кода: ASP.NET-MVC и PHP

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

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

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

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

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

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

Ответ 1

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

PHP, который мне нравится, находится в самой базовой форме, загруженной с каждым запросом, интерпретируется и затем отбрасывается. Это очень похоже на CGI в этом отношении (что неудивительно, учитывая, что это примерно 15 лет).

В наши дни были оптимизированы различные улучшения для повышения производительности, в частности, для кэширования операций с APC (так, что APC будет стандартной частью PHP 6, а не дополнительным модулем, как сейчас).

Но все же PHP-скрипты в основном преходящи. Информация о сеансе (обычно) основана на файлах и взаимно исключена (session_start() блокирует другие сценарии, получающие доступ к одному сеансу пользователя, до завершения сеанса session_commit() или script), тогда как это не относится к 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 в этом отношении - это хорошо. Возможность развертывания script без перехвата вашего сервера отлично. Просто запустите его, и он работает. Brilliant. Но в конечном счете он менее эффективен.

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

Ответ 2

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

enter image description here

enter image description here

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

Ответ 5

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

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

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

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

Ответ 6

Я наткнулся на блог с жесткими кодовыми номерами и реальные тесты, выполненные как в Linux, так и в окнах, сравнивающих две платформы. Должен сказать, что я использую опцию ASP.net.

http://naspinski.net/post/AspNet-vs-php--speed-comparison.aspx

Ответ 7

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

Ответ 8

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

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

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

Ответ 9

Я бы с тобой согласился (что ASP.NET MVC быстрее), но почему бы не сделать дружескую ставку с вашим другом и поделиться результатами? Создайте действительно простую страницу DYNAMIC, полученную из базы данных MySQL, и загрузите страницу много раз.

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

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

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

Ответ 10

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

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

см/вы/!

Ответ 11

С++... Сейчас борьба будет между PHP и ASP.NET. PHP победит на простоте использования, ASP.NET выиграет от производительности (в экосистеме сервера Windows). Многие крупные веб-сайты, начатые с php, закончили с С++.

Ответ 12

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

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

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

Итак, мое мнение следующее:

  • Looping 1.000.000 раз С# будет быстрее (нет смысла)

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

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

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

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

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

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

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