[翻]Laravel,Symfony和Zend对比

在互联网上充斥着各种各样比较 PHP 框架的标准。然而,他们总是把毫无相干的事物相对比。在这里我想尤其关注 Laravel ,Symfony,和 Zend 并说明为什么总有人把他们混在一起错误的比较。

你不必相信我的话。在您看完这篇文章之后,你可以运行你的 DigitalOcean 服务器,花5分钟来自己测试这些结果。

在开始之前,您需要知道所有的这些框架都足够的快速来处理任何您想建立的应用。我甚至很犹豫要不要写这篇文章,因为我觉得在 PHP 的独特魅力之上加上所谓的标杆是非常愚蠢的。我只想告诉人们怎么去公平的比较这三个框架。

问题

当你第一次在服务器上配置 Symfony 或者 Zend 的项目时,你会发现这里没有返回 session 信息。注意在当前网站没有 cookies

[翻]Laravel,Symfony和Zend对比_第1张图片

然而, Laravel装载着 sessions ( 和其他的中间组件)使自己能够跳出默认的登录页面。这很方便因为大多数的使用这些框架的网站都使用 sessions 来记录用户的登录状态。我把这视为让用户方便的基础,虽然这样对于基础的标杆比较不太公平。

注:上段主要是说Laravel不需要自己去设置session而是在中间组件中默认已经设置好的,只需要使用命令php artisan make:auth就可以根据脚手架生成基础的登录注册

[翻]Laravel,Symfony和Zend对比_第2张图片

另一个普遍的错误是在部署代码时不去优化一下Composer的自动加载或者不去使用php artisan config:cache命令来缓存 Laravel 的配置,这会节约一大段加载bootstrap的时间。

配置

我在一台2GB的带有 PHP 7.1 的 Digital Ocean 服务器上搭建了 Laravel Forge。我已经安装了 Symfony ,优化了自动加载,并且通过生产环境下前端控制器(app.php)配置了Nginx来服务 Symfony。我还遵循了 Symfony 生产环境的调优指南。对于 Zend 我也使用了相同的基本步骤。

然后,我使用了下面的配置来设置生产环境下 PHP 7.1的opcache

opcache.enable=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0
opcache.save_comments=1
opcache.fast_shutdown=1

当我安装 Laravel 时,我使用 config:cache 命令并且注释掉了app/Http/Kernel.php文件中的一批web中间组件。这些中间组件负责 sessions 的实现。这个改变让我们能够不使用 session 处理来测试所有的三个框架。

结果

在部署好了这些项目后,我使用Apache压力测试来做一个简单的测试

ab -t 10 -c 10 http://server.address/

以下是结果:

没有 Sessions :

  • Laravel: 609.03 requests per second (平均)
  • Zend: 559.91 requests per second (平均)
  • Symfony: 532.97 requests per second (平均)

有 Sessions:

  • Laravel: 521.64 requests per second (平均)
  • Zend: 484.94 requests per second (平均)
  • Symfony: 439.37 requests per second (平均)

原作者:Taylor Otwell,Laravel 创始人
原文章:Benchmarking Laravel,Symfony,&Zend
翻译者:赖杰

你可能感兴趣的:(php)