当前位置:首页 > 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(); // 启动

指数退避策略

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

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实现轮播图

js实现轮播图

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

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Paren…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

原生js实现轮播图

原生js实现轮播图

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

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统…