msgpack.php
JSON Machine
Our great sponsors
msgpack.php | JSON Machine | |
---|---|---|
2 | 4 | |
385 | 1,005 | |
- | - | |
2.2 | 6.9 | |
10 months ago | 5 months ago | |
PHP | PHP | |
MIT License | Apache License 2.0 |
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.
JSON Machine
-
Handling big API request (2.5gb) without timeout
To handle this problem i've used "https://github.com/halaxa/json-machine" to decrease the memory usage and "https://github.com/spatie/async" to decrease the take taken for the "update process" to complete
-
Lazy JSON
Under the hood, it uses JSON Machine as a lexer and parser.
Seems like the issue is still open ! https://github.com/halaxa/json-machine/issues/36
-
Is any one actually using PHP generators in their projects?
Yes. We used it heavily when processing large amounts of data from huge API responses. I like how the whole processing chain can be built on top of it, for example using nikic/iter. Generators are also the heart of a low-memory JSON parsing library halaxa/json-machine, which I maintain, and many other similar projects.
What are some alternatives?
Laminas Serializer - Serialize and deserialize PHP structures to a variety of representations
php-spx - A simple & straight-to-the-point PHP profiling extension with its built-in web UI
etl - PHP - ETL (Extract Transform Load) data processing library
Packagist - Package Repository Website - try https://packagist.com if you need your own -
php-caching-generator - A rewindable PHP Generator class that caches its generated values.
client - PHP client for Tarantool.
collection - The Museum of Modern Art (MoMA) collection data
MessagePack - MessagePack serializer implementation for Java / msgpack.org[Java]
collection - A (memory) friendly, easy, lazy and modular collection class.
smaz - Small strings compression library
lazy-json - 🐼 Framework-agnostic package to load JSON of any dimension and from any source into Laravel lazy collections recursively.