2010-11-02 2 views
86

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

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

ответ

141

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

Не было бы эффективного увеличения скорости, если вы попытались «минимизировать» источник. Вы получите значительное увеличение, используя bytecode cache like APC.

Facebook представил компилятор с именем HipHop, который преобразует источник PHP в код C++. Rasmus Lerdorf, один из больших PHP-парней, сделал presentation for Digg earlier this year, который охватывает улучшения производительности, данные HipHop. Короче говоря, это не намного быстрее, чем оптимизация кода и использование кеша байт-кода. Для большинства пользователей HipHop является излишним.

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

Для того, чтобы быть уверенным, что это указано прямо, пожалуйста, прочитайте that presentation в полном объеме. Он указывает на многочисленные способы сравнения и кода профиля и выявления узких мест с использованием таких инструментов, как xdebug и xhprof, также из Facebook.

+1

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

+0

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

+0

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

13

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

Или что-то еще, как memcached

+2

memcached не кеш-код операции. – Javier

+12

Я сказал «что-то еще». – Stephen

+3

Неясно, что вы имеете в виду нечто иное, чем кеш-код операции. – Treffynnon

3

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

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

1

Есть компиляторы PHP ... см. this previous question для списка; но (если вы не являетесь размером Facebook или не нацеливаете свое приложение на работу на стороне клиента), они, как правило, намного сложнее, чем они стоят

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

3

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

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

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

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

1

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

Смежные вопросы