Laravel真的这么慢吗?

我刚开始使用Laravel。 我几乎没有写任何代码,但我的网页加载需要近一秒钟!

laravel计时

当我的无框架应用程序和NodeJS应用程序花费大约2ms时,这对我来说有点令人震惊。 Laravel在做什么? 这是不正常的行为呢? 是否需要一些微调?

Laravel实际上并不那么慢。 500-1000毫秒是荒谬的; 我在debugging模式下将其调低到20ms。

问题是Vagrant / VirtualBox +共享文件夹。 我不知道他们遭受了这样的performance。 我想是因为Laravel有这么多的依赖关系(加载大约280个文件),每个文件读取速度都很慢,加起来非常快。

kreeves指出我正确的方向, 这篇博客文章介绍了Vagrant 1.5中的一个新function,可以让你的文件同步到虚拟机而不是使用共享文件夹。

在Windows上没有本地的rsync客户端,所以你必须使用cygwin 。 安装它,并确保检查Net / rsync。 将C:\cygwin64\bin添加到您的path。

Vagrant引入了新function 。 我正在使用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 

一旦你们全都成立了,就试试看看。 如果一切顺利,你的机器应该启动,它应该复制所有的文件。 你需要在terminal上运行vagrant rsync-auto来保持文件是最新的。 你会付出一点点延迟,但是加载速度要快30倍,这是值得的!


如果你使用PhpStorm,它的自动上传function甚至比rsync更好。 PhpStorm创build了很多临时文件,可以使文件观察者绊倒,但是如果让它处理上传本身,它可以很好地工作。

为了帮助你解决你的问题,我发现这个博客讨论了如何优化laravel生产。 大部分你需要做的,使您的应用程序快速现在掌握在你的代码是多less效率,你的networking容量,CDN,caching,数据库。

现在我要谈谈这个问题:

Laravel开箱即用。 有办法来优化它。 你也可以select在你的代码中使用caching,改善你的服务器机器,yadda yadda yadda。 但最后Laravel仍然很慢。

Laravel使用了很多symfony库,正如你在techempower的基准testing中看到的那样 ,symfony的排名非常低(至less可以说)。 你甚至可以find拉拉维尔基准几乎在底部。

很多自动加载在后台发生,你可能甚至不需要加载的东西。 所以在技术上,因为laravel易于使用,所以它可以帮助您快速构build应用程序,这也使其变得很慢。

但是我不是说拉拉维尔不好,很多很好 ,很多东西。 但是,如果您预期stream量激增,您将需要更多的硬件来处理请求。 这会花费你更多。 但是如果你富有,那么你可以用Laravel来实现任何事情。 :d

通常的权衡:

  Easy = Slow, Hard = Fast 

我会考虑C或Java有一个艰难的学习曲线和艰难的可维护性,但它在Web框架中排名非常高。

虽然不太相关。 我只是试图certificateeasy = slow点:

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

在这里输入图像说明

我发现用Laravel 4可以获得最大的速度增益,可以select正确的会话驱动程序;

 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容器进行testing,这里是结果

为了使http响应“Hello World”:

  • Golang与日志处理器stdout:6000 rps
  • 带有Log Handler标准输出的SpringBoot:3600 rps
  • Laravel 5closures日志:230 rps

是的 – Laravel真的很慢。 为此我build立了一个POC应用程序。 简单的路由器,用login表单。 我只能在20美元的数字海洋服务器上获得60个RPS和10个并发连接(几GB的RAM)。

build立:

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

我运行了优化,composer php自动载入等,它实际上降低了RPS到43

问题是应用程序响应200-400毫秒。 我从本地机器laravel上运行ABtesting(即不通过networkingstream量)。 而我只有112 RPS; 平均响应时间为200ms,平均响应时间为300ms。

相比之下,我testing了我的生产PHP本机应用程序每天在AWS t2.medium(x3,负载平衡)上运行几百万个请求。 当我从本地机器到networking上的25个并发连接,通过ELB,我得到了大约1200 RPS。 有负载的机器与laravel“login”页面的巨大差异。

这些是Sessions(elasticache / memcached),Live DB查找(通过memcachedcaching的查询),CDN上的资产等,等等的页面。

我可以告诉,拉拉维尔约200-300ms负载的东西。 毕竟,对于PHP生成的视图来说,这种延迟在负载上是可以忍受的。 但是,对于使用Ajax / JS处理小更新的PHP视图,它开始感觉迟缓。

我无法想象这个系统应该与多租户应用程序的样子是什么,而200个机器人同时抓取100个页面。

Laravel非常适合简单的应用程序。 stream明是可以忍受的,如果你不需要做任何事情需要中间件废话(IE,没有多租户应用程序和自定义域等);

然而,我从来不喜欢从一个可以绑定的东西开始,并为“hello world”发布300ms的负载。

如果你想“谁在乎?”

编写一个预测性search,依靠快速查询来响应几十万条结果中的自动填充build议。 那200-300ms的滞后会让你的用户绝对疯狂。

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

而且,在我的机器上工作的时候,我的数字稍微高一些,而且页面的执行速度明显快于我家里的机器。

我不知道这些数字是如何计算的,但是它们没有被观察或者像Firebug这样的浏览器工具所证实。

Laravel实际上并不是那么慢,特别是在优化时。 但是,这是内存饥饿。 即使像Drupal这样速度很慢的CMS,似乎也只有Laravel裸机的内存需求的三分之一。

因此,要在生产环境中运行Laravel,我将在CPU优化的服务器之前部署到内存优化的服务器。

我知道这是一个老问题,但事情改变了。 Laravel并不那么慢。 正如前面提到的,同步文件夹很慢。 但是,在Windows 10上,我无法使用rsync 。 我尝试了cygwinminGW 。 似乎rsyncgit for windowsssh版本的git for windows不兼容。

这是什么为我工作: NFS

stream浪文档说:

NFS文件夹在Windows主机上不起作用。 Vagrant将忽略您在Windows上对NFS同步文件夹的请求。

这不是真的 我们现在可以使用vagrant-winnfsd 插件 。 安装非常简单:

  1. 执行vagrant plugin install vagrant-winnfsd
  2. 改变你的Vagrantfileconfig.vm.synced_folder ".", "/vagrant", type: "nfs"
  3. 添加到Vagrantfileconfig.vm.network "private_network", type: "dhcp"

这就是我需要使NFS工作。 Laravel响应时间从500ms减less到100ms。

以下屏幕截图仅仅是没有实现任何性能方法的示例。

默认的加载速度很less,httpfilter和容器服务。

在这里输入图像说明

没有那么慢,你需要以适当的方式configuration你的Laravel。 Laravel有很多优化技术。 试一些。

我已经使用所有stream行的PHP框架进行Web应用程序开发,而我的研究表明, Laravel是有史以来最好的PHP框架,

  • 速度/性能
  • 可维护性
  • 开发人员生产力
  • 方便
  • 本土化
  • 安全
  • 可用性
  • 可扩展性
  • 可测性
  • 可部署性