msgpack.php
client
Our great sponsors
msgpack.php | client | |
---|---|---|
2 | 1 | |
383 | 63 | |
- | - | |
2.2 | 5.7 | |
9 months ago | 15 days ago | |
PHP | PHP | |
MIT License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
msgpack.php
-
Advanced MessagePack capabilities
That's enough theory, let's start coding! For these examples, we'll use the msgpack.php MessagePack library since it provides a convenient API to handle extension types. I hope you'll find these code examples easy to understand even if you use other libraries. Since I mentioned UUID, let's implement support for this data type as an example. To do so, we'll need to write an extension---a class to serialize and deserialize UUID values. We will use the symfony/uid library to make handling such values easier.
-
Don't blindly trust profilers
I recently encountered an interesting case. I was trying to optimize the MessagePack unpacking, but after testing the performance of the new faster (as I thought) version, it turned out to be slower than the original implementation. Trying to figure out which part of the code was causing the slowdown, I reran the tests with Blackfire and was surprised to see that the profiler reported a 30% improvement in the new version, which was the exact opposite of my results (read the comments on the linked issue to learn why). Note that this is not a problem with this particular profiler, most PHP profilers will do the same. So I decided to share this finding and encourage you not to blindly trust profilers and always do your own benchmarking, especially when you do such micro-optimizations.
client
-
Advanced MessagePack capabilities
That was an example of a simple UUID extension. Similarly, you can add support for any other type used in your application: DateTime, Decimal, Money. Or you can write a versatile extension that allows serializing any object (as it was done in KPHP). However, this is not the only use for extensions. I'll now show you some interesting examples that demonstrate other advantages of using extension types.
What are some alternatives?
JSON Machine - Efficient, easy-to-use, and fast PHP JSON stream parser
php-spx - A simple & straight-to-the-point PHP profiling extension with its built-in web UI
Laminas Serializer - Serialize and deserialize PHP structures to a variety of representations
Packagist - Package Repository Website - try https://packagist.com if you need your own -
Tarantool Queue - PHP bindings for Tarantool Queue.
Predis - A flexible and feature-complete Redis client for PHP.
MessagePack - MessagePack serializer implementation for Java / msgpack.org[Java]
smaz - Small strings compression library
TOTEM - TOTEM is a 38 keys column-staggered split keyboard. It meant to be used with a SEEED XIAO BLE or RP2040
ATK Data - Data Access PHP Framework for SQL & high-latency databases
Totem - Changeset calculator between two states of a data