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

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

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

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

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

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

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

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

    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. Но в конечном счете он менее эффективен.

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

    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 – это много работы с проблемами параллелизма и проблем (хранение кеша в файлах также имеет свои проблемы с параллелизмом – каждый запрос запускает новый поток сервера apache, и многие запросы могут работать в одно время – вам нужно подумать о параллелизме между этими потоки, это занимает много времени разработки и не всегда работает, потому что php не имеет механизмов mutex на языке, поэтому вы не можете сделать критический раздел каким-либо образом).

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

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

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

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

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

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

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

    В моем (не-hardbenchmarked) опыте Asp.Net, безусловно, может конкурировать (и в некоторых областях превосходить) 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.

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

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

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

    Как правило, 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, чем с чем-либо еще.

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

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

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

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

    Необходимо отметить, что вопрос – это .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 », тогда мы будем правы в том, что я говорю здесь сегодня.

    увидимся/!

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

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

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

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

    Поэтому мое мнение следующее:

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

    • Обслуживание реальной страницы, доступ к БД, отображение изображений, форм и т. Д …. 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 пользователей.

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

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