Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions benchmark/BaseBench.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
use function in_array;
use function iterator_to_array;

use const PHP_VERSION_ID;

/** @BeforeMethods({"initDocumentManager", "clearDatabase"}) */
abstract class BaseBench
{
Expand Down Expand Up @@ -45,6 +47,12 @@ public function initDocumentManager(): void
$config->setMetadataDriverImpl(self::createMetadataDriverImpl());
$config->setMetadataCache(new ArrayAdapter());

if (PHP_VERSION_ID >= 80400) {
$config->setUseNativeLazyObject(true);
} else {
$config->setUseLazyGhostObject(true);
}

$client = new Client(
getenv('DOCTRINE_MONGODB_SERVER') ?: self::DEFAULT_MONGODB_SERVER,
[],
Expand Down
16 changes: 8 additions & 8 deletions benchmark/Document/HydrateDocumentBench.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
use Documents\User;
use MongoDB\BSON\ObjectId;
use MongoDB\BSON\UTCDateTime;
use PhpBench\Benchmark\Metadata\Annotations\BeforeMethods;
use PhpBench\Benchmark\Metadata\Annotations\Warmup;
use PhpBench\Attributes\BeforeMethods;
use PhpBench\Attributes\Warmup;

/** @BeforeMethods({"init"}, extend=true) */
#[BeforeMethods(['init'])]
final class HydrateDocumentBench extends BaseBench
{
/** @var array<string, mixed> */
Expand Down Expand Up @@ -78,31 +78,31 @@ public function init(): void
->getHydratorFor(User::class);
}

/** @Warmup(2) */
#[Warmup(2)]
public function benchHydrateDocument(): void
{
self::$hydrator->hydrate(new User(), self::$data);
}

/** @Warmup(2) */
#[Warmup(2)]
public function benchHydrateDocumentWithEmbedOne(): void
{
self::$hydrator->hydrate(new User(), self::$data + self::$embedOneData);
}

/** @Warmup(2) */
#[Warmup(2)]
public function benchHydrateDocumentWithEmbedMany(): void
{
self::$hydrator->hydrate(new User(), self::$data + self::$embedManyData);
}

/** @Warmup(2) */
#[Warmup(2)]
public function benchHydrateDocumentWithReferenceOne(): void
{
self::$hydrator->hydrate(new User(), self::$data + self::$referenceOneData);
}

/** @Warmup(2) */
#[Warmup(2)]
public function benchHydrateDocumentWithReferenceMany(): void
{
self::$hydrator->hydrate(new User(), self::$data + self::$referenceManyData);
Expand Down
16 changes: 8 additions & 8 deletions benchmark/Document/LoadDocumentBench.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@
use Documents\Phonenumber;
use Documents\User;
use MongoDB\BSON\ObjectId;
use PhpBench\Benchmark\Metadata\Annotations\BeforeMethods;
use PhpBench\Benchmark\Metadata\Annotations\Warmup;
use PhpBench\Attributes\BeforeMethods;
use PhpBench\Attributes\Warmup;

use function assert;

/** @BeforeMethods({"init"}, extend=true) */
#[BeforeMethods(['init'])]
final class LoadDocumentBench extends BaseBench
{
/** @var ObjectId */
Expand Down Expand Up @@ -53,33 +53,33 @@ public function init(): void
$this->getDocumentManager()->clear();
}

/** @Warmup(2) */
#[Warmup(2)]
public function benchLoadDocument(): void
{
$this->loadDocument();
}

/** @Warmup(2) */
#[Warmup(2)]
public function benchLoadEmbedOne(): void
{
$this->loadDocument()->getAddress()->getCity();
}

/** @Warmup(2) */
#[Warmup(2)]
public function benchLoadEmbedMany(): void
{
$this->loadDocument()->getPhonenumbers()->forAll(static function (int $key, Phonenumber $element) {
return $element->getPhoneNumber() !== null;
});
}

/** @Warmup(2) */
#[Warmup(2)]
public function benchLoadReferenceOne(): void
{
$this->loadDocument()->getAccount()->getName();
}

/** @Warmup(2) */
#[Warmup(2)]
public function benchLoadReferenceMany(): void
{
$this->loadDocument()->getGroups()->forAll(static function (int $key, Group $group) {
Expand Down
12 changes: 6 additions & 6 deletions benchmark/Document/StoreDocumentBench.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@
use Documents\Group;
use Documents\Phonenumber;
use Documents\User;
use PhpBench\Benchmark\Metadata\Annotations\Warmup;
use PhpBench\Attributes\Warmup;

final class StoreDocumentBench extends BaseBench
{
/** @Warmup(2) */
#[Warmup(2)]
public function benchStoreDocument(): void
{
$user = new User();
Expand All @@ -27,7 +27,7 @@ public function benchStoreDocument(): void
$this->getDocumentManager()->clear();
}

/** @Warmup(2) */
#[Warmup(2)]
public function benchStoreDocumentWithEmbedOne(): void
{
$address = new Address();
Expand All @@ -44,7 +44,7 @@ public function benchStoreDocumentWithEmbedOne(): void
$this->getDocumentManager()->clear();
}

/** @Warmup(2) */
#[Warmup(2)]
public function benchStoreDocumentWithEmbedMany(): void
{
$user = new User();
Expand All @@ -58,7 +58,7 @@ public function benchStoreDocumentWithEmbedMany(): void
$this->getDocumentManager()->clear();
}

/** @Warmup(2) */
#[Warmup(2)]
public function benchStoreDocumentWithReferenceOne(): void
{
$account = new Account();
Expand All @@ -74,7 +74,7 @@ public function benchStoreDocumentWithReferenceOne(): void
$this->getDocumentManager()->clear();
}

/** @Warmup(2) */
#[Warmup(2)]
public function benchStoreDocumentWithReferenceMany(): void
{
$group1 = new Group('One');
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
"doctrine/coding-standard": "^14.0",
"doctrine/orm": "^3.2",
"jmikola/geojson": "^1.0",
"phpbench/phpbench": "^1.0.0",
"phpbench/phpbench": "^1.4.0",
"phpstan/phpstan": "^2.1",
"phpstan/phpstan-deprecation-rules": "^2.0",
"phpstan/phpstan-phpunit": "^2.0",
Expand Down