Skip to content

Commit

Permalink
Latest performance fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
rubenvanassche committed Jan 8, 2024
1 parent 3553d88 commit 310d711
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 20 deletions.
13 changes: 7 additions & 6 deletions benchmarks/DataBench.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
use Spatie\LaravelData\Tests\Fakes\MultiNestedData;
use Spatie\LaravelData\Tests\Fakes\NestedData;
use Spatie\LaravelData\Tests\Fakes\SimpleData;
use function Amp\Iterator\toArray;

class DataBench
{
Expand All @@ -34,10 +35,10 @@ protected function getPackageProviders($app)

public function setup()
{
app(DataConfig::class)->getDataClass(ComplicatedData::class);
app(DataConfig::class)->getDataClass(SimpleData::class);
app(DataConfig::class)->getDataClass(MultiNestedData::class);
app(DataConfig::class)->getDataClass(NestedData::class);
app(DataConfig::class)->getDataClass(ComplicatedData::class)->prepareForCache();
app(DataConfig::class)->getDataClass(SimpleData::class)->prepareForCache();
app(DataConfig::class)->getDataClass(MultiNestedData::class)->prepareForCache();
app(DataConfig::class)->getDataClass(NestedData::class)->prepareForCache();
}

#[Revs(500), Iterations(2)]
Expand Down Expand Up @@ -138,8 +139,8 @@ public function benchDataCollectionTransformation()
)
)->all();

$collection = ComplicatedData::collect($collection, DataCollection::class);
$dataCollection = (new DataCollection(ComplicatedData::class, $collection));

$collection->toArray();
$dataCollection->toArray();
}
}
77 changes: 77 additions & 0 deletions benchmarks/SimpleDataCollectionBench.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
<?php

use Carbon\CarbonImmutable;
use Illuminate\Support\Collection;
use Orchestra\Testbench\Concerns\CreatesApplication;
use PhpBench\Attributes\BeforeMethods;
use PhpBench\Attributes\Iterations;
use PhpBench\Attributes\Revs;
use Spatie\LaravelData\DataCollection;
use Spatie\LaravelData\LaravelDataServiceProvider;
use Spatie\LaravelData\Optional;
use Spatie\LaravelData\Support\DataConfig;
use Spatie\LaravelData\Tests\Fakes\ComplicatedData;
use Spatie\LaravelData\Tests\Fakes\SimpleData;

class SimpleDataCollectionBench
{
use CreatesApplication;

protected DataCollection $dataCollection;

public function __construct()
{
$this->createApplication();
}

protected function getPackageProviders($app)
{
return [
LaravelDataServiceProvider::class,
];
}

public function setup()
{
$collection = Collection::times(
15,
fn () => new ComplicatedData(
42,
42,
true,
3.14,
'Hello World',
[1, 1, 2, 3, 5, 8],
null,
Optional::create(),
42,
CarbonImmutable::create(1994, 05, 16),
new DateTime('1994-05-16T12:00:00+01:00'),
null,
null,
[]
// new SimpleData('hello'),
// new DataCollection(NestedData::class, [
// new NestedData(new SimpleData('I')),
// new NestedData(new SimpleData('am')),
// new NestedData(new SimpleData('groot')),
// ]),
// [
// new NestedData(new SimpleData('I')),
// new NestedData(new SimpleData('am')),
// new NestedData(new SimpleData('groot')),
// ],
));

$this->dataCollection = new DataCollection(ComplicatedData::class, $collection);

app(DataConfig::class)->getDataClass(ComplicatedData::class);
app(DataConfig::class)->getDataClass(SimpleData::class);
}

#[Revs(500), Iterations(5), BeforeMethods('setup')]
public function benchDataCollectionTransformation()
{
$this->dataCollection->toArray();
}
}
10 changes: 1 addition & 9 deletions src/Enums/DataTypeKind.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,6 @@ public function isDataObject(): bool

public function isDataCollectable(): bool
{
return in_array($this, [
self::DataCollection,
self::DataPaginatedCollection,
self::DataCursorPaginatedCollection,
self::Array,
self::Enumerable,
self::Paginator,
self::CursorPaginator,
]);
return $this !== self::Default && $this !== self::DataObject;
}
}
14 changes: 9 additions & 5 deletions src/Resolvers/TransformedDataResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use Spatie\LaravelData\Contracts\WrappableData;
use Spatie\LaravelData\Enums\DataTypeKind;
use Spatie\LaravelData\Lazy;
use Spatie\LaravelData\Support\DataClass;
use Spatie\LaravelData\Support\DataConfig;
use Spatie\LaravelData\Support\DataContainer;
use Spatie\LaravelData\Support\DataProperty;
Expand All @@ -30,7 +31,9 @@ public function execute(
BaseData&TransformableData $data,
TransformationContext $context,
): array {
$transformed = $this->transform($data, $context);
$dataClass = $this->dataConfig->getDataClass($data::class);

$transformed = $this->transform($data, $context, $dataClass);

if ($data instanceof WrappableData && $context->wrapExecutionType->shouldExecute()) {
$transformed = $data->getWrap()->wrap($transformed);
Expand All @@ -43,12 +46,13 @@ public function execute(
return $transformed;
}

private function transform(BaseData&TransformableData $data, TransformationContext $context): array
{
private function transform(
BaseData&TransformableData $data,
TransformationContext $context,
DataClass $dataClass,
): array {
$payload = [];

$dataClass = $this->dataConfig->getDataClass($data::class);

$visibleFields = $this->visibleDataFieldsResolver->execute($data, $dataClass, $context);

foreach ($dataClass->properties as $property) {
Expand Down

0 comments on commit 310d711

Please sign in to comment.