Is Laravel really this slow?

后端 未结 10 1577
长情又很酷
长情又很酷 2020-12-04 06:20

I just started using Laravel. I\'ve barely written any code yet, but my pages are taking nearly a second to load!

\"

相关标签:
10条回答
  • 2020-12-04 06:53

    Laravel is not actually that slow. 500-1000ms is absurd; I got it down to 20ms in debug mode.

    The problem was Vagrant/VirtualBox + shared folders. I didn't realize they incurred such a performance hit. I guess because Laravel has so many dependencies (loads ~280 files) and each of those file reads is slow, it adds up really quick.

    kreeves pointed me in the right direction, this blog post describes a new feature in Vagrant 1.5 that lets you rsync your files into the VM rather than using a shared folder.

    There's no native rsync client on Windows, so you'll have to use cygwin. Install it, and make sure to check off Net/rsync. Add C:\cygwin64\bin to your paths. [Or you can install it on Win10/Bash]

    Vagrant introduces the new feature. I'm using Puphet, so my Vagrantfile looks a bit funny. I had to tweak it to look like this:

      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
    

    Once you're all set up, try vagrant up. If everything goes smoothly your machine should boot up and it should copy all the files over. You'll need to run vagrant rsync-auto in a terminal to keep the files up to date. You'll pay a little bit in latency, but for 30x faster page loads, it's worth it!


    If you're using PhpStorm, it's auto-upload feature works even better than rsync. PhpStorm creates a lot of temporary files which can trip up file watchers, but if you let it handle the uploads itself, it works nicely.


    One more option is to use lsyncd. I've had great success using this on Ubuntu host -> FreeBSD guest. I haven't tried it on a Windows host yet.

    0 讨论(0)
  • 2020-12-04 06:55

    I know this is a little old question, but things changed. Laravel isn't that slow. It's, as mentioned, synced folders are slow. However, on Windows 10 I wasn't able to use rsync. I tried both cygwin and minGW. It seems like rsync is incompatible with git for windows's version of ssh.

    Here is what worked for me: NFS.

    Vagrant docs says:

    NFS folders do not work on Windows hosts. Vagrant will ignore your request for NFS synced folders on Windows.

    This isn't true anymore. We can use vagrant-winnfsd plugin nowadays. It's really simple to install:

    1. Execute vagrant plugin install vagrant-winnfsd
    2. Change in your Vagrantfile: config.vm.synced_folder ".", "/vagrant", type: "nfs"
    3. Add to Vagrantfile: config.vm.network "private_network", type: "dhcp"

    That's all I needed to make NFS work. Laravel response time decreased from 500ms to 100ms for me.

    0 讨论(0)
  • 2020-12-04 06:56

    To help you with your problem I found this blog which talks about making laravel production optimized. Most of what you need to do to make your app fast would now be in the hands of how efficient your code is, your network capacity, CDN, caching, database.

    Now I will talk about the issue:

    Laravel is slow out of the box. There are ways to optimize it. You also have the option of using caching in your code, improving your server machine, yadda yadda yadda. But in the end Laravel is still slow.

    Laravel uses a lot of symfony libraries and as you can see in techempower's benchmarks, symfony ranks very low (last to say the least). You can even find the laravel benchmark to be almost at the bottom.

    A lot of auto-loading is happening in the background, things you might not even need gets loaded. So technically because laravel is easy to use, it helps you build apps fast, it also makes it slow.

    But I am not saying Laravel is bad, it is great, great at a lot of things. But if you expect a high surge of traffic you will need a lot more hardware just to handle the requests. It would cost you a lot more. But if you are filthy rich then you can achieve anything with Laravel. :D

    The usual trade-off:

     Easy = Slow, Hard = Fast
    

    I would consider C or Java to have a hard learning curve and a hard maintainability but it ranks very high in web frameworks.

    Though not too related. I'm just trying to prove the point of easy = slow:

    Ruby has a very good reputation in maintainability and the easiness to learn it but it is also considered to be the slowest among python and php as shown here.

    enter image description here

    0 讨论(0)
  • 2020-12-04 07:03

    I use Laravel quite a bit and I simply do not believe the numbers it tells me because end-to-end rendering as measured by my browser shows LOWER total time from request to ready.

    Further, I get slightly higher numbers on my machine at work, which does execute the page noticeably faster than my machine at home.

    I don't know how those numbers are getting calculated, but they are not corroborated by observation, or browser tools like Firebug...

    Laravel is not actually all that slow, especially when optimized. It is memory-hungry however. Even a heavy CMS like Drupal which is very slow, appears to have about 1/3rd the memory footprint of a bare bones Laravel request.

    Thus to run Laravel in production, I would deploy to memory-optimized servers before CPU-optimized servers.

    0 讨论(0)
提交回复
热议问题