Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Одна из причин заключается в отсутствии компилятора JIT в PHP, о чем говорили другие.

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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


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


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

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


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

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


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

Ответ 6

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

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

Ответ 7

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

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

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

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