Есть ли смысл уменьшать PHP?


101

Я знаю, что вы можете минимизировать PHP, но мне интересно, есть ли в этом смысл. PHP - это интерпретируемый язык, поэтому он будет работать немного медленнее, чем скомпилированный язык. Мой вопрос: увидят ли клиенты видимое улучшение скорости загрузки страниц и тому подобное, если бы я уменьшил свой PHP?

Кроме того, есть ли способ скомпилировать PHP или что-то подобное?


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

Другой момент - экономия места на сервере (если это важно),
Джордж Огден,

Ответы:


161

PHP компилируется в байт-код, который затем интерпретируется поверх чего-то, напоминающего виртуальную машину. Многие другие языки сценариев следуют тому же общему процессу, включая Perl и Ruby. Это не совсем традиционный интерпретируемый язык, как, скажем, BASIC.

Если вы попытаетесь «минимизировать» источник, эффективного увеличения скорости не будет. Вы получите значительное увеличение, используя кеш байт-кода, такой как APC .

Facebook представил компилятор под названием HipHop, который преобразует исходный код PHP в код C ++. Расмус Лердорф, один из крупных разработчиков PHP, в начале этого года сделал для Digg презентацию , посвященную улучшениям производительности, предоставленным HipHop. Короче говоря, это не намного быстрее, чем оптимизация кода и использование кеша байт-кода. Для большинства пользователей HipHop является излишним.

Facebook также недавно представил HHVM , новую виртуальную машину, основанную на их работе по созданию HipHop. Он все еще довольно новый, и неясно, обеспечит ли он значительный прирост производительности для широкой публики.

Чтобы убедиться, что это прямо указано, прочтите эту презентацию полностью. Он указывает на многочисленные способы базового и профильного кода и выявления узких мест , используя такие инструменты , как Xdebug и xhprof , а также от Facebook.


2
Обратите внимание, что вся эта штука с байт-кодом / vm на самом деле ничего вам не даст без внешнего (!) Кеша байт-кода. Я не понимаю, почему PHP по умолчанию отбрасывает байт-код ...

Я предполагаю, что это проблема виртуального хостинга. APC включен в PHP по умолчанию, начиная со старой магистрали на базе 6.0. Я не уверен, увидим ли мы это по умолчанию в 5.4 или как там новый ствол в конечном итоге будет называться ...
Чарльз

Большое спасибо за информацию. К сожалению, у меня нет глубокого контроля над своим сервером (он арендован). Вероятно, веб-хосты используют APC?
Bojangles

3
Большинство провайдеров виртуального хостинга не используют APC. Вам следует заглянуть в виртуальный частный сервер, чтобы вы могли контролировать конфигурацию. VPS часто дороже обычного виртуального хостинга, но намного дешевле, чем настоящий выделенный сервер. Популярные провайдеры VPS включают Slicehost и Linode. Не забывайте, что вы должны сначала протестировать и профилировать свой код !
Чарльз

15

Откажитесь от идеи минимизации PHP в пользу использования кеша опкодов, например PHP Accelerator, или APC.

Или что-то еще вроде memcached


18
Я сказал "что-то еще".
Стивен

3
из этого не ясно, что вы имеете в виду что-то иное, кроме кеша опкодов.
Treffynnon

5
memcached - это идеальный способ повышения производительности ... после выполнения тестов и профилирования и установления того, что кеширование само по себе будет наилучшим возможным приростом производительности.
Чарльз

1
если вы используете PHP 5.5, вам не нужно устанавливать какой-либо кеш-код операции, потому что он теперь поставляется с ним по умолчанию.
firewall

1
Я действительно искал cromulent :(. Я согласен с другими, использование memcached в этом контексте вводит в заблуждение. Кэширование данных как часть процесса компиляции - это не то же самое, что результирующий операционный код.
Майк Перселл

3

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

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


3

Это не столько ответ, сколько реклама. Я работаю над расширением PHP, которое переводит коды операций Zend для запуска на виртуальной машине со статической типизацией. Он не ускоряет произвольный PHP-код. Это позволяет вам писать код, который работает быстрее, чем позволяет обычный PHP. Ключевым моментом здесь является статическая типизация. На современном процессоре динамический язык съедает штраф за неправильное предсказание переходов слева и справа. Тот факт, что массивы PHP являются хэш-таблицами, также требует больших затрат: множество ошибочных прогнозов ветвлений, неэффективное использование кеша, плохая предварительная выборка памяти и вообще отсутствие оптимизации SIMD. Ошибочное предсказание переходов и, в частности, промахи в кэше - это ахиллесова пята для современных процессоров. Моя маленькая виртуальная машина обходит эту проблему, используя статические типы и массив C вместо хеш-таблицы. В результате получается примерно в десять раз быстрее. Это использует интерпретацию байт-кода. Расширение может при желании компилировать функцию через gcc. В этом случае скорость увеличивается в два-пять раз.

Вот ссылка для всех, кому интересно:

https://github.com/chung-leong/qb/wiki

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


3

Да, есть один (нетехнический) момент.

Ваш хостер может шпионить за вашим кодом на своем сервере. Если вы уменьшите и уродите его, шпионам будет труднее украсть ваши идеи.

Одной из причин минимизации и удаления php может быть защита от шпионажа. Я думаю, что некрасивый код должен сделать один шаг в автоматическом развертывании.


1

Существуют компиляторы PHP ... см. Список в предыдущем вопросе ; но (если вы размером с Facebook или не нацеливаете свое приложение на работу на стороне клиента), они обычно доставляют гораздо больше проблем, чем они того стоят

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


1

Минимизировать PHP не нужно. Чтобы получить лучшую производительность, установите кеш Opcode; но идеальным решением было бы обновить ваш PHP до версии 5.5 или выше, потому что в более новых версиях по умолчанию есть кэш опкодов под названием Zend Optimiser, который работает лучше, чем другие http://massivescale.blogspot.com/2013/06 /php-55-zend-optimiser-opcache-vs-xcache.html .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.