问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用java进行WEB开发购物网站,如何解决十秒抢购问题?谢谢!@

发布网友 发布时间:2022-05-15 14:01

我来回答

7个回答

懂视网 时间:2022-05-15 18:22

作为一名程序员,我们会遇到和很多的开发问题,本章内容小编就为大家分享一篇如何用JS实现网页抢购功能,以下我们是通过chrome浏览器的开发者功能,实现如何用JS代码完成抢购功能以及如何通过chrome浏览器调试并加载自己写的JS。

涉及到的内容:

1.chrome浏览器
2.js代码
3.函数节流

第一步

打开chrome浏览器,使用组合键Ctrl+shift+i打开开发者工具,接下来如图所示。

1_副本.png

点击snippets

第二步

如图所示

2_副本.png


点击new snippet -->输入脚本‘名称'-->Ctrl+s保存。

第三步

如图所示

3_副本.png


选择新创建的脚本‘名称',在如图所示的第二步进行编辑js代码。最后如第三步所示:run 运行代码。

js脚本代码

1.以下是网站上的代码:

<body>
 <p class="box">
 <img class="img" src="image/pict.png" />
 <button class="btn" id='btn'>抢购</button>
 </p>
 <script type="text/javascript">
 /**
 * 抢购按钮
 * 
 * */
 btn.onclick=function(){
 console.log('抢购成功!');
 };
 </script>
 </body>

每次点击抢购 控制台输出 抢购成功!

2.脚本代码

/**
* 最简单的脚本代码
* 版本1.0.1
*/
btn.click();//触发按钮执行click事件
/**
 * 使用for循环执行抢购的脚本代码
 * 版本1.0.2
 * */
for(var i=0;i<100;i++){
 btn.click();
}

通过上边的脚本js代码可以知道,我们可以在chrome浏览器内置脚本,并控制执行。

4_副本.png


当开发人员模拟真实环境的高并发情况,咱们就可以使用这种脚本的方式模拟测试。通过刚刚的脚本我们发现我们开发的页面中的js是有很多问题的。假设【抢购按钮】触发的是请求数据接口。则会出现在一个时间内发出n个请求。处理这个问题可以参考防止重复提交

<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8">
 <title>防止ajax重复提交</title>
 </head>
 <body>
 <button id="btn">提交</button>
 <script>
 
 /**
 * 模拟ajax提交
 * @fn 回调函数
 * */
 function Ajax(fn){
 setTimeout(function(){
  var data= {result:true,msg:'提交成功!'};
  fn(data);
 },2000);
 }
 /**
 * btn click 提交事件
 * 
 * */
 btn.onclick=function(){
 //检查 按钮是否被锁住,锁住直接rerun
 if(btn.getAttribute('lock')){
  return;
 }
 //上锁
 btn.setAttribute('lock',1);
 //更改状态
 btn.innerText='提交中...';
 //模拟ajax提交
 Ajax(function(data){
  //请求成功
  if(data.result){
  console.log('请求成功');
  //请求成功解锁
  btn.setAttribute('lock',"");
  //还原状态
  btn.innerText='提交';
  }else{
  console.log('请求失败');
  //请求失败解锁
  btn.setAttribute('lock',"");
  //还原状态
  btn.innerText='提交';
  }
 });
 }
 </script>
 </body>
</html>

也可以使用函数节流方式处理。如下代码:

//网站上写的代码
/**
 * 抢购按钮
 * 
 * */
btn.onclick=function(){
 throttle(function(){
 console.log('抢购成功!');
 },500);
};
/**
 * 函数节流
 * @fn {function} 回调函数
 * @time {number} 时间,毫秒
 * 
 * */
function throttle(fn,time){
 if(throttle.id){
 clearTimeout(throttle.id);
 };
 throttle.id=setTimeout(function(){
 fn();
 },time||200);
}

通过以上方式我们可以过滤掉恶意循环触发事件。这种函数节流方式也得到大家的一致认可与推广。

以上内容是JavaScript实现网页抢购功能的教程,不仅如此,我们还学会了制做简单的js脚本,也学到一种简单的阻止js脚本的方,大家赶紧动手操作一下吧。

热心网友 时间:2022-05-15 15:30

抢购机制可以这样:首先在页面中用,在页面中用js写settime来显示倒数十秒,然后当用户输入抢购价格后点击抢购,就给这个用户保存数据库数据中的一个临时视图的竞标价格的字段中,在这十秒内这个字段可以更新的,如果这样访问数据库很大的话,就先把出价保存在页面,然后十秒结束后按你最后输入的最高价为标准,存进数据库。最后通过便利此视图取出最高价,然后提示出价用户抢购成功。

