Я только начал использовать Laravel. Я пока еще ничего не написал, но мои страницы занимают почти секунду, чтобы загрузить!
Это немного шокирует меня, когда мои приложения без рамок и приложения NodeJS занимают ~ 2 мс. Что делает Ларавель? Это не нормальное поведение? Нужна ли какая-то тонкая настройка?
Laravel не на самом деле медленный. 500-1000 мс абсурд; Я отключил его до 20 мс в режиме отладки.
Проблема заключалась в общих папках Vagrant/VirtualBox+. Я не понимал, что они понесли такой удар производительности. Я думаю, потому что у Laravel так много зависимостей (загружает ~ 280 файлов), и каждое из этих файлов читается медленно, оно складывается очень быстро.
kreeves указал мне в правильном направлении, это сообщение в блоге описывает новую функцию в Vagrant 1.5, которая позволяет вам rsync ваши файлы в виртуальную машину, а не использовать общую папку.
В Windows нет встроенного клиента rsync, поэтому вам нужно будет использовать cygwin. Установите его и не забудьте проверить Net/rsync. Добавьте C:\cygwin64\bin
к вашим путям.
Vagrant представляет новую функцию. Я использую Puphet, поэтому мой Vagrantfile выглядит немного смешно. Я должен был настроить его таким образом:
data['vm']['synced_folder'].each do |i, folder|
if folder['source'] != '' && folder['target'] != '' && folder['id'] != ''
config.vm.synced_folder "#{folder['source']}", "#{folder['target']}",
id: "#{folder['id']}",
type: "rsync",
rsync__auto: "true",
rsync__exclude: ".hg/"
end
end
Как только вы настроитесь, попробуйте vagrant up
. Если все идет гладко, ваша машина должна загрузиться, и она должна скопировать все файлы. Вам нужно запустить vagrant rsync-auto
в терминале, чтобы обновлять файлы. Вы заплатите немного за задержку, но за 30 раз быстрее загрузите страницы, это того стоит!
Если вы используете PhpStorm, функция автозагрузки работает даже лучше, чем rsync. PhpStorm создает много временных файлов, которые могут отключать наблюдатели файлов, но если вы позволите ему обрабатывать загружаемые файлы, это будет хорошо.
artisan optimize
для небольшого повышения. Остальное, в основном, как вы разрабатываете свое приложение, я думаю. Установите barryvdh/laravel-debugbar
и ищите любую медлительность.
Чтобы помочь вам с вашей проблемой, я нашел этот блог, в котором говорится о том, чтобы оптимизировать производство laravel. Большая часть того, что вам нужно сделать, чтобы быстро сделать ваше приложение, теперь будет в руках, насколько эффективен ваш код, ваша емкость сети, CDN, кеширование, база данных.
Теперь я расскажу о проблеме:
Ларавел медленный из коробки. Есть способы его оптимизации. У вас также есть возможность использовать кеширование в вашем коде, улучшая свою серверную машину, yadda yadda yadda. Но в конце концов Laravel все еще медленный.
Laravel использует множество библиотек symfony, и, как вы можете видеть в techempower benchmarks, symfony занимает очень низкое (последнее, если не сказать больше). Вы даже можете найти laravel benchmark, чтобы быть почти внизу.
В фоновом режиме происходит много автозагрузки, которые могут даже не загружаться. Так технически, поскольку laravel прост в использовании, он помогает вам быстро создавать приложения, а также замедляет работу.
Но я не говорю, что Laravel плох, он отлично, отлично подходит для многих вещей. Но если вы ожидаете большой всплеск трафика, вам понадобится гораздо больше оборудования для обработки запросов. Это обойдется вам намного дороже. Но если вы грязный богатый, то вы можете добиться чего-либо с Laravel.: D
Обычный компромисс:
Easy = Slow, Hard = Fast
Я бы подумал, что C или Java имеют сложную кривую обучения и жесткую ремонтопригодность, но она занимает очень высокое место в веб-инфраструктурах.
Хотя это не слишком связано. Я просто пытаюсь доказать точку easy = slow
:
Ruby имеет очень хорошую репутацию в ремонтопригодности и простоте, чтобы изучить его, но он также считается самым медленным среди python и php, как показано здесь.
Я обнаружил, что наибольшее увеличение скорости с Laravel 4 вы можете добиться выбора правильных драйверов сеанса;
Sessions "driver" file;
Requests per second: 188.07 [#/sec] (mean)
Time per request: 26.586 [ms] (mean)
Time per request: 5.317 [ms] (mean, across all concurrent requests)
Session "driver" database;
Requests per second: 41.12 [#/sec] (mean)
Time per request: 121.604 [ms] (mean)
Time per request: 24.321 [ms] (mean, across all concurrent requests)
Надеюсь, что поможет
Из моего конкурса Hello World, какой из них Laravel? Думаю, вы можете догадаться. Я использовал докер-контейнер для теста и вот результаты
Сделать http-response "Hello World":
Да - Laravel действительно очень медленный. Для этого я создал приложение POC. Простой маршрутизатор с формой входа. Я мог получить только 60 RPS с 10 параллельными соединениями на цифровом океаническом сервере стоимостью 20 долларов США (несколько GB RAM);
Настройка:
2gb RAM
Php7.0
apache2.4
mysql 5.7
memcached server (for laravel session)
Я запускал оптимизацию, компоновщик dump autoload и т.д., и фактически уменьшал RPS до 43-иш.
Проблема в том, что приложение отвечает в 200-400 мс. Я проверил AB-тест с локальной машины laravel был включен (т.е. Не через веб-трафик); и я получил только 112 RPS; с временем отклика 200 мс со средним значением 300 мс.
Сравнительно, я протестировал свое приложение PHP Native для создания нескольких миллионов запросов в день на AWS t2.medium(x3, балансировка нагрузки). Когда я AB'd 25 параллельных подключений от моей локальной машины к этой сети, через ELB, я получил приблизительно 1200 RPS. Огромная разница на машине с нагрузкой по сравнению с страницей "входа" в laravel.
Это страницы с сеансами (эластичная/memcached), поисковые запросы в реальном времени (кэшированные запросы через memcached), активы, извлеченные из CDN и т.д. и т.д. и т.д.
То, что я могу сказать, laravel палочки около 200-300ms нагрузки на вещи. Это прекрасно для PHP. Созданные представления, в конце концов, этот тип задержки допустим при загрузке. Однако для представлений PHP, которые используют Ajax/JS для обработки небольших обновлений, он начинает чувствовать себя вялым.
Я не могу представить, как эта система будет выглядеть с помощью приложения с несколькими арендаторами, в то время как 200 ботов сканируют по 100 страниц каждый в одно и то же время.
Laravel отлично подходит для простых приложений. Lumen терпимо, если вам не нужно что-то делать, что потребует бессмысленности промежуточного программного обеспечения (IE, не много приложений для арендаторов и пользовательских доменов и т.д.);
Однако мне никогда не хотелось начинать с чего-то, что может связывать и вызывать нагрузку 300 мс для сообщения "привет мир".
Если вы думаете: "Кого волнует?"
.. Напишите прогностический поиск, который опирается на быстрые запросы, чтобы отвечать на предложения автозаполнения на несколько сотен тысяч результатов. Это отставание в 200-300 м приведет вас к безумию.
Я использую Laravel совсем немного, и я просто не верю числам, которые он мне говорит, потому что сквозной рендеринг, измеренный моим браузером, показывает LOWER общее время от запроса до готовности.
Кроме того, я получаю несколько более высокие числа на моей машине на работе, что делает страницу заметно быстрее, чем моя машина дома.
Я не знаю, как рассчитываются эти числа, но они не подтверждаются наблюдением или инструментами браузера, такими как Firebug...
Laravel на самом деле не настолько медленный, особенно когда он оптимизирован. Тем не менее, он голоден в памяти. Даже тяжелая CMS, такая как Drupal, которая очень медленная, кажется, имеет около 1/3 объема памяти запроса голосовой кости Laravel.
Таким образом, чтобы запустить Laravel в производстве, я бы развернул серверы с оптимизацией памяти до серверов, оптимизированных для CPU.
php artisan optimize
или мы можем сделать больше?
Я знаю, что это немного старый вопрос, но все изменилось. Ларавел не так уж медленный. Это, как уже упоминалось, синхронизированные папки медленны. Однако в Windows 10 я не смог использовать rsync
. Я попробовал как cygwin
, так и minGW
. Похоже, что rsync
несовместим с git for windows
версией ssh
.
Вот что сработало для меня: NFS.
Vagrant docs говорит:
Папки NFS не работают на хостах Windows. Vagrant проигнорирует ваш запрос на синхронизированные папки NFS в Windows.
Это больше не так. В настоящее время мы можем использовать vagrant-winnfsd
плагин. Это действительно просто установить:
vagrant plugin install vagrant-winnfsd
Vagrantfile
: config.vm.synced_folder ".", "/vagrant", type: "nfs"
Vagrantfile
: config.vm.network "private_network", type: "dhcp"
Это все, что мне нужно для работы NFS
. Время ответа Laravel уменьшилось с 500 мс до 100 мс для меня.
Следующий снимок экрана представляет собой пример без любых реализованных методов производительности.
По умолчанию скорость загрузки нескольких моделей, http-фильтров и контейнеров.
Не намного медленнее, вам нужно правильно настроить свой Laravel. В Laravel существует множество методов оптимизации. Попробуйте некоторые.
Я использовал все популярные PHP Framework для разработки веб-приложений, и мои исследования показывают, что Laravel - лучшая структура для PHP с точки зрения
php artisan optimize --force