Laravel Tutorials

Leveraging Component Caching with Computed Properties in Laravel Livewire

Published Updated

The Laravel News homepage has various sections displaying the latest articles, trending articles, recently covered packages, newly released tutorials, and more. Each section fetches its data through computed properties on our Homepage component.

As a result, this process causes numerous queries for a single page and here is video showing how we solved caching these. Or read on to see how we did with it in article format...

Here is an example of one of those computed sections that pulls the articles out:

public function recent(): Collection
{
return Article::active()
->latest()
->limit(6)
->get();
}

In our case, the landing page generates nearly 20-25 queries, which seems unnecessary.

Does the most frequently visited page on the site need to run that many queries?

Of course not!

That's where component caching comes in. Laravel Livewire has several ways of caching to enhance efficiency while reducing resource usage.

The simplest is to just throw a cache:true to the computed property:

#[Computed(cache: true)]
public function recent(): Collection
{
return Article::active()
->latest()
->limit(6)
->get();
}

Livewire will cache this for one hour and then be cleared by default. However, what if you have a lot of sections but only need to clear the cache on one? This style will only work if you clear all the cache.

In the newest Livewire release, you can now pass your own key so you can have fine-grained control over clearing the cache:

#[Computed(cache: true, key: 'home-recent')]
public function recent(): Collection
{
return Article::active()
->latest()
->limit(6)
->get();
}

With this in place, you can now clear using the key like this:

Cache::forget('home-recent');

Computed properties, in tandem with caching, can indeed be extremely powerful! Adding keys to them enhances their potential significantly. It provides greater flexibility in controlling the cache.

For more information about this view the Livewire docs.

Eric L. Barnes photo

Eric is the creator of Laravel News and has been covering Laravel since 2012.

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article