当前位置:首页 > JavaScript

秒杀 js 实现

2026-02-01 22:43:45JavaScript

秒杀功能的实现要点

前端实现秒杀功能需要处理高并发、时间同步、防刷等问题。以下是基于JavaScript的核心实现逻辑:

倒计时功能

使用定时器实现秒杀倒计时,需确保与服务器时间同步:

function countDown(endTime) {
  const timer = setInterval(() => {
    const now = new Date().getTime();
    const distance = endTime - now;

    const days = Math.floor(distance / (1000 * 60 * 60 * 24));
    const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
    const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
    const seconds = Math.floor((distance % (1000 * 60)) / 1000);

    if (distance < 0) {
      clearInterval(timer);
      document.getElementById("countdown").innerHTML = "秒杀已开始";
    }
  }, 1000);
}

按钮状态控制

秒杀未开始时禁用按钮:

const seckillBtn = document.getElementById('seckill-btn');
if (new Date() < startTime) {
  seckillBtn.disabled = true;
  seckillBtn.innerText = '秒杀未开始';
}

请求并发控制

使用Promise和限流策略:

let requestQueue = [];
let isRequesting = false;

async function throttleRequest() {
  if (isRequesting) {
    return Promise.reject('请求过于频繁');
  }

  isRequesting = true;
  try {
    const res = await fetch('/seckill', {method: 'POST'});
    return res.json();
  } finally {
    isRequesting = false;
    if (requestQueue.length > 0) {
      throttleRequest();
    }
  }
}

防止重复提交

提交后立即禁用按钮:

seckillBtn.addEventListener('click', () => {
  seckillBtn.disabled = true;
  throttleRequest()
    .then(data => {
      alert(data.message);
    })
    .catch(err => {
      seckillBtn.disabled = false;
      console.error(err);
    });
});

时间同步方案

定期与服务器同步时间:

秒杀 js 实现

function syncServerTime() {
  fetch('/api/time')
    .then(res => res.json())
    .then(data => {
      const serverTime = new Date(data.time);
      const localTime = new Date();
      timeDiff = serverTime - localTime;
    });
}

// 每5分钟同步一次
setInterval(syncServerTime, 300000);

性能优化建议

  1. 使用WebWorker处理倒计时计算
  2. 采用本地缓存记录已售罄状态
  3. 实现请求队列避免瞬间高并发
  4. 添加动画效果提升用户体验

后端需要配合实现库存原子性操作、分布式锁等机制,前端主要关注用户体验和请求控制。实际项目中建议使用WebSocket实现状态实时推送。

标签: 秒杀js
分享给朋友:

相关文章

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

php实现秒杀

php实现秒杀

PHP实现秒杀功能的关键技术 秒杀系统需要解决高并发、数据一致性、系统稳定性等问题。以下是PHP实现秒杀功能的核心技术方案: 数据库优化 使用InnoDB引擎的行级锁和事务特性,确保数据一致性。商品…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…