Skip to content

Commit

Permalink
Big JSON serialization benchmark for PHP 8.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
steevanb committed Dec 1, 2020
0 parents commit 13e2b37
Show file tree
Hide file tree
Showing 14 changed files with 293 additions and 0 deletions.
21 changes: 21 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
version: '2.1'

jobs:
ValidateBenchmark:
docker:
- image: phpbenchmarks/benchmark-kit:4
working_directory: /var/www/benchmark
steps:
- checkout
- run:
name: entrypoint
command: entrypoint --nginx-as-service
- run:
name: "validate:benchmark"
command: "phpbenchkit validate:benchmark -vvv"

workflows:
version: '2.1'
BenchmarkKit:
jobs:
- ValidateBenchmark
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/vendor
/composer.lock
19 changes: 19 additions & 0 deletions .phpbenchmarks/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
component:
slug: php
benchmark:
type: json-serialization-big-overload
relativeUrl: /
sourceCode:
entryPoint: public/index.php
urls:
jsonSerialization: 'https://github.com/phpbenchmarks/php/tree/8.0.0_json-serialization-big-overload_0/public/index.php#L15'
integerSerialization: 'https://github.com/phpbenchmarks/php/tree/8.0.0_json-serialization-big-overload_0/public/index.php#L15'
floatSerialization: 'https://github.com/phpbenchmarks/php/tree/8.0.0_json-serialization-big-overload_0/public/index.php#L15'
stringSerialization: 'https://github.com/phpbenchmarks/php/tree/8.0.0_json-serialization-big-overload_0/public/index.php#L15'
booleanSerialization: 'https://github.com/phpbenchmarks/php/tree/8.0.0_json-serialization-big-overload_0/public/index.php#L15'
nullSerialization: 'https://github.com/phpbenchmarks/php/tree/8.0.0_json-serialization-big-overload_0/public/index.php#L15'
arraySerialization: 'https://github.com/phpbenchmarks/php/tree/8.0.0_json-serialization-big-overload_0/public/index.php#L15'
objectSerialization: 'https://github.com/phpbenchmarks/php/tree/8.0.0_json-serialization-big-overload_0/public/index.php#L15'
coreDependency:
name: php
version: 8.0.0
15 changes: 15 additions & 0 deletions .phpbenchmarks/nginx/vhost.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
server {
listen ____PORT____;
server_name ____HOST____;
root ____INSTALLATION_PATH____/____ENTRY_POINT_FILE_PATH____;
location / {
try_files $uri /____ENTRY_POINT_FILE_NAME____$is_args$args;
}
location ~ ____ENTRY_POINT_FILE_NAME____(/|$) {
fastcgi_pass unix:/run/php/____PHP_FPM_SOCK____;
fastcgi_split_path_info ^(.+.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
}
52 changes: 52 additions & 0 deletions .phpbenchmarks/php/8.0/composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .phpbenchmarks/php/8.0/initBenchmark.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/usr/bin/env bash

set -e

# add commands to initialize benchmark: clear cache and logs, warm up cache etc
composer install --no-dev --classmap-authoritative --ansi
31 changes: 31 additions & 0 deletions .phpbenchmarks/php/8.0/php.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
; ----------------------------------------------------------------------------------------------------------------------
; This file will be added to PHP ini files loaded before benchmarking.
; Configure what you need here.
;
; /!\ Do NOT configure opcache.enable: it will be configured automatically.
; /!\ Do NOT configure opcache.preload and opcache.preload_user: it will be configured automatically. /!\
; ----------------------------------------------------------------------------------------------------------------------

; Examples of configuration you could change for your needs.

; The maximum number of keys (scripts) in the OPcache hash table.
; Only numbers between 200 and 1000000 are allowed.
;opcache.max_accelerated_files=10000

; If disabled, all PHPDoc comments are dropped from the code to reduce the
; size of the optimized code.
;opcache.save_comments=1

; A bitmask, where each bit enables or disables the appropriate OPcache
; passes
;opcache.optimization_level=0x7FFFBFFF

; Allows exclusion of large files from being cached. By default all files
; are cached.
;opcache.max_file_size=0

; Enables or disables opcode caching in shared memory.
;opcache.file_cache_only=0

; The OPcache shared memory storage size.
;opcache.memory_consumption=128
22 changes: 22 additions & 0 deletions .phpbenchmarks/php/8.0/preload.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

$sourceCodePath = __DIR__ . '/../../../';
$files = [
"$sourceCodePath/public/index.php",
"$sourceCodePath/src/ObjectToSerialize/JsonSerializableToSerialize.php",
"$sourceCodePath/src/ObjectToSerializeFactory/JsonSerializableFactory.php",
"$sourceCodePath/vendor/autoload.php",
"$sourceCodePath/vendor/composer/ClassLoader.php",
"$sourceCodePath/vendor/phpbenchmarks/benchmark-json-serialization-big-overload/src/BenchmarkService.php",
"$sourceCodePath/vendor/phpbenchmarks/benchmark-json-serialization-big-overload/src/ObjectToSerialize/ObjectToSerialize.php",
"$sourceCodePath/vendor/phpbenchmarks/benchmark-json-serialization-big-overload/src/ObjectToSerialize/ObjectToSerializeInterface.php",
"$sourceCodePath/vendor/phpbenchmarks/benchmark-json-serialization-big-overload/src/ObjectToSerializeFactory/ObjectToSerializeFactoryInterface.php",
];

foreach ($files as $file) {
if (is_readable($file) === false) {
throw new \Exception('File "' . $file . '" is not readable.');
}

opcache_compile_file($file);
}
1 change: 1 addition & 0 deletions .phpbenchmarks/php/8.0/responseBody/responseBody.json

Large diffs are not rendered by default.

44 changes: 44 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<p align="center">
<img src="http://www.phpbenchmarks.com/images/logo_github.png">
<br>
<a href="http://www.phpbenchmarks.com" target="_blank">www.phpbenchmarks.com</a>
</p>

## What is www.phpbenchmarks.com?

You will find a lot of benchmarks for PHP and PHP libraries on [phpbenchmarks.com](http://www.phpbenchmarks.com).

Benchmarks results are available from PHP 5.6 to latest version.

Our benchmarking protocol is available on [benchmarking protocol page](http://www.phpbenchmarks.com/en/documentation/benchmarking-protocol).

## What is this repository?

It contains PHP benchmark code.

Switch branch to select version and benchmark you want to see.

## Benchmarks

You can find PHP 8.0 benchmarks results on
[benchmarks results page](http://www.phpbenchmarks.com/en/benchmark/php/8.0).

See all PHP benchmarked versions on [select version page](http://www.phpbenchmarks.com/en/benchmark/php/version).

## Community

Go to [community page](http://www.phpbenchmarks.com/en/community) to see the Hall of fame, or download the benchmark kit to add your code!

## How version works?

We do not follow semantic version for this repository.

Here is an explanation about our versioning system:

`X.Y.Z_benchmark-slug_W`

* `X`: PHP major version.
* `Y`: PHP minor version.
* `Z`: PHP patch version.
* `benchmark-slug`: slug of the benchmark, list available on [documentation page](http://www.phpbenchmarks.com/en/documentation).
* `W`: benchmark version
15 changes: 15 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"name": "phpbenchmarks/php",
"license": "proprietary",
"type": "project",
"require": {
"php": "8.0.0",
"ext-json": "*",
"phpbenchmarks/benchmark-json-serialization-big-overload": "1.0.0"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
18 changes: 18 additions & 0 deletions public/index.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

declare(strict_types=1);

use App\ObjectToSerializeFactory\JsonSerializableFactory;
use PhpBenchmarks\BenchmarkJsonSerializationBigOverload\BenchmarkService;

require __DIR__ . '/../vendor/autoload.php';

$benchmarkService = new BenchmarkService(new JsonSerializableFactory());

if ($benchmarkService->isWriteToResponseBody()) {
echo json_encode($benchmarkService->getDataToSerialize());
} else {
json_encode($benchmarkService->getDataToSerialize());
}

// require phpbenchmarks stats.php here when needed
27 changes: 27 additions & 0 deletions src/ObjectToSerialize/JsonSerializableToSerialize.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

declare(strict_types=1);

namespace App\ObjectToSerialize;

use PhpBenchmarks\BenchmarkJsonSerializationBigOverload\ObjectToSerialize\ObjectToSerialize;

class JsonSerializableToSerialize extends ObjectToSerialize implements \JsonSerializable
{
/** @return array */
public function jsonSerialize()
{
return [
'property1' => $this->getProperty1(),
'property2' => $this->getProperty2(),
'property3' => $this->getProperty3(),
'property4' => $this->getProperty4(),
'property5' => $this->getProperty5(),
'property6' => $this->getProperty6(),
'property7' => $this->getProperty7(),
'property8' => $this->getProperty8(),
'property9' => $this->getProperty9(),
'property10' => $this->getProperty10()
];
}
}
20 changes: 20 additions & 0 deletions src/ObjectToSerializeFactory/JsonSerializableFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

declare(strict_types=1);

namespace App\ObjectToSerializeFactory;

use App\ObjectToSerialize\JsonSerializableToSerialize;
use PhpBenchmarks\BenchmarkJsonSerializationBigOverload\{
ObjectToSerialize\ObjectToSerializeInterface,
ObjectToSerializeFactory\ObjectToSerializeFactoryInterface
};

class JsonSerializableFactory implements ObjectToSerializeFactoryInterface
{
/** @return ObjectToSerializeInterface */
public function create()
{
return new JsonSerializableToSerialize();
}
}

0 comments on commit 13e2b37

Please sign in to comment.