Skip to content

Commit 6e2caf1

Browse files
committed
Optimize StructuredMapExtension
1 parent e06b77d commit 6e2caf1

File tree

3 files changed

+15
-12
lines changed

3 files changed

+15
-12
lines changed

examples/MessagePack/StructuredMap.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@
1313

1414
final class StructuredMap
1515
{
16+
public $items;
1617
public $schema;
17-
public $map;
1818

19-
public function __construct(array $schema, array $map)
19+
public function __construct(array $items, array $schema)
2020
{
21+
$this->items = $items;
2122
$this->schema = $schema;
22-
$this->map = $map;
2323
}
2424
}

examples/MessagePack/StructuredMapExtension.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,16 @@ public function pack(Packer $packer, $value) : ?string
3535
return null;
3636
}
3737

38+
$size = \count($value->items);
39+
if ($size < 2) {
40+
return $packer->packArray($value->items);
41+
}
42+
3843
$data = '';
39-
$size = 0;
40-
foreach ($value->map as $item) {
44+
foreach ($value->items as $item) {
4145
foreach ($value->schema as $key => $type) {
4246
$data .= $packer->{'pack'.$type}($item[$key]);
4347
}
44-
++$size;
4548
}
4649

4750
return $packer->packExt($this->type,

examples/structured_map.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
];
2424

2525
$profiles = [];
26-
for ($i = 1; $i <= 1000; ++$i) {
26+
for ($i = 1; $i <= 100; ++$i) {
2727
$profiles[] = [
2828
'id' => $i,
2929
'first_name' => "First name $i",
@@ -36,7 +36,7 @@
3636
$unpacker = new BufferUnpacker('', null, [$extension]);
3737

3838
$packedMap = $packer->pack($profiles);
39-
$packedStructuredMap = $packer->pack(new StructuredMap($profileSchema, $profiles));
39+
$packedStructuredMap = $packer->pack(new StructuredMap($profiles, $profileSchema));
4040

4141
$unpackedMap = $unpacker->reset($packedMap)->unpack();
4242
$unpackedStructuredMap = $unpacker->reset($packedStructuredMap)->unpack();
@@ -51,8 +51,8 @@
5151
printf("Percentage saved: %d%%\n", round(1 - strlen($packedStructuredMap) / strlen($packedMap), 2) * 100);
5252

5353
/* OUTPUT
54-
Packed map size: 56407B
55-
Packed structured map size: 31448B
56-
Space saved: 24959B
57-
Percentage saved: 44%
54+
Packed map size: 5287B
55+
Packed structured map size: 2828B
56+
Space saved: 2459B
57+
Percentage saved: 47%
5858
*/

0 commit comments

Comments
 (0)