Symfony vs Laravel Performance Benchmark

Symfony vs Laravel Performance Benchmark banner

I've decided to test the performance of two popular PHP frameworks - Laravel and Symfony. The results surprised me.

The performance test which I've conducted is quite simple. I've created two projects in Symfony and Laravel with only one page, no database queries, no API calls, and no complex calculations, just one simple page. Then I ran HTTP stress tests using a benchmarking tool against both setups and the results are surprising.

You can check both projects on my GitHub - Symfony / Laravel.

Symfony version: 5.4

Laravel version: 10.10

Did you know that Laravel uses a lot of Symfony components under the hood?

Symfony is known for making really good components used across the whole PHP ecosystem in numerous packages. Most of the Symfony components can be used as a standalone package without the need for Symfony itself, which is quite handy.

For example, the laravel/framework packages uses 11 Symfony components (at the time of writing this post), some of which are symfony/routing, symfony/mailer, symfony/http-foundation etc.

Let's start with the fun part.

The test environment

Similar to my mod_php vs php-fpm performance tests I've used exactly the same setup:

  • Machine: Hetzner VPS with 2 dedicated AMD CPUs8GB RAM80GB SSD
  • Benchmark machine: separate VPS (in the same region)
  • Benchmark tool: bombardier (golang)
  • OS: Ubuntu 22.04
  • PHP version: PHP 8.2.9
  • php-fpm web server: nginx/1.18.0 with php-fpm 8.2.9
  • php.ini custom config: 
    // php.ini
    // default config
    opcache.memory_consumption=256
    opcache.max_accelerated_files=20000
    opcache.validate_timestamps=0
    
    realpath_cache_size=4096K
    realpath_cache_ttl=600

Benchmark setup

The exact command to run the tests is

bombardier -c 100 -d 1m -l http://IP_HERE/

which translates to

  • Concurrent requests: 100
  • Duration: 1 minute

The results

Let's see how both frameworks did in the test.

Average requests per second (higher is better)

  • Symfony: 775.52
  • Laravel: 118.36

Symfony is 6.5 times faster than Laravel.

avg reqs per second symfony vs laravel

Average latency (lower is better)

  • Symfony: 128.82ms
  • Laravel: 840.48ms

Again, Symfony is 6.5 times faster than Laravel.

averange latency performance symfony vs laravel

Max latency (lower is better)

  • Symfony: 0.33s
  • Laravel: 3.98s

Symfony is 12 times faster than Laravel.

max latency laravel vs symfony

Latency distribution

Once again, Symfony performs better with stable performance.

symfony vs laravel latency distribution chart

Raw results

Laravel test results

$ bombardier -c 100 -d 1m -l LARAVEL_PROJECT_IP
Bombarding http://LARAVEL_PROJECT_IP:80 for 1m0s using 100 connection(s)
[====================================================================================================================================================================================] 1m0s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec       118.36      73.16     440.81
  Latency      840.48ms   430.55ms      3.98s
  Latency Distribution
     50%   740.39ms
     75%      1.06s
     90%      1.39s
     95%      1.64s
     99%      2.42s
  HTTP codes:
    1xx - 0, 2xx - 7196, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:   165.44KB/s

Symfony test results

$ bombardier -c 100 -d 1m -l SYMFONY_PROJECT_IP
Bombarding http://SYMFONY_PROJECT_IP:80 for 1m0s using 100 connection(s)
[====================================================================================================================================================================================] 1m0s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec       775.52      62.82    1431.45
  Latency      128.82ms     7.23ms   333.25ms
  Latency Distribution
     50%   127.85ms
     75%   130.33ms
     90%   133.42ms
     95%   135.37ms
     99%   139.94ms
  HTTP codes:
    1xx - 0, 2xx - 46623, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:     0.90MB/s

Conclusion

I'm not exactly sure what happened here. The difference seems so big that I start to question my setup and configurations. I've checked the Laravel config, I've enabled route caching and view caching, and debug mode is off...

The clear winner is Symfony by a big margin. I'm shocked by these results. I was expecting a similar performance +-10% diff in favor of one or the other.