如何避免为每个单独的结果轮询服务器 - htmx

How to avoid polling the server for each individual result - htmx

我有 3 个独立的 django-celery 任务 运行,它们每个都在不同的时间完成,耗时 20-45 秒。我可以通过 3 个不同的 hx 触发器轮询服务器,以便在它们可用时获得 3 个不同的结果,但这似乎是服务器上不必要的负载,因为我想每 5 秒轮询一次。

理想情况下,我只需要设置 1 个 hx-trigger 来对所有 3 个结果进行轮询,然后在结果可用时将结果放在它们的 div 中,但我不确定如何实现这一点 - 我可以更改前端,如果需要,使之成为可能。

如果您有一个端点可以为三个结果生成输出,那么您可以使用带外交换同时替换它们。这是一个例子 https://codepen.io/jreviews/pen/bGYmQjx

<div hx-trigger="every 2s" hx-get="/poll" hx-swap="none"></div>

<div id="one"></div>
<div id="two"></div>
<div id="three"></div>

<script>
var start = Date.now();
function getTime() {
    return Math.floor((Date.now()-start)/1000);
}
</script>
<template url="/poll">
    <div id="one" hx-swap-oob="true">One ${getTime()}</div>
    <div id="two" hx-swap-oob="true">Two ${getTime()}</div>
    <div id="three" hx-swap-oob="true">Three ${getTime()}</div>
</template>

这里有更多关于 oob 交换的信息 https://htmx.org/attributes/hx-swap-oob/