Подтвердить что ты не робот

Неужели Ларавель на самом деле так медленно?

Я только начал использовать Laravel. Я пока еще ничего не написал, но мои страницы занимают почти секунду, чтобы загрузить!

laravel timings

Это немного шокирует меня, когда мои приложения без рамок и приложения NodeJS занимают ~ 2 мс. Что делает Ларавель? Это не нормальное поведение? Нужна ли какая-то тонкая настройка?

4b9b3361

Ответ 1

Ларавел на самом деле не такой медленный. 500-1000мс абсурдно; Я получил его до 20 мс в режиме отладки.

Проблема была в общих папках Vagrant/VirtualBox+. Я не знал, что они понесли такой удар производительности. Я думаю, потому что Laravel имеет так много зависимостей (загружает ~ 280 файлов), и каждый из этих файлов читает медленно, он складывается очень быстро.

Кривс указал мне правильное направление, в этом сообщении в блоге описывается новая функция в Vagrant 1.5, которая позволяет вам синхронизировать файлы в виртуальной машине, а не использовать общую папку.

В Windows нет собственного rsync-клиента, поэтому вам придется использовать cygwin. Установите его и обязательно отметьте Net/rsync. Добавьте C:\cygwin64\bin к вашим путям. [Или вы можете установить его на Win10/Bash]

Вагрант вводит новую функцию. Я использую 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 создает много временных файлов, которые могут отключить средства просмотра файлов, но если вы разрешите ему самому загружать файлы, это будет работать хорошо.


Еще один вариант - использовать lsyncd. Я имел большой успех, используя это на хосте Ubuntu → FreeBSD guest. Я еще не пробовал это на хосте Windows.

Ответ 2

Чтобы помочь вам с вашей проблемой, я нашел этот блог, в котором говорится о том, чтобы оптимизировать производство 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, как показано здесь.

enter image description here

Ответ 3

Я обнаружил, что наибольшее увеличение скорости с 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)

Надеюсь, что поможет

Ответ 4

Из моего конкурса Hello World, какой из них Laravel? Думаю, вы можете догадаться. Я использовал докер-контейнер для теста и вот результаты

Сделать http-response "Hello World":

  • Golang с обработчиком журналов stdout: 6000 rps
  • SpringBoot с обработчиком журнала stdout: 3600 rps
  • Laravel 5 с выключенным протоколом: 230 об/мин

Ответ 5

Да - 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 м приведет вас к безумию.

Ответ 6

Я использую Laravel совсем немного, и я просто не верю числам, которые он мне говорит, потому что сквозной рендеринг, измеренный моим браузером, показывает LOWER общее время от запроса до готовности.

Кроме того, я получаю несколько более высокие числа на моей машине на работе, что делает страницу заметно быстрее, чем моя машина дома.

Я не знаю, как рассчитываются эти числа, но они не подтверждаются наблюдением или инструментами браузера, такими как Firebug...

Laravel на самом деле не настолько медленный, особенно когда он оптимизирован. Тем не менее, он голоден в памяти. Даже тяжелая CMS, такая как Drupal, которая очень медленная, кажется, имеет около 1/3 объема памяти запроса голосовой кости Laravel.

Таким образом, чтобы запустить Laravel в производстве, я бы развернул серверы с оптимизацией памяти до серверов, оптимизированных для CPU.

Ответ 7

Я знаю, что это немного старый вопрос, но все изменилось. Ларавел не так уж медленный. Это, как уже упоминалось, синхронизированные папки медленны. Однако в 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 мс для меня.

Ответ 8

Следующий снимок экрана представляет собой пример без любых реализованных методов производительности.

По умолчанию скорость загрузки нескольких моделей, http-фильтров и контейнеров.

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

Не намного медленнее, вам нужно правильно настроить свой Laravel. В Laravel существует множество методов оптимизации. Попробуйте некоторые.

Я использовал все популярные PHP Framework для разработки веб-приложений, и мои исследования показывают, что Laravel - лучшая структура для PHP с точки зрения

  • Скорость/Производительность
  • ремонтопригодность
  • Производительность разработчика
  • Удобство
  • Локализация
  • Безопасность
  • Юзабилити
  • Масштабируемость
  • Тестируемость
  • готовность к развертыванию

Ответ 9

Laravel работает медленно, потому что в большинстве случаев использование PHP для веб-страниц идет медленно.

С Laravel вся инфраструктура перестраивается при каждом вызове, поэтому все страницы указывают на index.php. Поскольку весь фреймворк состоит из сценариев PHP, все они должны проходить через интерпретатор PHP - каждый раз. Чем больше рамки, тем дольше это занимает.

Сравните это с "серверной средой" (например, tomcat), где сервер запускает код инициализации один раз, и в конце концов все страницы будут в собственном коде (после JIT).

Например, при использовании того же оборудования, ОС и т.д. Простой "мир приветствия" с использованием JSP на этом оборудовании составляет 3000 об/с, тот же мир приветствия на laravel - 51 об/с.

Самый простой способ протестировать издержки фреймворка и получаемый в результате максимальный RPS на ядро - это использовать Apache AB и значение параллелизма 1 с простым динамическим "привет миром" (чтобы избежать статического кэширования страниц).