Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 拉威尔真的这么慢吗?_Performance_Laravel - Fatal编程技术网

Performance 拉威尔真的这么慢吗?

Performance 拉威尔真的这么慢吗?,performance,laravel,Performance,Laravel,我刚开始使用拉威尔。我几乎还没有写过任何代码,但我的页面几乎需要一秒钟才能加载 当我的无框架应用程序和NodeJS应用程序花费~2ms时,这让我有点震惊。拉威尔在干什么?这不是正常的行为,是吗?它需要一些微调吗?为了帮助您解决您的问题,我找到了这篇文章,其中谈到了优化laravel生产。现在,让应用程序快速运行所需的大部分工作都取决于代码的效率、网络容量、CDN、缓存和数据库 现在我来谈谈这个问题: 拉威尔开箱很慢。有很多方法可以优化它。您还可以选择在代码中使用缓存,改进服务器机器,yadda

我刚开始使用拉威尔。我几乎还没有写过任何代码,但我的页面几乎需要一秒钟才能加载


当我的无框架应用程序和NodeJS应用程序花费~2ms时,这让我有点震惊。拉威尔在干什么?这不是正常的行为,是吗?它需要一些微调吗?

为了帮助您解决您的问题,我找到了这篇文章,其中谈到了优化laravel生产。现在,让应用程序快速运行所需的大部分工作都取决于代码的效率、网络容量、CDN、缓存和数据库

现在我来谈谈这个问题:

拉威尔开箱很慢。有很多方法可以优化它。您还可以选择在代码中使用缓存,改进服务器机器,yadda yadda yadda。但最终拉威尔还是慢了下来

Laravel使用了大量的symfony库,正如您在中所看到的,symfony的排名非常低(最后一点)。你甚至可以发现拉维几乎在底部

很多自动加载都是在后台进行的,你甚至不需要的东西都会被加载。因此,从技术上讲,因为laravel易于使用,它可以帮助您快速构建应用程序,也可以使其变得缓慢

但我并不是说拉威尔不好,它是伟大的,在很多方面都很伟大。但是,如果您希望流量激增,您将需要更多的硬件来处理请求。这会花你很多钱。但如果你非常富有,那么你可以用拉威尔实现任何目标D

通常的权衡:

 Easy = Slow, Hard = Fast
<>我认为C或java有一个硬的学习曲线和硬的可维护性,但是它在Web框架中排名很高。 虽然不太相关。我只是想证明一下
easy=slow
的观点:

Ruby在可维护性和易学性方面有很好的声誉,但它也被认为是python和php中速度最慢的,如图所示


我经常使用Laravel,我根本不相信它告诉我的数字,因为用我的浏览器测量的端到端渲染显示从请求到准备的总时间较短

此外,我在工作时在我的机器上得到的数字略高,这确实比我在家里的机器执行页面的速度要快得多

我不知道这些数字是如何计算出来的,但它们并没有得到观察或Firebug等浏览器工具的证实

Laravel实际上并不那么慢,尤其是在优化时。然而,这是记忆饥饿。即使是像Drupal这样速度非常慢的大型CMS,其内存占用也只有裸骨骼Laravel请求的1/3左右


因此,为了在生产环境中运行Laravel,我会先部署到内存优化的服务器,然后再部署CPU优化的服务器。

Laravel实际上并没有那么慢。500-1000毫秒是荒谬的;在调试模式下,我将其设置为20ms

问题是Vagrant/VirtualBox+共享文件夹。我没意识到他们的表演受到了如此大的打击。我猜因为Laravel有太多的依赖项(加载约280个文件),而且每个文件的读取速度都很慢,所以它加起来真的很快

kreeves为我指出了正确的方向,描述了Vagrant 1.5中的一个新功能,它允许您将文件重新同步到VM中,而不是使用共享文件夹

Windows上没有本机rsync客户端,因此您必须使用。安装它,并确保检查网络/rsync。将
C:\cygwin64\bin
添加到路径中。[或者您可以在Win10/Bash上安装它]

。我用的是Puphet,所以我的文件看起来有点滑稽。我不得不调整它,使其看起来像这样:

  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创建了许多临时文件,这些文件可能会让文件观察者感到困惑,但是如果您让它自己处理上传,它会很好地工作



还有一个选择是使用。我已经在Ubuntu主机->FreeBSD来宾上成功地使用了它。我还没有在Windows主机上试用过它。

我发现使用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?我想你能猜到。 我使用docker容器进行测试和测试 以下是结果

要使http响应“Hello World”:

  • 带有日志处理程序标准输出的Golang:6000转/秒
  • 带日志处理程序的SpringBoot标准输出:3600 rpm
  • 拉雷维尔5号,记录偏差:230转/秒

是的-拉威尔真的那么慢。为此,我开发了一个POC应用程序。简单路由器,带有登录表单。我只能在一台20美元的数字海洋服务器上获得10个并发连接的60个RPS(几GB ram)

设置:

2gb RAM
Php7.0
apache2.4
mysql 5.7
memcached server (for laravel session)
我运行了优化、composer dump autoload等,它实际上将RPS降低到43 ish

问题是应用程序在200-400毫秒内响应。我在本地机器laravel上运行AB测试(即,不是通过网络流量);我只得到了112分;响应时间快200毫秒,平均300毫秒

相比之下,我在AWST2.medium(x3,负载平衡)上测试了我的PHP原生应用程序,每天运行数百万个请求。当我通过ELB从我的本地机器到那个网络建立了25个并发连接时,我得到了大约1200 RPM。在带有load和laravel“登录”页面的机器上存在巨大差异

这些页面包含会话(elasticache/memcached)、实时数据库查找(通过memcached缓存查询)、CDN上的资产等

据我所知,laravel在物体上的负载约为200-300毫秒。毕竟,对于PHP生成的视图来说,这种延迟是可以容忍的。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" **%T/%D**" combined
[XDebug]
xdebug.remote_autostart = 1
xdebug.remote_enable = 1
php artisan route:cache
php artisan config:cache