Ларавель действительно такой медленный?


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

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

8 61

8 ответов:

Laravel это не на самом деле это медленно. 500-1000ms абсурдно; я получил его до 20 мс в режиме отладки.

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

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

в Windows нет собственного клиента rsync, поэтому вам придется использовать программа. Установите его и убедитесь, что вы отключили Net/rsync. Добавить C:\cygwin64\bin на вашем пути.

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

, чтобы помочь вам с вашей проблемой, я нашел это блог который говорит о том, чтобы сделать производство laravel оптимизированным. Большая часть того, что вам нужно сделать, чтобы сделать ваше приложение быстрым, теперь будет зависеть от того, насколько эффективен ваш код, ваша сетевая емкость, CDN, кэширование, база данных.

теперь я расскажу о проблеме:

Laravel медленно выходит из коробки. Есть способы его оптимизировать. У вас также есть возможность использовать кэширование в коде, улучшая ваша серверная машина, яд-яд-яд. Но в конце концов Ларавель все еще медленный.

Laravel использует много библиотек symfony и, как вы можете видеть в тесты techempower, symfony занимает очень низкое место (последнее, мягко говоря). Вы даже можете найти laravel ориентир чтобы быть почти на дне.

много автоматической загрузки происходит в фоновом режиме, вещи, которые вы, возможно, даже не нужно загружается. Так что технически, потому что laravel прост в использовании, он помогает быстро создавать приложения, а также делает его медленным.

но я не говорю, что Laravel-это плохо, это большой, отлично справляется со многими вещами. Но если вы ожидаете высокий всплеск трафика, вам понадобится гораздо больше оборудования только для обработки запросов. Это будет стоить вам намного больше. Но если вы очень богаты, то вы можете достичь всего с Laravel. : D

обычный компромисс:

 Easy = Slow, Hard = Fast

Я бы считал, что C или Java имеют сложную кривую обучения и a жесткая ремонтопригодность, но она занимает очень высокое место в веб-фреймворках.

хотя и не слишком связаны. Я просто пытаюсь доказать точку зрения easy = slow:

Ruby имеет очень хорошую репутацию в ремонтопригодности и легкости его изучения, но он также считается самым медленным среди python и php, как показано здесь.

enter image description here

Я обнаружил, что самый большой прирост скорости с 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-ответ "Hello World":

  • Golang с обработчиком журнала stdout: 6000 rps
  • SpringBoot с обработчиком журнала stdout: 3600 rps
  • Laravel 5 с Off log: 230 rps

да-Laravel действительно так медленно. Я построил приложение POC для этого. Простой маршрутизатор, с формой входа. Я мог только получить 60 RPS С 10 параллельными подключениями на сервере $ 20 digital ocean (несколько ГБ ОЗУ);

Setup:

2gb RAM
Php7.0
apache2.4
mysql 5.7
memcached server (for laravel session)

Я запустил оптимизацию, автозагрузку дампа композитора и т. д., И это на самом деле понизил RPS до 43-иш.

проблема в том, что приложение отвечает в 200-400ms. I запускал тест AB с локальной машины laravel был на (т. е. не через веб-трафик); и я получил только 112 RPS; с 200 мс быстрее время отклика в среднем 300 мс.

сравнительно, я протестировал свое собственное приложение PHP для производства, выполняющее несколько миллионов запросов в день на AWS t2.средний (x3, балансировка нагрузки). Когда у меня было 25 параллельных подключений от моей локальной машины к этому через интернет, через ELB, я получил примерно 1200 RPS. Огромная разница на машине с нагрузкой против страницы laravel "login".

это страницы с сеансами (по факту / с memcached), живой БД-запросы (кэшированных запросов через memcached в), активы потянул за УСР и т. д. и т. п. и т. д.

что я могу сказать, laravel палочки около 200-300ms нагрузки на вещи. Его штраф для PHP сгенерированных представлений, в конце концов, этот тип задержки терпим при загрузке. Однако для PHP-представлений, которые используют Ajax / JS для обработки небольших обновлений, он начинает чувствовать себя вялым.

Я не могу себе представить, как эта система будет выглядеть с мультитенантным приложением, в то время как 200 ботов сканируют 100 страниц все в одно и то же время.

Laravel отлично подходит для простых приложений. Lumen терпимо, если вам не нужно делать ничего необычного, что потребует промежуточного программного обеспечения (т. е. нет мультитенантных приложений и пользовательских доменов и т. д.);

однако мне никогда не нравилось начинать с чего-то, что может связать и вызвать нагрузку 300 мс для сообщения "hello world".

Если вы думаете "кого это волнует?"

.. Напишите прогнозирующий поиск, который опирается на быстрые запросы для ответа предложения автозаполнения через несколько сотен тысяч результатов. Это отставание в 200-300 мс приведет ваших пользователей к абсолютному безумию.

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

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

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

Laravel на самом деле не все так медленно, особенно при оптимизации. Однако он жаждет памяти. Даже тяжелая CMS, такая как Drupal, которая очень медленная, кажется, имеет около 1/3 следа памяти запроса bare bones Laravel.

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

Я знаю, что это немного старый вопрос, но все изменилось. Ларавель не настолько медлителен. Это, как уже упоминалось, синхронизированные папки медленные. Однако в Windows 10 я не смог использовать rsync. Я попробовал оба cygwin и minGW. Кажется, что rsync несовместимо с git for windows'S версия ssh.

вот что сработало для меня:NFS.

залетный документы говорит:

папки NFS не работают в Windows принимать гостей. Vagrant проигнорирует ваш запрос на синхронизацию папок NFS в Windows.

это уже не правда. Мы можем использовать vagrant-winnfsdплагин в настоящее время. Это очень просто установить:

  1. выполнить vagrant plugin install vagrant-winnfsd
  2. изменить в своей Vagrantfile:config.vm.synced_folder ".", "/vagrant", type: "nfs"
  3. добавить Vagrantfile:config.vm.network "private_network", type: "dhcp"

это все, что мне нужно сделать NFS работа. Время отклика что Laravel снизилась с 500 мс до 100 мс для мне.

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

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

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

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

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