wire:poll
轮询是一种在 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
的组件位于长页面的底部,则在用户将其滚动到视口中之前,它不会开始轮询。当用户滚动离开时,它将再次停止轮询。