Linux

Benchmark PHP 8.1 vs PHP 8.0 vs PHP 7.4 vs PHP 7.3 vs PHP 7.0 vs PHP 5.6 vs PHP 5.5

I have run benchmark PHP 8.1 vs PHP 8.0 which was released on November 25, 2021.

New features on PHP 8.1

  • Enums
  • Fibers
  • Readonly Properties
  • Intersection Types
  • never return type
  • final class constants
  • New fsync and fdatasync functions
  • New array_is_list function
  • New Sodium XChaCha20 functions
  • GD: AVIF image support
  • Intl: New IntlDatePatternGenerator class
  • Phar: Added OpenSSL-256 and OpenSSL-512 signature algorithms
  • GD: Lossless WebP encoding support
  • New #[ReturnTypeWillChange] attribute
  • First-class Callable Syntax
  • $_FILES: New full_path value for directory-uploads
  • Array unpacking support for string-keyed arrays
  • Explicit Octal numeral notation
  • Hash functions accept algorithm-specific $options
  • MurmurHash3 hash algorithm support
  • xxHash hash algorithms support
  • FPM: Configurable child-process spawn rate
  • Curl: DNS-over-HTTPS support
  • Curl: File uploads from strings with CURLStringFile
  • MySQLi: New MYSQLI_REFRESH_REPLICA constant

The benchmarks I did are very simple, but represent what we use most of the time.

I chose to use a php script from php-benchmark-script.com and make some code adjustments because it doesn’t run on PHP 8.1.

Benchmark script run the following test:

  • Test Math: 200.000
  • Test String Manipulation: 200.000
  • Test Loops: 20.000.000
  • Test If Else If: 20.000.000

Below is the benchmark script:

<?php
ini_set('display_errors', 0);
/*
##########################################################################
#                      PHP Benchmark Performance Script                  #
#                          2010 Code24 BV                               # 
#                                                                        #
#  Author      : Alessandro Torrisi                                      #
#  Company     : Code24 BV, The Netherlands                              #
#  Date        : July 31, 2010                                           #
#  version     : 1.0                                                     #
#  License     : Creative Commons CC-BY license                          #
#  Website     : http://www.php-benchmark-script.com                     # 
#                                                                        #
##########################################################################
*/
 function test_Math($count = 200000) {
  $time_start = microtime(true);
  //$mathFunctions = array("abs", "acos", "asin", "atan", "bindec", "floor", "exp", "sin", "tan", "pi", "is_finite", "is_nan", "sqrt");
  $mathFunctions = array("abs", "acos", "asin", "atan", "bindec", "floor", "exp", "sin", "tan", "is_finite", "is_nan", "sqrt");
  foreach ($mathFunctions as $key => $function) {
   if (!function_exists($function)) unset($mathFunctions[$key]);
  }
  for ($i=0; $i < $count; $i++) {
   foreach ($mathFunctions as $function) {
    $r = call_user_func_array($function, array($i));
   }
  }
  return number_format(microtime(true) - $time_start, 3);
 }
 
 
 function test_StringManipulation($count = 200000) {
  $time_start = microtime(true);
  $stringFunctions = array("addslashes", "chunk_split", "metaphone", "strip_tags", "md5", "sha1", "strtoupper", "strtolower", "strrev", "strlen", "soundex", "ord");
  foreach ($stringFunctions as $key => $function) {
   if (!function_exists($function)) unset($stringFunctions[$key]);
  }
  $string = "the quick brown fox jumps over the lazy dog";
  for ($i=0; $i < $count; $i++) {
   foreach ($stringFunctions as $function) {
    $r = call_user_func_array($function, array($string));
   }
  }
  return number_format(microtime(true) - $time_start, 3);
 }


 function test_Loops($count = 20000000) {
  $time_start = microtime(true);
  for($i = 0; $i < $count; ++$i);
  $i = 0; while($i < $count) ++$i;
  return number_format(microtime(true) - $time_start, 3);
 }

 
 function test_IfElse($count = 20000000) {
  $time_start = microtime(true);
  for ($i=0; $i < $count; $i++) {
   if ($i == -1) {
   } elseif ($i == -2) {
   } else if ($i == -3) {
   }
  }
  return number_format(microtime(true) - $time_start, 3);
 } 
 
 
 $total = 0;
 $functions = get_defined_functions();
 $line = str_pad("-",38,"-");
 echo "$line\n|".str_pad("PHP BENCHMARK SCRIPT",36," ",STR_PAD_BOTH)."|\n$line\nStart : ".date("Y-m-d H:i:s")."\nPHP version : ".PHP_VERSION."\nPlatform : ".PHP_OS. "\n$line\n";
 foreach ($functions['user'] as $user) {
  if (preg_match('/^test_/', $user)) {
   $total += $result = $user();
            echo str_pad($user, 25) . " : " . $result ." sec.\n";
        }
 }
 echo str_pad("-", 38, "-") . "\n" . str_pad("Total time:", 25) . " : " . $total ." sec.\n";
 
?>

The specification of my server is

  • Operating System: CentOS Linux release 7.9.2009 (Core)
  • CPU: Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz 6 Core 12 Thread
  • Memory: ECC 256GB
  • Disk: SSD Enterprise

Below the results of Benchmark PHP 8.1 VS PHP 8.0, PHP 7.4, PHP 7.3, PHP 7.0, PHP 5.6 and PHP 5.5

Benchmark Result of PHP 8.1 vs PHP 8.0 vs PHP 7.4 vs PHP 7.3

