Оптимізація продуктивності Laravel Livewire за допомогою обчислювальних властивостей

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 29 серпня, 2025
Досліджуйте потужність обчислювальних властивостей у Livewire, щоб підвищити ефективність ваших компонентів та продуктивність застосунків. У нашій статті ми розглянемо, як використовувати кешування для оптимізації витратних операцій – не пропустіть можливість дізнатися більше

Розробники Livewire постійно шукають способи підвищення ефективності компонентів та покращення продуктивності додатків. Однією з ключових технік є використання обчислювальних властивостей з можливістю кешування, щоб уникнути дорогих повторних обчислень.

Що таке обчислювальні властивості Обчислювальні властивості в Livewire надають потужний механізм для кешування складних операцій. Коли ви позначаєте метод за допомогою #[Computed], Livewire кешує результат і повторно оцінює його лише за необхідності, що значно покращує продуктивність під час складних розрахунків та отримання даних.

Як використовувати обчислювальні властивості Ось як впровадити кешовані обчислювальні властивості у ваших компонентах Livewire:

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,
        ]);
    }
}

У цьому прикладі метод stats() використовує #[Computed] для кешування витратних запитів до бази даних. Метод повторно виконується лише при перерендерингу компонента, що автоматично оптимізує його.

Переваги продуктивності Обчислювальні властивості забезпечують суттєві переваги: вони усувають надлишкові розрахунки під час одного циклу запиту, зменшують навантаження на базу даних при складних операціях і оптимізують використання ресурсів завдяки розумному кешуванню результатів.

Розширені стратегії кешування Для більш складних потреб у кешуванні Livewire пропонує постійні та глобальні альтернативи:

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');
    }
}

Цей приклад демонструє різні патерни обчислювальних властивостей:

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();
        });
    }
}

Цей сервіс демонструє постійне кешування для конкретних даних компонента, глобальне кешування з індивідуальною тривалістю для системних метрик і стандартні обчислювальні властивості для обробки фільтрованих даних.

Обчислювальні властивості Livewire перетворюють витратні операції на ефективні кешовані методи, що значно покращують чуйність додатків і зменшують навантаження на сервер завдяки розумному кешуванню результатів