Производительность 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"},

Проблема:

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

Рендеринг ветки занимает 3,5 секунды

Что я пробовал:

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

4

Решение

Чтобы заставить его работать быстрее в vagrant в случае, если у вас установлена ​​ОС 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. Вы можете отсканировать его из самой лучшей ОС, например, с помощью птар.

  1. Также вам необходимо установить плагин vagrant vagrant-winnfsd. Это может быть сделано:

установить плагин vagrant vagrant-winnfsd

3

Другие решения

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

2

По вопросам рекламы [email protected]