Laravel Tutorials

Optimizing Laravel Livewire Performance with Computed Properties

Published
Optimizing Laravel Livewire Performance with Computed Properties image

Livewire developers continuously seek methods to enhance component efficiency and boost application performance. One essential technique involves leveraging computed properties with caching capabilities to prevent expensive re-computations.

Understanding Computed Properties Computed properties in Livewire provide a powerful mechanism for caching expensive operations. When you mark a method with #[Computed], Livewire caches the result and only re-evaluates it when necessary, significantly improving performance for complex calculations and data retrievals.

How to Use Computed Properties Here's how to implement cached computed properties in your Livewire components:

use Livewire\Component;
use Livewire\Attributes\Computed;
 
class Dashboard extends Component
{
public $filter = 'week';
 
#[Computed]
public function stats()
{
return [
'users' => User::count(),
'posts' => Post::where('created_at', '>=', now()->sub($this->filter))->count(),
'comments' => Comment::where('created_at', '>=', now()->sub($this->filter))->count(),
];
}
 
public function render()
{
return view('livewire.dashboard', [
'stats' => $this->stats,
]);
}
}

In this example, the stats() method uses #[Computed] to cache expensive database queries. The method only re-executes when the component re-renders, providing automatic optimization.

Performance Benefits Computed properties deliver substantial advantages: they eliminate redundant calculations during a single request lifecycle, reduce database query overhead for complex operations, and optimize resource utilization by caching results intelligently.

Advanced Caching Strategies For more sophisticated caching needs, Livewire offers persistent and global caching options:

use Livewire\Component;
use Livewire\Attributes\Computed;
 
class AnalyticsDashboard extends Component
{
public $dateRange = 'last7days';
public $selectedMetric = 'pageviews';
 
#[Computed(persist: true)]
public function analyticsData()
{
return AnalyticsService::fetch($this->dateRange, $this->selectedMetric);
}
 
#[Computed(cache: true, key: 'top-performers')]
public function topPerformers()
{
return PerformanceAnalyzer::getTop10($this->dateRange);
}
 
public function render()
{
return view('livewire.analytics-dashboard');
}
}

Here's a comprehensive service demonstrating various computed property patterns:

class ReportingService extends Component
{
public $reportType = 'monthly';
public $userId;
 
#[Computed(persist: true)]
public function userMetrics()
{
return User::with('posts', 'comments')
->where('id', $this->userId)
->first()
->calculateMetrics($this->reportType);
}
 
#[Computed(cache: true, seconds: 3600)]
public function systemStats()
{
return [
'active_users' => $this->getActiveUserCount(),
'server_health' => $this->checkServerHealth(),
'performance_metrics' => $this->calculatePerformanceMetrics()
];
}
 
#[Computed]
public function filteredReports()
{
return Report::where('type', $this->reportType)
->where('user_id', $this->userId)
->with('attachments')
->get()
->map(function($report) {
return $report->processComplexCalculations();
});
}
 
private function getActiveUserCount()
{
return Cache::remember('active_users', 300, function() {
return User::where('last_active', '>=', now()->subMinutes(15))->count();
});
}
}

This service showcases persistent caching for component-specific data, global caching with custom duration for system-wide metrics, and standard computed properties for filtered data processing.

Livewire's computed properties transform expensive operations into efficient, cached methods that dramatically improve application responsiveness and reduce server load through intelligent result caching.

Harris Raftopoulos photo

Senior Software Engineer • Staff & Educator @ Laravel News • Co-organizer @ Laravel Greece Meetup

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 →
Securing Filament plugins with Plumb image

Securing Filament plugins with Plumb

Read article
LayaPHP: Self-Hosted Text Classification for PHP and Laravel image

LayaPHP: Self-Hosted Text Classification for PHP and Laravel

Read article
WhenMounted and BigInt Props in Inertia.js v3.8 image

WhenMounted and BigInt Props in Inertia.js v3.8

Read article
Postcodes for Laravel: GB Postcode Lookup and Geography Data image

Postcodes for Laravel: GB Postcode Lookup and Geography Data

Read article
Laravel 14 Adds a defaults() Method to Eloquent Models image

Laravel 14 Adds a defaults() Method to Eloquent Models

Read article
Laravel AI SDK and Laravel MCP Security Fixes: Update Now image

Laravel AI SDK and Laravel MCP Security Fixes: Update Now

Read article