主题
Bundling
Livewire 中的每个组件更新都会触发网络请求。默认情况下,当多个组件同时触发更新时,它们会被捆绑到单个请求中。
这导致到服务器的网络连接更少,并可以大幅减少服务器负载。
除了性能提升外,这还在内部解锁了需要多个组件之间协作的功能(响应式属性、可模型化属性等)
但是,有时出于性能原因需要禁用此捆绑。以下页面概述了在 Livewire 中自定义此行为的各种方法。
隔离组件请求
通过使用 Livewire 的 #[Isolate] 类属性,你可以将组件标记为"隔离的"。这意味着每当该组件进行服务器往返时,它将尝试将自己与其他组件请求隔离开来。
如果更新很昂贵,而你宁愿并行执行此组件的更新与其他组件的更新,这很有用。例如,如果多个组件正在使用 wire:poll 或监听页面上的事件,你可能希望隔离更新昂贵的特定组件,否则会阻塞整个请求。
php
<?php // resources/views/components/post/⚡show.blade.php
use Livewire\Attributes\Isolate;
use Livewire\Component;
#[Isolate] // [tl! highlight]
new class extends Component
{
// ...
};通过添加 #[Isolate] 属性,此组件的请求将不再与其他组件更新捆绑在一起。
延迟组件默认隔离
当单个页面上的许多组件被"延迟"加载时(使用 #[Lazy] 属性),通常希望它们的请求被隔离并并行发送。因此,Livewire 默认隔离延迟更新。
如果你希望禁用此行为,可以像这样将 isolate: false 参数传递给 #[Lazy] 属性:
php
<?php // resources/views/components/⚡revenue.blade.php
use Livewire\Attributes\Lazy;
use Livewire\Component;
#[Lazy(isolate: false)] // [tl! highlight]
new class extends Component
{
// ...
};现在,如果同一页面上有多个 Revenue 组件,所有十个更新将被捆绑并作为单个延迟加载网络请求发送到服务器。