2016-04-15 2 views
-1

Является ли приложение PHP (используя доктрину как сопоставление ORM, или Symfony или другие большие рамки), подходящее для приложения с высокой нагрузкой? Я имею в виду особенно то, что каждый раз, когда php-файл вызывается веб-сайтом или приложением, загружается весь проект структуры. Поскольку для использования фреймворка мне нужно включить файл «автозагрузчик», и в этом файле весь проект (мой проект и структура) загружается и переходит в память. Итак, когда я предполагаю, что у моего сервера 100 запросов в секунду, и каждый запрос означает вызов file.php -> include autoload.php -> автозагрузка файлов фрейма WHOLE -> сделать что-то -> отправить вывод пользователю -> закрыть соединение, это может стать действительно интенсивной памятью?Общая производительность php/[big framework like doctrine/symfony]

Или есть что-то вроде кеша, когда запрос 1) загружает все файлы php (фреймворк) в память, а Request 2) приходит через 1 мс, он может использовать файлы из памяти?

Возможно, кто-то может помочь мне понять, как работает PHP внутри.

Я использую FPM (FastCGI Process Manager) на своем веб-сервере.

+1

Вот статья о производительности Symfony. [Здесь] (http://symfony.com/blog/push-it-to-the-limits-symfony2-for-high-performance-needs) – LMS94

+0

Не означает звучать snarky, но серьезно ли вы пытаетесь разработать приложение на 100 запросов в секунду без каких-либо знаний о кешировании или php в целом? – Cerad

+0

Это был крайний пример, чтобы показать, в чем моя забота. Пусть это будет 10 запросов в секунду или 1 секунду, просто нужно знать, загружает ли автозагрузчик все это в память, и каждый раз, когда появляются новые запросы. – Lumpy

ответ

0

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

Если вы используете php5.5 +, то у вас есть opcache, который уменьшает нагрузку и время загрузки php-приложений, поскольку коды операций php могут быть загружены из кеша. Если вы используете php7, то он еще быстрее. Я разработал несколько приложений с доктриной, и до сих пор не было никаких препятствий. Да, наличие ORM в качестве уровня абстракции для базы данных имеет накладные расходы, но превышает ли он код спагетти? да. Если бы вы хотели сравнить PDO, чтобы сказать Doctrine2? Побеждает PDO. Но вы можете настроить доктрину с кешами запросов и метаданных и т. Д. Я лично использую доктрину с кешем redis, и это довольно быстро.

+0

спасибо за ваш ответ. Я использую php7. Мне было непонятно, что загружает автозагрузчик композитора. Я думал, что он просто загружает каждый класс, но когда он загружает только то, что нужно (классы импортируются с помощью «use»?), Тогда все в порядке. – Lumpy

+1

Он даже не загружает класс, когда u вызывает «использовать», он загружает только класс, когда вы создаете его/вызываете статический метод или получаете доступ к статической переменной. Под капотом он использует spl_autoload_register для регистрации обратного вызова, который обрабатывает автозагрузку. см. http://php.net/manual/en/function.spl-autoload-register.php –