Производительность Symfony2 и Twig в боксерской коробке

Предпосылки:

  1. http://box.scotch.io/ бродячий бокс

  2. 2.

# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "scotch/box" config.vm.network "private_network", ip: "192.168.33.10" config.vm.network "forwarded_port", guest: 80, host: 80 config.vm.network "forwarded_port", guest: 3306, host: 3306 config.vm.network "forwarded_port", guest: 443, host: 443 config.vm.network "forwarded_port", guest: 1081, host: 1081 config.vm.hostname = "scotchbox" config.vm.synced_folder "../../../project", "/var/www", :mount_options => ["dmode=777", "fmode=666", "uid=1000", "gid=1000"], type: "nfs" #config.vm.synced_folder "./mysql", "/var/lib/mysql", :mount_options => ["dmode=700", "fmode=600", "uid=106", "gid=112"], type: "nfs" config.vm.synced_folder "../../../project/_conf", "/etc/apache2/sites-enabled", :mount_options => ["dmode=755", "fmode=644", "uid=0", "gid=0"], type: "nfs" ############################# $script = <<SCRIPT sudo service apache2 restart && sudo service mysql start SCRIPT config.vm.provision "shell", inline: $script, privileged: false, run: "always" end 
  1. Проект symfony2 запускается внутри коробки. Вот его требуется раздел composer.json
  "require": { "php": ">=5.3.3", "symfony/symfony": "2.2.*", "doctrine/orm": "~2.2,>=2.2.3", "doctrine/doctrine-bundle": "1.2.*", "twig/extensions": "1.0.*", "symfony/assetic-bundle": "2.1.*", "symfony/swiftmailer-bundle": "2.2.*", "symfony/monolog-bundle": "2.2.*", "sensio/distribution-bundle": "2.2.*", "sensio/framework-extra-bundle": "2.2.*", "sensio/generator-bundle": "2.3.*", "jms/security-extra-bundle": "1.4.*", "jms/di-extra-bundle": "1.3.*", "kriswallsmith/assetic": "v1.1.0-alpha4", "gedmo/doctrine-extensions": "dev-master", "stof/doctrine-extensions-bundle": "dev-master", "doctrine/doctrine-fixtures-bundle": "dev-master", "mopa/bootstrap-bundle": "2.2.x-dev", "twbs/bootstrap": "2.3.1", "jlong/sass-twitter-bootstrap": "2.3.1", "liip/theme-bundle": "dev-master", "fkr/cssurlrewrite-bundle": "*", "knplabs/knp-paginator-bundle": "dev-master", "knplabs/knp-components": "dev-master#f096dd02136957ce1fba5819261a45b3ee9ed4a7", "craue/formflow-bundle": "dev-master", "sonata-project/admin-bundle": "dev-master", "sonata-project/cache-bundle": "dev-master", "sonata-project/doctrine-orm-admin-bundle": "dev-master", "avalanche123/imagine-bundle": "v2.1", "r1pp3rj4ck/TwigstringBundle": "dev-master", "raulfraile/ladybug-bundle": "1.0.1" }, 

Проблема:

При открытии даже пустой страницы, такой как форма входа, она занимает слишком много времени. Как видно в профилировщике, большую часть времени занимает рендеринг twig:

Twig принимает 3,5 секунды для рендеринга

То, что я пробовал:

  1. как вы видите в Vagrantfile, NFS включена. Не знаете, как проверить его
  2. Прочтите это и это . Тест, который вы видите на скриншоте выше, был запущен после того, как эти изменения будут выполнены

Чтобы он работал быстрее в бродяжнике, если ваша хост-система Win (Windows 7 x64 в моем случае), вам необходимо:

  1. добавьте это исправление. Я также добавил среду «prod» в список:
 public function getCacheDir() { if (in_array($this->environment, array('dev', 'test', 'prod'))) { return '/dev/shm/project/cache/' . $this->environment; } return parent::getCacheDir(); } public function getLogDir() { if (in_array($this->environment, array('dev', 'test', 'prod'))) { return '/dev/shm/project/logs'; } return parent::getLogDir(); } 
  1. Исправьте производительность ввода-вывода, используя NFS. Дело в том, что я был смущен: установка параметра nfs = true в synced_folders НЕ означает, что вы подключаетесь через NFS. Моя ОС-хост – это Win7, и мне пришлось установить NFS-сервер , чтобы он работал. Обратите внимание, что это не бесплатно. Вот две папки, которыми я должен был поделиться:

введите описание изображения здесь

Кроме того, установка с synced_folder не работала для меня, поскольку сервер NFS только прослушивал определенный IP-адрес, поэтому мне пришлось прокомментировать это:

 config.vm.synced_folder "../../../project", "/var/www", type: "nfs",:nfs => true 

и вместо этого поставьте это:

 $script = <<SCRIPT sudo mount 192.168.178.40:/d/project /var/www/ && sudo mount 192.168.178.40:/d/project/_conf /etc/apache2/sites-enabled && sudo service apache2 restart SCRIPT config.vm.provision "shell", inline: $script, privileged: false, run: "always" 

, где 192.168.178.40 – это IP, где открыты порты NFS. Вы можете сканировать его из самой надежной ОС, например, nmap.

  1. И вам также потребуется установить брандмауэр-плагин под названием vagrant-winnfsd. Это можно сделать:

vagrant plugin install vagrant-winnfsd

Я думаю, что это не проблема с производительностью twig, а с общим доступом к каталогам в VirtualBox / vagrant. Попробуйте включить кеширование ввода / вывода в VirtualBox.