Черга дій у межах компонента. Livewire за замовчуванням виконує дії одного компонента послідовно: поки один запит у польоті, наступні дії чекають. Так стан лишається передбачуваним - кожна дія бачить результат попередньої.
Групування між компонентами (bundling). Якщо кілька компонентів сторінки оновлюються одночасно (подія, на яку реагують три компоненти, кілька опитувань), Livewire об'єднує їхні оновлення в один HTTP-запит. Менше з'єднань, менше навантаження, а також це основа для механізмів, що потребують узгодження компонентів (реактивні параметри, #[Modelable]).
Мінус групування: спільний запит відповідає тоді, коли закінчив найповільніший компонент. Повільний віджет з викликом зовнішнього API затримує оновлення решти сторінки.
#[Isolate] - запити компонента не групуються з іншими і йдуть паралельно:
use Livewire\Attributes\Isolate;
new #[Isolate] class extends Component {
public function refreshShipping(): void
{
$this->status = Carrier::trackParcel($this->trackingNumber); // 2-3 секунди
}
};
Коли ізолювати:
- дорогі операції (складні запити, зовнішні API, важкі обчислення);
- кілька компонентів з
wire:pollз різними інтервалами; - компоненти, що слухають ті самі події, де один повільний не повинен гальмувати інших;
- компонент не взаємодіє з іншими через реактивні параметри.
Ціна ізоляції - більше паралельних запитів і процесів PHP. Ізолювати все підряд - отримати десятки запитів замість одного.
Пов'язані механізми:
- ліниві компоненти ізольовані за замовчуванням - кожен вантажиться окремим паралельним запитом;
lazy.bundle/#[Lazy(bundle: true)]об'єднує їх; #[Async]/.async- не стосується групування між компонентами, а виводить дію з черги свого компонента: вона виконується одразу, паралельно з іншими діями;- Livewire 4 зробив опитування й
wire:model.liveнеблокувальними: швидке введення в полі пошуку не чекає завершення попереднього запиту.
Діагностика: вкладка Network у DevTools - видно, скільки запитів livewire/update іде, які компоненти в кожному (у тілі запиту - масив компонентів) і скільки триває кожен.