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

tinkerwell logo
Tinkerwell

Enjoy coding and debugging in an editor designed for fast feedback and quick iterations. It's like a shell for your application – but with multi-line editing, code completion, and more.

Visit Tinkerwell

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