Чи є сенс мінімізувати PHP?


101

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

Також, чи є спосіб скласти PHP чи щось подібне?


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

Відповіді:


161

PHP компілюється в байт-код, який потім інтерпретується поверх чогось, що нагадує VM. Багато інших мов сценаріїв дотримуються того самого загального процесу, включаючи Perl і Ruby. Це насправді не традиційна інтерпретована мова, як, скажімо, БАЗОВА.

Ефективного збільшення швидкості не було б, якби ви спробували "мінімізувати" джерело. Ви отримаєте значне збільшення, використовуючи кеш байт-коду, як 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. Ви повинні заглянути у віртуальний приватний сервер, щоб ви могли керувати конфігурацією. VPSes часто дорожче звичайного спільного хостингу, але набагато дешевше, ніж справжній виділений сервер. Популярними постачальниками VPS є Slicehost та Linode. Не забувайте, що вам слід спочатку орієнтуватись і профлігувати свій код !
Чарльз

15

Відмовився від ідеї мінімізації PHP на користь використання кешу опкоду, як-от PHP Acceleratorабо APC.

Або щось інше на кшталт memcached


18
Я сказав "щось інше".
Стівен

3
з цього не зрозуміло, що ви маєте на увазі щось інше, ніж кеш-код опкоду.
Treffynnon

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

1
якщо ви використовуєте PHP 5.5, вам не потрібно встановлювати кеш-код опкоду, оскільки він за замовчуванням поставляється з ним.
брандмауер

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

3

За допомогою деяких перезаписів (коротших імен змінних) ви можете зберегти кілька байт пам'яті, але це також рідко важливо.

Однак я розробляю деякі мої програми так, що дозволяє об'єднати сценарії разом. З php -wйого допомогою можна значно ущільнитись, додавши невеликий приріст швидкості для запуску сценарію. На сервері, що підтримує опкод, однак це зберігає лише кілька перевірок файлу mtime.


3

Це менше відповіді, ніж реклами. Я працюю над розширенням PHP, яке переводить Zend-опкоди для запуску на VM зі статичним набором тексту. Це не прискорює довільний PHP-код. Це дозволяє вам писати код, який працює набагато швидше, ніж те, що дозволяє звичайний PHP. Ключовим тут є статичне введення тексту. У сучасному процесорі динамічна мова їсть гілку непередбачуваного покарання зліва та справа. Факт, що масиви PHP є хеш-таблицями, також вимагає високої вартості: безліч непередбачуваних гілок, неефективне використання кешу, погане попереднє завантаження пам'яті та відсутність оптимізації SIMD. Непередбачення гілки та помилки кешу, зокрема, є ахілесовою п'ятою для сьогоднішніх процесорів. Мій маленький VM вирішує цю проблему, використовуючи статичні типи та масив C замість хеш-таблиці. Результат закінчується приблизно в десять разів швидше. Для цього використовується інтерпретація байт-коду. Розширення може необов'язково компілювати функцію через gcc. У такому випадку ви отримуєте в два-п’ять разів більше швидкість.

Ось посилання для всіх, хто цікавиться:

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

Знову ж таки, розширення не є загальним прискорювачем PHP. Ви повинні написати специфічний для нього код.


2

Так, є один (нетехнічний) момент.

Ваш хостинг може шпигувати ваш код на його сервері. Якщо ви їх мінімізуєте і зловживаєте, шпигунам складніше вкрасти ваші ідеї.

Однією з причин мінімізації та зловживання 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.