Laravel Packages

Laravel Debounce

Published
Laravel Debounce image

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.

Yannick Lyn Fatt photo

Staff Writer at Laravel News and Full stack web developer.

Sponsored

serpapi logo
SerpApi

The Web Search API for Your LLM and AI Applications

Visit SerpApi

The latest

View all →
Inertia DevTools Now Available for Firefox image

Inertia DevTools Now Available for Firefox

Read article
Laravel Scalpel Scans for Filesystem Intrusion Evidence image

Laravel Scalpel Scans for Filesystem Intrusion Evidence

Read article
Mercure Broadcasting in Laravel 13.32 image

Mercure Broadcasting in Laravel 13.32

Read article
Super Stack: Laravel Starter Kit With Filament and NativePHP image

Super Stack: Laravel Starter Kit With Filament and NativePHP

Read article
Laravel MCP 1.0 Is Released image

Laravel MCP 1.0 Is Released

Read article
Laravel Vet: Review Composer Code Before It Installs image

Laravel Vet: Review Composer Code Before It Installs

Read article