wire:poll

您是视觉学习者吗?
通过我们深入的屏幕录制掌握 Livewire
立即观看

轮询是一种在 Web 应用程序中用于“轮询”服务器(定期发送请求)以获取更新的技术。这是一种简单的方法,无需更复杂的技术(如 WebSockets)即可使页面保持最新状态。

基本用法

在 Livewire 中使用轮询就像将 wire:poll 添加到元素一样简单。

下面是一个 SubscriberCount 组件的示例,它显示用户的订阅者数量

<?php
 
namespace App\Livewire;
 
use Illuminate\Support\Facades\Auth;
use Livewire\Component;
 
class SubscriberCount extends Component
{
public function render()
{
return view('livewire.subscriber-count', [
'count' => Auth::user()->subscribers->count(),
]);
}
}
<div wire:poll>
Subscribers: {{ $count }}
</div>

通常,此组件将显示用户的订阅者数量,并且在页面刷新之前永远不会更新。但是,由于组件模板上的 wire:poll,此组件现在将每 2.5 秒刷新一次自身,从而使订阅者数量保持最新状态。

您还可以通过向 wire:poll 传递一个值来指定在轮询间隔执行的操作

<div wire:poll="refreshSubscribers">
Subscribers: {{ $count }}
</div>

现在,组件上的 refreshSubscribers() 方法将每 2.5 秒调用一次。

时间控制

轮询的主要缺点是它可能占用大量资源。如果您在一个使用轮询的页面上有一千个访问者,则每 2.5 秒将触发一千个网络请求。

在这种情况下,减少请求的最佳方法是简单地延长轮询间隔。

您可以通过将所需的持续时间附加到 wire:poll 来手动控制组件的轮询频率,如下所示

<div wire:poll.15s> <!-- In seconds... -->
 
<div wire:poll.15000ms> <!-- In milliseconds... -->

后台节流

为了进一步减少服务器请求,当页面处于后台时,Livewire 会自动节流轮询。例如,如果用户在不同的浏览器选项卡中打开一个页面,Livewire 会将轮询请求数量减少 95%,直到用户重新访问该选项卡。

如果您想退出此行为并持续轮询,即使标签页在后台,您也可以将 .keep-alive 修饰符添加到 wire:poll

<div wire:poll.keep-alive>

视口节流

您可以采取的另一项措施仅在必要时轮询,是将 .visible 修饰符添加到 wire:poll.visible 修饰符指示 Livewire 仅在组件在页面上可见时轮询组件

<div wire:poll.visible>

如果使用 wire:visible 的组件位于长页面的底部,则在用户将其滚动到视口中之前,它不会开始轮询。当用户滚动离开时,它将再次停止轮询。