Benchmark Result of PHP 8.1

[root@serverdiary share]# /usr/bin/php bench.php
--------------------------------------
|        PHP BENCHMARK SCRIPT        |
--------------------------------------
Start : 2021-12-02 16:48:35
PHP version : 8.1.0
Platform : Linux
--------------------------------------
test_math                 : 0.320 sec.
test_stringmanipulation   : 0.353 sec.
test_loops                : 0.016 sec.
test_ifelse               : 0.008 sec.
--------------------------------------
Total time:               : 0.697 sec.

Benchmark Result of PHP 8.0

[root@serverdiary share]# /opt/remi/php80/root/usr/bin/php bench.php
--------------------------------------
|        PHP BENCHMARK SCRIPT        |
--------------------------------------
Start : 2021-12-02 16:48:41
PHP version : 8.0.13
Platform : Linux
--------------------------------------
test_math                 : 0.316 sec.
test_stringmanipulation   : 0.380 sec.
test_loops                : 0.134 sec.
test_ifelse               : 0.225 sec.
--------------------------------------
Total time:               : 1.055 sec.

Benchmark Result of PHP 7.4

Related Post
[root@serverdiary share]# /opt/remi/php74/root/usr/bin/php bench.php
--------------------------------------
|        PHP BENCHMARK SCRIPT        |
--------------------------------------
Start : 2021-12-02 16:48:50
PHP version : 7.4.26
Platform : Linux
--------------------------------------
test_math                 : 0.318 sec.
test_stringmanipulation   : 0.414 sec.
test_loops                : 0.129 sec.
test_ifelse               : 0.278 sec.
--------------------------------------
Total time:               : 1.139 sec.

Benchmark Result of PHP 7.3

[root@serverdiary share]# /opt/remi/php73/root/usr/bin/php bench.php
--------------------------------------
|        PHP BENCHMARK SCRIPT        |
--------------------------------------
Start : 2021-12-02 16:48:59
PHP version : 7.3.33
Platform : Linux
--------------------------------------
test_math                 : 0.266 sec.
test_stringmanipulation   : 0.372 sec.
test_loops                : 0.203 sec.
test_ifelse               : 0.301 sec.
--------------------------------------
Total time:               : 1.142 sec.

Benchmark Result of PHP 7.0

[root@serverdiary share]# /opt/remi/php70/root/usr/bin/php bench.php
--------------------------------------
|        PHP BENCHMARK SCRIPT        |
--------------------------------------
Start : 2021-12-02 16:50:26
PHP version : 7.0.33
Platform : Linux
--------------------------------------
test_math                 : 0.338 sec.
test_stringmanipulation   : 0.492 sec.
test_loops                : 0.224 sec.
test_ifelse               : 0.318 sec.
--------------------------------------
Total time:               : 1.372 sec.

Benchmark Result of PHP 5.6

[root@serverdiary share]# /opt/remi/php56/root/usr/bin/php bench.php
--------------------------------------
|        PHP BENCHMARK SCRIPT        |
--------------------------------------
Start : 2021-12-04 14:32:57
PHP version : 5.6.40
Platform : Linux
--------------------------------------
test_math                 : 1.167 sec.
test_stringmanipulation   : 1.239 sec.
test_loops                : 0.625 sec.
test_ifelse               : 0.860 sec.
--------------------------------------
Total time:               : 3.891 sec.

Benchmark Result of PHP 5.5

[root@serverdiary share]# /opt/remi/php55/root/usr/bin/php bench.php
--------------------------------------
|        PHP BENCHMARK SCRIPT        |
--------------------------------------
Start : 2021-12-04 14:33:10
PHP version : 5.5.38
Platform : Linux
--------------------------------------
test_math                 : 1.176 sec.
test_stringmanipulation   : 1.279 sec.
test_loops                : 0.652 sec.
test_ifelse               : 0.903 sec.
--------------------------------------
Total time:               : 4.01 sec.

Conclusion: PHP 8.1 greatly improved, about 34% faster than PHP 8.0, 39% faster than PHP 7.4, 49% faster than php 7.0, 82% faster than PHP 5.6 and 82% faster than PHP 5.5.

So with PHP 8.1 I can handle more client. And PHP 8.1 can lower your TTBF (Time To First Byte), and improve your SEO.

Also read: How to Check TTFB (Time To First Byte) using CURL

Time to first byte (TTBF) is one of the many reasons why a website is fast or slow.

Now, Google use website speed as SEO ranking factor. Google tells that users won’t wait slow site.

View Comments

Recent Posts

How to fix yum update error thread.error: can’t start new thread

If you found error thread.error: can't start new thread on yum update command on CentOS…

5 months ago

How to securing Cockpit login with Google Two Factor Authenticator 2FA

Cockpit is a web-based graphical interface for servers, intended for everyone, especially those who are:…

8 months ago

How to install Cockpit on CentOS 7 / CentOS 9 Stream and configure Nginx reserve proxy

From cockpit-project.org, Cockpit is a web-based graphical interface for servers, intended for everyone, especially those…

10 months ago

How to install and configure Nginx with HTTP3 on CentOS 9 Stream / RHEL 9

We have been using Nginx with HTTP3 for more than 1 year on our production…

11 months ago

How to sync date time using Crony on CentOS 9 Stream / RHEL 9

On CentOS 7, to sync date time we often use NTPD. But on CentOS 9,…

11 months ago

How to install and enable REMI repository on CentOS 9 Stream

Remi repository is one of third-party repository that have latest update of PHP on Enterprise…

11 months ago