Laravel Debounce is a package created by Zakaria Aktouf which is designed to prevent the repeated execution of specific actions within a defined timeframe. It is particularly useful in situations where an action (e.g., sending a notification, running a command, or job dispatch) might be triggered multiple times unintentionally. The package ensures that only the first invocation of the action within a specified period is executed, effectively debouncing the action.
To install this package use composer:
composer require zackaj/laravel-debounce
You can then start debouncing existing jobs, notifications and
commands using the Debounce
Facade without any
additional setup. For example:
use Zackaj\LaravelDebounce\Facades\Debounce;
Debounce::job(
job: new GenerateTranscript(),
delay: 5, // in seconds
uniqueKey: auth()->user()->id, // debounce per Job class name + uniqueKey
sync: false, // Optional, job will be fired to the queue
);
Debounce::notification(
notifiables: auth()->user(),
notification: new TranscriptProcessed(),
delay: 5,
uniqueKey: auth()->user()->id,
sendNow: false,
);
Alternatively, you can debounce directly from the job, notification or command instances without using a facade.
(new GenerateTranscript())->debounce(...);
(new TranscriptProcessed())->debounce(...);
You can also generate debounceables using Artisan
make
commands. For example:
php artisan make:debounce-job GenerateTranscript
php artisan make:debounce-notification TranscriptProcessed
which for a Job would generate something like:
<?php
namespace App\Jobs;
use Carbon\Carbon;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
use Zackaj\LaravelDebounce\DebounceJob;
class GenerateTranscript extends DebounceJob implements ShouldQueue
{
use Queueable;
/**
* Create a new job instance.
*/
public function __construct()
{
//
}
/**
* Execute the job.
*/
public function handle(): void
{
// $this->getReport()->occurrences;
}
public function before(): void
{
//run before dispatching the job
}
public function after(): void
{
//run after dispatching the job
}
public function getLastActivityTimestamp(): ?Carbon
{
//manually set the last activity to debounce from
return null;
}
}
Other Key Features
- Report Tracking with information like the ip address and authenticated user per request
before
/after
Hooks allow you to run some code before and/or after firing the debounceables- Debounce from custom timestamp
- Integrates with Laravel Telescope so you can see the debouncer live in the queues tab and to debug any failures
- Debounce commands from the CLI using the
debounce:command
Artisan command. e.g.php artisan debounce:command {delay} {uniqueKey} {signature*}
Learn more about this package and view the source code on Github.
The post Laravel Debounce appeared first on Laravel News.
Join the Laravel Newsletter to get all the latest Laravel articles like this directly in your inbox.