JSON Machine
msgpack.php
JSON Machine | msgpack.php | |
---|---|---|
4 | 2 | |
1,007 | 386 | |
- | - | |
6.9 | 2.2 | |
5 months ago | 11 months ago | |
PHP | PHP | |
Apache License 2.0 | 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.
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.
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.
What are some alternatives?
Laminas Serializer - Serialize and deserialize PHP structures to a variety of representations
etl - PHP - ETL (Extract Transform Load) data processing library
php-spx - A simple & straight-to-the-point PHP profiling extension with its built-in web UI
php-caching-generator - A rewindable PHP Generator class that caches its generated values.
Packagist - Package Repository Website - try https://packagist.com if you need your own -
collection - The Museum of Modern Art (MoMA) collection data
client - PHP client for Tarantool.
collection - A (memory) friendly, easy, lazy and modular collection class.
MessagePack - MessagePack serializer implementation for Java / msgpack.org[Java]
lazy-json - 🐼 Framework-agnostic package to load JSON of any dimension and from any source into Laravel lazy collections recursively.
smaz - Small strings compression library