Что делает PHP медленнее, чем Java или C#?

Это то, что я всегда задавался вопросом: почему PHP медленнее, чем Java или C#, если все 3 из этих языков компилируются до байт-кода, а затем выполняются оттуда? Я знаю, что обычно PHP перекомпилирует каждый файл с каждым запросом, но даже когда вы вводите APC (кэш байт-кода) в картину, производительность нигде не приближается к производительности Java или C# (хотя APC значительно улучшает его).

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

кроме того, я не принимаю какое-то решение, основанное на ответах здесь. PHP-это мой язык выбора; мне просто было интересно его дизайн.

8 ответов


одной из причин является отсутствие JIT-компилятора в PHP,как уже упоминалось.

еще одна большая причина-PHP динамическая типизация. Динамически типизированный язык всегда будет медленнее, чем статически типизированный язык, поскольку типы переменных проверяются во время выполнения, а не во время компиляции. В результате статически типизированные языки, такие как C# и Java, будут значительно быстрее во время выполнения, хотя их обычно приходится компилировать заранее. A JIT компилятор делает это менее проблемой для динамически типизированных языков, но, увы, PHP не имеет одного встроенного (хотя см. Facebook HHVM для примера стороннего JIT для PHP).


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

Я бы никогда не предложил выбрать один из этих языков над другим на основе скорость


и Java, и C# имеют JIT-компиляторы в байт-кода и компиляции в машинный код. Процесс компиляции может занять время, поэтому C# и Java могут страдать от более медленного времени запуска, но как только код JIT скомпилирован, его производительность находится на том же уровне, что и любой "действительно скомпилированный" язык, такой как c++.


самая большая причина заключается в том, что Java HotSpot JVM и CLR C#используют компиляцию Just-In-Time (JIT). JIT-компиляции компилирует байткод в машинный код, который выполняется непосредственно на процессоре.

также я думаю, что байт-код Java и CIL ниже уровня внутреннего байт-кода PHP, который может сделать много оптимизаций JIT проще и эффективнее.


дикая догадка может заключаться в том, что JAVA зависит от какого-то сервера "приложений", а PHP-нет, что означает, что каждый раз при вызове страницы PHP должен создаваться новый environnement.

(Это было особенно верно, когда PHP использовался/используется как CGI, а не как модуль Apache или через FastCGI)


Другая идея может заключаться в том, что компиляторы C# и JAVA могут выполнять некоторые тяжелые оптимизации во время компиляции-с другой стороны, при компиляции PHP-скриптов (по крайней мере, если вы не "обманываете" с кэшем кода операции) каждый раз, когда вызывается страница, фаза компиляции должна быть очень быстрой ; что означает, что невозможно потратить много времени на оптимизацию.


Тем не менее: каждая версия PHP обычно поставляется с некоторым улучшением производительности ; например, вы можете получить от 15% до 25% процессора при переключении с PHP 5.2 на 5.3.

например, взгляните на эти критерии :


Важно также то, что PHP довольно легко масштабировать : просто добавьте пару веб-серверов и вуаля !

проблема часто встреча при переходе от 1 к нескольким серверам с сеансами-храните их в DB или memcached (очень легко), и проблема решена !


В качестве примечания: я бы не рекомендовал выбирать технологию, потому что на некоторых тестах есть разница в скорости на пару процентов : есть гораздо более важные факторы, например, насколько хорошо ваша команда знает каждую технологию или даже алгоритмы, которые вы собираетесь использовать !


интерпретируемый язык не может быть быстрее, чем скомпилированный язык или даже язык JIT в тривиальных условиях.

Если ваша тестовая программа не состоит из распечатки "Hello Worlds", если вас беспокоит скорость, придерживайтесь C# или Java.


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

кроме того, вывод PHP (HTML или что-то еще) должен быть загружен в браузер, который также потребляет время.

кроме того, скорость Java / C# очень сильно зависит от машины, на которой она работает (что может быть несколько). Java / C# может быть медленно на вашем компьютере, в то время как PHP работает только на одном сервере, с которого он доступен и не всегда так быстро, как сервер (за исключением времени загрузки и т. д.).

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


по данным Википедия, PHP использует Двигатель Zend, который нет a JIT.