Это то, что я всегда задавал себе вопрос: почему PHP медленнее, чем Java или C #, если все 3 из этих языков скомпилированы до байт-кода и затем выполнены оттуда? Я знаю, что обычно PHP перекомпилирует каждый файл с каждым запросом, но даже когда вы добавляете APC (кэш байт-кода) в изображение, производительность нигде не приближается к производительности Java или C # (хотя APC значительно улучшает его).
Изменить: я даже не говорю об этих языках на веб-уровне. Я говорю о сравнении их, когда они хрустят число. Даже не включая время запуска или что-то в этом роде.
Кроме того, я не принимаю какое-то решение, основанное на ответах здесь. PHP – мой язык выбора; Мне просто было интересно, как его дизайн.
Одна из причин заключается в отсутствии компилятора JIT в PHP, о чем говорили другие.
Еще одна важная причина – динамическая типизация PHP. Динамически типизированный язык всегда будет медленнее, чем статически типизированный язык, поскольку переменные типы проверяются во время выполнения, а не во время компиляции. В результате, статически типизированные языки, такие как C # и Java, будут значительно быстрее во время выполнения, хотя их, как правило, приходится компилировать заранее. Компилятор JIT делает это менее проблематичным для динамически типизированных языков, но, увы, PHP не имеет одного встроенного (хотя см. HHVM Facebook для примера стороннего JIT для PHP).
Я предполагаю, что вы немного разбираетесь в сравнении яблок и апельсинов здесь – предполагая, что вы используете все эти языки для создания веб-приложений, это немного больше, чем просто язык. (И много раз это база данных, которая замедляет вас 😉
Я бы никогда не предложил выбрать один из этих языков над другим на основе аргумента скорости .
И Java, и C # имеют JIT-компиляторы , которые берут байт-код и компилируются в настоящий машинный код. Акт его компиляции может занять много времени, поэтому C # и Java могут пострадать от более медленного времени запуска, но как только код JIT скомпилирован, его производительность находится в том же самом шаге, что и любой «действительно скомпилированный» язык, такой как C ++.
Самая большая единственная причина заключается в том, что JavaSoft HotSpot JVM и C # также используют компиляцию Just-In-Time (JIT). Компиляция JIT скомпилирует байт-коды вплоть до собственного кода, который запускается непосредственно на процессоре.
Также я думаю, что байт-код Java и CIL являются более низкими, чем внутренний байт-код PHP, который может сделать много оптимизаций JIT более простым и эффективным.
Дикая догадка может заключаться в том, что JAVA зависит от какого-то «прикладного» сервера, а PHP – нет – это означает, что новая среда должна создаваться каждый раз, когда вызывается страница PHP.
(Это было особенно верно, когда 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 работает только на одном сервере, из которого он доступен, и всегда работает так же быстро, как сервер (за исключением времени загрузки и т. Д.).
Я не думаю, что они сопоставимы в общем. Я думаю, вам нужно выполнить задачу, которую вы могли бы выполнить с этими тремя языками программирования, а затем сравнить это. Это в основном всегда то, что вы должны делать при выборе языка программирования; найдите тот, который соответствует задаче. Не формируйте задачу, пока она не соответствует языку программирования.
Согласно wikipedia , PHP использует The Zend Engine , который не имеет JIT .