热心网友 时间:2022-05-15 16:48

步骤如下:

首先在页面中用,在页面中用js写settime来显示倒数十秒

然后当用户输入抢购价格后点击抢购,就给这个用户保存数据库数据中的一个临时视图的竞标价格的字段中,在这十秒内这个字段可以更新的。

如果这样访问数据库很大的话,就先把出价保存在页面,然后十秒结束后按你最后输入的最高价为标准,存进数据库。

最后通过便利此视图取出最高价,然后提示出价用户抢购成功。


热心网友 时间:2022-05-15 18:23

参考在线IM的做法,用长连接comet推送,大家都保持着和服务端的长连接,当有一个人出价时,给所有连接用户返回新价格并JS重置倒计时

热心网友 时间:2022-05-15 20:14

个人想法 1.添加事物机制 2.将用户绑定到Session中追问能详细点么!@ 我还没有什么编程经验!@ 谢谢~!

追答事物机制是为了是让数据库的数据不会反生冲突,相当于线程上的对于资源的封闭.而Session是以一种技术将服务器端和游览器端发送Cookies实现。这个你需要了解基本原理才可以建议你去了解下

热心网友 时间:2022-05-15 22:22

什么问题呢?

热心网友 时间:2022-05-16 00:47

这哥
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...爱你你是我的罗密欧 , 我愿意变成你的朱丽叶' 谁知 有句歌词是“我爱你你是我的朱丽叶,我愿意变成你的梁山伯”是哪... 为什么打印出来的文档页码和原来的不一样 ...两台电脑用路由器上网一台是W7一台是XP如何实现两台电脑共享文件 win7怎么联另一台电脑win7怎么让网络和另一台电脑共享 w7的系统怎么共享电脑w7系统里面文件怎么共享另一台电脑 共享win7电脑w7系统里面文件怎么共享另一台电脑 翡翠有收藏价值吗,我们玩家如何去投资 价格一两万元的翡翠如何挑选 ppt怎么转换成视频?简单四步法,轻松搞定ppt微课录制 山西运城老板牌油烟机有批发商吗? 水涨船高,水不回淹没软梯 共有几画 舷组词结构几画偏旁 贵阳二桥云阳佳苑片区有规划吗 重庆墨思教育,有谁知道这家公职面试培训机构的官网呢? 头发做亲子鉴定怎么收费 体积是指什么的大小 人的头发是不是可以进行鉴定?我只想鉴定是不是同一人的头发!一般在哪里可以做这个鉴定?大概需要多少钱 我想偷偷做一下亲子鉴定 孩子的头发可以做吗 大概多少钱 葡国鸡咖喱焗饭怎么做如何做好 谁知道做亲子鉴定多少钱哦!只有头发可以做么? 物质体积的大小由什么决定(三个因素)固体 咖喱鸡腿焗饭怎么做 中国中超,引进的最大牌国际球员是哪几位? 怎样用电饭锅做出好吃的咖喱鸡肉 1993欧洲金球奖具体排名得票数 头发亲子鉴定多少钱啊? 东欧球员的名字 头发做DNA要多少钱 斯洛伐克怎么配 宝马x5举升维修模式设置方法 宝马X5,奥迪Q7,宝时捷卡宴,哪个好? 子乌也叫墨鱼仔吗? 宝马X5为什么没有雪地模式 宝马X5没有低速四驱嘛 C盘清理,C盘占用了30多G咋样清理呢? 宝马X5断电后怎么没有助力,和四驱 急!宝马X5豪华版的空气弹簧由无必要? 将一个百度云盘里的一些内容直接转到另一个百度云盘里去怎么操作 怎么把别人百度云里面的文件转移到我的百度云里面 百度云中的文件怎么从一个账号转移到另一个账号 人死了欠银行的钱,是不是可以不用还了! 欠银行的钱暂时还不上可以慢慢还吗 我绑定的试客联盟提现方式是支付宝,可以改为银行卡吗 试客奖励提现到微信钱包怎么不能提现到支付宝呢,显示不支持此银行的 应用试客提现到支付宝的话支付宝需要实名认证才能提吗? 试客联盟里的钱提现到支付宝要多久。我昨天提现的,到现在还没收到?求高人指点。 copp是什么? copp和acl有什么区别 copp是什么材质