Laravel 之父:讓 Laravel、Symfony、 Zend 來一場公平的性能測試


網上充斥着各式各樣的 PHP 框架性能對比的文章。然而,他們總是把“蘋果”和“橘子”做對比(看上去有點兒像,都是圓的,但其實不是一碼事)。這次,我將着重對 Laravel、Symfony 和 Zend 這三個框架做性能對比,並且還要說明為什么這三個框架總是被錯誤的進行比較。

我給的對比結果你不必全信。讀完這篇文章之后,你可以自己搞一個 2GB 的 DigitalOcean 的服務器親自去檢驗一下,也就 5 分鍾而已。

開始之前,我希望你知道:所有這些框架都足夠快,都可以滿足你構建任何應用。寫這篇文章之前我也猶豫過,我認為做這種層次的對比其實真的挺傻的。我唯一的目的是展示如何在三個框架之間進行公平的比較。

問題的源頭

當你在一台全新的 DigitalOcean 服務器上配置 Symfony 或 Zend 項目時,你會發現返回的 http 響應是沒有 session 信息的。注意,看下圖,cookie 並沒有被返回:

然而,Laravel 默認是開啟 session 的(另外還有一些中間件)。這樣能讓基於 Laravel 構建的應用很方便地利用 session 機制將用戶狀態持久化保存。為了 Laravel 框架的用戶更方便而默認開啟 session 反倒讓 Laravel 在性能對比中很受傷。

另一個常見錯誤是:要么沒有倒出一份優化過的 Composer autoloader ;要么沒有用 php artisan config:cache 指令緩存 Laravel 配置信息 -- 這份緩存能夠大幅度減少 Laravel 的啟動(bootstrap)時間。

設置環境

首先,我通過 Laravel Forge 在 DiginalOcean 上創建了一個 2GB 內存的服務器,安裝的是 PHP 7.1 版本。然后安裝 Symfony ,優化 Composer autoloader ,配置 Nginx 通過生產環境下的前端控制器(app.php)運行。並且我還按照 Symfony 生產環境調優指南一步步設置到位。對於 Zend 的配置也類似。

接下來,針對 PHP 7.1 的 opcache 設置如下(生產環境):

opcache.enable=1 
opcache.memoryconsumption=512 
opcache.interned
stringsbuffer=64 
opcache.max
acceleratedfiles=20000 
opcache.validate
timestamps=0 
opcache.savecomments=1 
opcache.fast
shutdown=1

安裝 Laravel 時,執行 config:cache Artisan 指令,並且在 app/Http/Kernel.php文件中將 web 中間件組注釋掉(這些中間件的作用就是讓 Laravel 支持 session)。做完上述修改之后就可以讓三個框架都在無 session 支持的狀態下進行對比了。

對比結果

After configuring the projects, I ran a simple test using Apache benchmark, which anyone can recreate:

三個框架都能正常運行后,終於可以祭出 Apache benchmark 來做簡單的測試了。其實任何人都可以很容易地復現這一測試:

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

下面是測試結果:

無 Session:

  • Laravel: 609.03 次請求/秒 (平均值)
  • Zend: 559.91 次請求/秒 (平均值)
  • Symfony: 532.97 次請求/秒 (平均值)

有 Session:

  • Laravel: 521.64 次請求/秒(平均值)
  • Zend: 484.94 次請求/秒 (平均值)
  • Symfony: 439.37 次請求/秒 (平均值)

原文地址:https://medium.com/@taylorotwell/benchmarking-laravel-symfony-zend-2c01c2b270f8#.kf4gywdmg


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM