Оптимизация Symfony 2.8: нужно ли мне использовать APCClassLoader?

Мне нужно оптимизировать мой symfony с точки зрения скорости. Хостинг-сервер работает под управлением php 7.x.x и включен opcache. Расширение apc_u отключено, но я могу попросить его включить, если это действительно необходимо.

Что я делаю сейчас, так это звоню:

composer dump-autoload --optimize

всякий раз, когда я развертываю свое приложение. Таким образом, приложение уже должно иметь все необходимые сопоставления без необходимости перебирать папки (правильно?). Мне интересно, может ли ApcClassLoader улучшить мои показатели, если autoload_classmap.php уже хорошо обновлен.

Вот мои app.php первые строки:

use Symfony\Component\HttpFoundation\Request;

/**
 * @var Composer\Autoload\ClassLoader
 */
$loader = require __DIR__.'/../app/autoload.php';
include_once __DIR__.'/../app/bootstrap.php.cache';

// Enable APC for autoloading to improve performance.
// You should change the ApcClassLoader first argument to a unique prefix
// in order to prevent cache key conflicts with other applications
// also using APC.
/*
$apcLoader = new Symfony\Component\ClassLoader\ApcClassLoader(sha1(__FILE__), $loader);
$loader->unregister();
$apcLoader->register(true);
*/

$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();

Короткий длинный вопрос: может ли включение ApcClassLoader улучшить мою производительность, если autoload_classmap.php уже хорошо обновлен?


person Bertuz    schedule 05.05.2016    source источник


Ответы (1)


Пожалуйста, прочитайте мой ответ здесь: Зачем использовать автозагрузку PSR-0 или PSR-4 в композиторе, если classmap на самом деле быстрее?

Вы должны оценить, действительно ли сброс карты классов всех классов в вашем приложении увеличивает или уменьшает скорость. Если у вас слишком много классов в дампе карты классов, вы в конечном итоге переместите огромный массив из кеша кода операции в память, что плохо как для кеша кода операции (он занимает некоторое количество памяти, что может выбить другой код), так и для объем памяти, необходимый для запуска любого скрипта.

Общее правило: если вы оптимизируете, измерьте все, что вы хотите оптимизировать, до, затем после того, как вы что-то сделаете, и посмотрите, улучшится ли ситуация.

Также обратите внимание, что «оптимизировать с точки зрения скорости» — не совсем точное описание того, что вы хотите улучшить. Это время ответа на один запрос? Или это время отклика сервера под большой нагрузкой? Вы сначала профилировали приложение, чтобы узнать, где тратится время?

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

person Sven    schedule 06.05.2016