当前位置:首页 > JavaScript

js 轮询实现

2026-02-02 08:19:25JavaScript

轮询的基本概念

轮询(Polling)是一种客户端定期向服务器发送请求以检查数据更新的技术。适用于需要实时性但无需高频率的场景,如聊天应用、状态监控等。

简单轮询实现

使用 setInterval 定时发送请求:

function pollServer() {
  fetch('https://api.example.com/data')
    .then(response => response.json())
    .then(data => {
      console.log('Updated data:', data);
    })
    .catch(error => {
      console.error('Polling error:', error);
    });
}

// 每5秒轮询一次
const pollingInterval = setInterval(pollServer, 5000);

// 停止轮询
// clearInterval(pollingInterval);

优化:基于条件的轮询

在响应中判断是否需要继续轮询(如根据数据状态或服务器指令):

let shouldPoll = true;

function conditionalPoll() {
  if (!shouldPoll) return;

  fetch('https://api.example.com/data')
    .then(response => response.json())
    .then(data => {
      if (data.needsUpdate) {
        console.log('Data updated:', data);
      }
      setTimeout(conditionalPoll, 3000); // 延迟3秒后继续
    })
    .catch(() => {
      setTimeout(conditionalPoll, 10000); // 错误时延长间隔
    });
}

conditionalPoll(); // 启动

指数退避策略

处理失败时逐步增加轮询间隔,避免频繁重试:

js 轮询实现

let retryDelay = 1000;
const maxDelay = 60000;

function exponentialBackoffPoll() {
  fetch('https://api.example.com/data')
    .then(response => {
      retryDelay = 1000; // 成功时重置延迟
      return response.json();
    })
    .then(data => {
      console.log('Data:', data);
      setTimeout(exponentialBackoffPoll, 3000); // 正常轮询间隔
    })
    .catch(() => {
      setTimeout(exponentialBackoffPoll, retryDelay);
      retryDelay = Math.min(retryDelay * 2, maxDelay); // 延迟加倍
    });
}

exponentialBackoffPoll();

注意事项

  • 性能影响:高频轮询会增加服务器负载,需合理设置间隔。
  • 竞态条件:确保前一次请求完成后再发起下一次请求(如使用链式 setTimeout 而非 setInterval)。
  • 替代方案:对实时性要求高的场景,建议考虑 WebSocket 或 Server-Sent Events(SSE)。

标签: js
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…