Laravel Debounce

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.

Read more

© 2025 Extly, CB - All rights reserved.