1. Go to this page and download the library: Download egyjs/progressive-json-php library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
egyjs / progressive-json-php example snippets
// Traditional API: User waits 2000ms to see anything
{
"user": "...", // Ready in 50ms
"posts": "...", // Ready in 200ms
"analytics": "..." // Takes 2000ms ← Everything waits for this
}
use Egyjs\ProgressiveJson\ProgressiveJsonStreamer;
// Progressive API: User sees structure immediately, data fills in as ready
$streamer = new ProgressiveJsonStreamer();
$streamer->data([
'user' => '{$}', // Placeholder
'posts' => '{$}', // Placeholder
'analytics' => '{$}' // Placeholder
]);
$streamer->addPlaceholders([
'user' => fn() => $cache->get("user_$id"), // 50ms
'posts' => fn() => Post::where('user_id', $id)->get(), // 200ms
'analytics' => fn() => $this->getAnalytics($id) // 2000ms
]);
return $streamer->asResponse();
use Egyjs\ProgressiveJson\ProgressiveJsonStreamer;
$streamer = new ProgressiveJsonStreamer();
// Define structure with placeholders
$streamer->data([
'profile' => '{$}',
'posts' => '{$}',
'notifications' => '{$}'
]);
// Define how to resolve each placeholder
$streamer->addPlaceholders([
'profile' => fn() => User::find($userId),
'posts' => fn() => Post::where('user_id', $userId)->get(),
'notifications' => fn() => $this->getNotifications($userId)
]);
// Stream the response
$streamer->send(); // For pure PHP
// OR
return $streamer->asResponse(); // For Laravel/Symfony
use Egyjs\ProgressiveJson\ProgressiveJsonStreamer;
class DashboardController extends Controller
{
public function dashboard()
{
$streamer = new ProgressiveJsonStreamer();
$streamer->data([
'user' => '{$}',
'orders' => '{$}',
'analytics' => '{$}'
]);
$streamer->addPlaceholders([
'user' => fn() => auth()->user(),
'orders' => fn() => Order::recent()->get(),
'analytics' => fn() => $this->analytics->getUserStats()
]);
return $streamer->asResponse();
}
}
use Egyjs\ProgressiveJson\ProgressiveJsonStreamer;
class ApiController extends AbstractController
{
public function dashboard(): Response
{
$streamer = new ProgressiveJsonStreamer();
$streamer->data(['user' => '{$}', 'stats' => '{$}']);
$streamer->addPlaceholders([
'user' => fn() => $this->getUser(),
'stats' => fn() => $this->getStats()
]);
return $streamer->asResponse();
}
use Egyjs\ProgressiveJson\ProgressiveJsonStreamer;
$streamer = new ProgressiveJsonStreamer();
// Set structure with placeholders
$streamer->data(['key' => '{$}']);
// Add single placeholder resolver
$streamer->addPlaceholder('key', fn() => 'value');
// Add multiple placeholder resolvers
$streamer->addPlaceholders([
'user' => fn() => User::find(1),
'posts' => fn() => Post::latest()->get()
]);
// Stream response
$streamer->send(); // Pure PHP
// OR
return $streamer->asResponse(); // Symfony/Laravel
use Egyjs\ProgressiveJson\ProgressiveJsonStreamer;
$streamer->setMaxDepth(100);
use Egyjs\ProgressiveJson\ProgressiveJsonStreamer;
foreach ($streamer->stream() as $chunk) {
echo $chunk;
}
use Egyjs\ProgressiveJson\ProgressiveJsonStreamer;
$streamer->send(); // Sets headers and streams directly
use Egyjs\ProgressiveJson\ProgressiveJsonStreamer;
return $streamer->asResponse();
use Egyjs\ProgressiveJson\ProgressiveJsonStreamer;
$keys = $streamer->getPlaceholderKeys();
// Returns: ['user.profile', 'user.posts', 'meta.timestamp']
use Egyjs\ProgressiveJson\ProgressiveJsonStreamer;
if ($streamer->hasPlaceholder('user.profile')) {
// Placeholder exists
}
use Egyjs\ProgressiveJson\ProgressiveJsonStreamer;
$streamer->removePlaceholder('user.profile');
use Egyjs\ProgressiveJson\ProgressiveJsonStreamer;
$streamer->clearPlaceholders();
use Egyjs\ProgressiveJson\ProgressiveJsonStreamer;
$structure = $streamer->getStructure();