导航

萌即是正义!时不时分享一些ACG活动记录与有趣代码的小站!

侧边栏
热门文章
1页面
程序员老黄历&求签
热度
767
2推文
昨天的旅途虽然上岛的时候是一个人,但是途中遇到了很多同好,最后是一群人结伴离岛。甚至当地岛民们还在港口送行,真的太感动了。
热度
129
3博文
3DS模拟器简体中文字库 | Citra3ds字库 | 符文工房4乱码解决字库 | shared_font.bin
热度
91
4博文
面码找到你了!探寻超平和Busters的秘密基地——《我们仍未知道那天所看见的花的名字》秩父圣地巡礼
热度
90
5推文
试用了 GitHub Copilot 的 Opus 4.7,整体体验并不理想。 我拿一个从零开始的工具类项目做测试,前后尝试了 5 次,竟然有 3 次直接被拒绝。理由都是认为这个项目需要团队投入数周甚至数月,超出了 AI 能完成的范围。但实际上,这个项目代码量最多也就一万行左右,我一个人一个周末完全可以完成。 这种“直接拒绝”的处理方式确实有些过头,系统级提示词到底是如何设计的?类似情况在 4.6 版本中从未出现过。当初难度更高的项目(比如维基萌公会)都能被耐心完成。 在我不断调整提示词、强烈要求之后,有 2 次成功执行,但结果质量依然不尽如人意,问题包括但不限于: 功能缺失、逻辑遗漏 声称“已完成”,但实际并未完成 无视我提供的前端代码,自行重新实现 在一个表单中,将多个字段通过遍历逐个提交的低效做法 这些问题,本质上更像是思考深度不足导致的。相比之下,Github Copilot 版的 4.6 思考深度是高,而 4.7 是中。 总体来说,4.7 在价格提升数倍的情况下,却带来了明显下降的体验,难免让人失望。更何况还强制下架了 4.6,以“升级”为名降低成本,这种做法确实难以令人认同。
热度
78
6页面
追番
热度
78
7推文
《吹响吧!上低音号》的第八回定期演奏会——北宇治高校吹奏楽部 第8回定期演奏会的时间公布了,神奈川场的时间设定在了11月10日,正好和《大AQUAPLUS祭 -30th Anniversary》的day2时间重叠了!不过好在我没有买《大AQUAPLUS祭 -30th Anniversary》的2日通票,可以在day2的时候去听《吹响吧!上低音号》的演奏会,11月的那个周末看起来真的会很考验耐力! 相关链接:https://anime-eupho.com/event/concert8th/
热度
65
8博文
藤沢镰仓江之岛半圣地巡礼
热度
65
9推文
今天的《大AQUAPLUS祭 -30th Anniversary-》公布了《黑白莫比乌斯》的续作,标题为《うたわれるもの 白への道標》。 标题改回了《传颂之物》听说是和剧情有关。 感谢AQUAPLUS没有放弃这部作品,把坑填上了。应该是填坑吧?
热度
52
10博文
探访《蜡笔小新》老家——春日部游记
热度
52
最新评论
广树管理员
2026-05-05 17:54
@九日:封面图用的是 chatgpt
广树管理员
2026-05-05 17:53
@Asuna:可以的,非常羡慕
九日
2026-05-05 11:17
看到有几个封面应该已经是ai的了,我也想接入试试(☆ω☆)
Asuna
2026-05-04 10:10
@广树:嗯,甲方报销,用的卡也是他们提供的,我只需要提供 Claude 账户就行,Max 20x 目前的需求来说基本用不完了 🤣
广树管理员
2026-05-04 09:07
@Asuna:大佬是订阅最高档位的吗!
攻略中
告别回忆 双想 ~Not always true~
暂无评分
Steam告别回忆 双想 ~Not always true~
2026年3月10日 22时 ~ 攻略中
已累计游玩1个月26天
“我觅见了生命中的唯一,而后——”
亚路塔:狐狸狐途的面包冒险
暂无评分
Steam亚路塔:狐狸狐途的面包冒险
2026年2月12日 19时 ~ 攻略中
已累计游玩2个月22天
一场席卷全世界的面包革命现在开始! 主人公查雅阴错阳差之下,开始了在荒废的岛屿上经营面包店的生活。 出外冒险搜集食材、研发崭新面包配方、遇见性格各异的伙伴们,建造更丰富的设施,用面包香气使无人问津的广场再次热闹起来!
ToHeart
暂无评分
SteamToHeart
2025年6月26日 19时 ~ 攻略中
已累计游玩10个月13天
AQUAPLUS推出的“温暖人心的校园恋爱游戏”将以高清全3D形式焕新归来!
fault - StP - LIGHTKRAVTE
暂无评分
Steamfault - StP - LIGHTKRAVTE
2025年5月29日 20时 ~ 攻略中
已累计游玩11个月11天
全球累计销量超过50万份的“fault”系列最新作!故事的舞台是一个融合了奇幻与科幻的超前世界——卢森海德王国。本作讲述了生活在此地的一个平凡又平庸的究极普通市民——名为果子的少年的故事。
PSN奖杯卡

PSN奖杯卡

归档
赞助商广告

即使浏览器窗口在非激活状态(或者最小化)也让setTimeout、setInterval有效不休眠——Web Workers​

作者:广树时间:2018-01-16 15:28:41分类:JavaScript

因为浏览器的优化原因,setTimeout()和setInterval(),在浏览器窗口非激活的状态下会停止工作或者以极慢的速度工作。目前我已知就IE不会有这种问题。

这样的优化就会带来一个问题,比如我以前的一段代码【JavaScript】模拟随机号码中奖,因为需要不断随机出号码,所以会用到setInterval(),但是一旦切换窗口的话,就会停止随机算出号码,需要再次激活窗口才会重新运行。

这个时候为了让浏览器窗口在非激活状态(或者最小化)也让setTimeout、setInterval有效不休眠的话就要用到H5的新特性:Web Workers

Web Workers 是 HTML5 提供的一个javascript多线程解决方案,可以将一些大计算量的代码交由web Worker运行而不冻结用户界面。

注意:Web Workers需要IE10及其以上的浏览器支持。

根据特性,我们可以将随机算号搬到另外个线程去计算,主线程只用不断接收数据就好了。

于是我就改了模拟随机号码的代码:

主线程JS:

var worker =new Worker("fibonacci.js"); //创建一个Worker对象并向它传递将在新线程中执行的脚本的URL
function creat_nums(caipiao_span,arr){
	var caipiao_span = document.getElementsByClassName(caipiao_span);
	for(var i = 0 ; i < caipiao_span.length; i++){
		var arr_nums = arr[i];
		if(arr_nums<10){
			arr_nums = '0'+String(arr[i]);
		}else{
			arr_nums = String(arr[i])
		}
		caipiao_span[i].innerText = arr_nums;
	}
}
 function creat_attack(){
	 var input_q = document.getElementById("input_q").value.split(",");
	 var input_h = document.getElementById("input_h").value.split(",");
	 var arr = [input_q,input_h];
	 worker.postMessage(arr);     //向worker发送数据
	 worker.onmessage =function(evt){     //接收worker传过来的数据函数
	   //console.log(evt.data);         //输出worker发送来的数据
	   var dataArr = evt.data;
	   creat_nums("caipiao35",evt.data[7]);
	   creat_nums("caipiao12",evt.data[8]);
	   document.getElementById("cishu").innerText=String(evt.data[0]);
	   document.getElementById("cishu1").innerText=String(evt.data[1]);
	   document.getElementById("cishu2").innerText=String(evt.data[2]);
	   document.getElementById("cishu3").innerText=String(evt.data[3]);
	   document.getElementById("cishu4").innerText=String(evt.data[4]);
	   document.getElementById("cishu5").innerText=String(evt.data[5]);
	   document.getElementById("cishu6").innerText=String(evt.data[6]);
	   if(evt.data[9].length===5){
		   creat_nums("caipiao35-2",evt.data[9]);
		   creat_nums("caipiao12-2",evt.data[10]);
	   }
	 }
 }


副线程JS:

// fibonacci.js
onmessage =function (evt){
  	var cishu = 0;
	var six = 0;
	var five = 0;
	var four = 0;
	var three = 0;
	var two = 0;
	var one = 0;
	var cp_q = new Array();
	var cp_h = new Array();
	var cp2_q = new Array();
	var cp2_h = new Array();
	var attack_arr = new Array();
	var timer = null;
	var arr = evt.data;
	function generate_randomx(count,nums_length) {
	  //初始化数组
	  var generated = new Array();
	  //生成数组数
	  var generatedCount = generated.length;
	  //生成nums_length个随机数
	  for(var i = 0 ; i < nums_length; i++){
		var candidate = Math.floor(Math.random() * count)+1;
		//如果生成一样的数字则重新生成
		for(var j = 0; j < generatedCount; j++) {
		  if(candidate == generated[j]){
			candidate = Math.floor(Math.random() * count)+1;
			j= -1;
		  }
		}
		generated[i] = candidate;  
		generatedCount++;
	  }
	  return generated;  
	}
	function sortNumber(a, b){
		return a - b
	}
	function creat_nums(caipiao_span,arr){
		if(caipiao_span=="caipiao35"){
			cp_q = arr;
		}
		if(caipiao_span=="caipiao12"){
			cp_h = arr;
		}
		if(caipiao_span=="caipiao35-2"){
			cp2_q = arr;
		}
		if(caipiao_span=="caipiao12-2"){
			cp2_h = arr;
		}
	}
	function creat_attack(){
		clearTimeout(timer);
		var input_q = arr[0];
		var input_h = arr[1];
		if(input_q.length<5||input_h.length<2||input_q.length>5||input_h.length>2){
			console.log("输入格式不对");
			return false;
		}
		for(var i = 0 ; i < input_q.length; i++){
			var nums_cache = parseInt(input_q[i]);
			if(nums_cache<1||nums_cache>35){
				console.log("前区范围不正确");
				return false;
				break;
			}
			attack_arr[i] = nums_cache;
		}
		for(var i = 0 ; i < input_h.length; i++){
			var nums_cache = parseInt(input_h[i]);
			if(nums_cache<1||nums_cache>12){
				console.log("后区范围不正确");
				return false;
				break;
			}
			attack_arr[i+5] = nums_cache;
		}
		cp_nums();
	}
	function cp_nums(){
		var q = generate_randomx(35,5).sort(sortNumber);
		var h = generate_randomx(12,2).sort(sortNumber);
		var z  = new Array();
		z = q.concat();
		z.push(h[0]);
		z.push(h[1]);
		timer = setTimeout(function(){
			cp_bidui(attack_arr,z,q,h);
			var arrPost = [cishu,one,two,three,four,five,six,cp_q,cp_h,cp2_q,cp2_h];
			postMessage(arrPost);
		},10);
	}
	function cp_bidui(attack,z,q,h){
		var j = 0;
		var jq = 0;
		var jh = 0;
		creat_nums("caipiao35",q);
		creat_nums("caipiao12",h);	
		for(var i=0;i<attack.length;i++){
			if(i<=4){
				for(var r=0;r<z.length-2;r++){
					if(z[r]===attack[i]){
						jq++;
					}
				}
			}
			if(i<=6&&i>4){
				for(var u=5;u<z.length;u++){
					if(z[u]===attack[i]){
						jh++;
					}
				}
			}
			if(i===6){
				if(jq===5&&jh===2){
					console.log(q);
					console.log(h);
					one++;
					q = generate_randomx(35,5).sort(sortNumber);
					h = generate_randomx(12,2).sort(sortNumber);
					creat_nums("caipiao35-2",q);
					creat_nums("caipiao12-2",h);
					return;
				}
				else if(jq===5&&jh===1){
					two++;
					cp_nums();
				}
				else if(jq===4&&jh===2||jq===5){
					three++;
					cp_nums();
				}
				else if(jq===3&&jh===2||jq===4&&jh===1){
					four++;
					cp_nums();
				}
				else if(jq===2&&jh===2||jq===3&&jh===1||jq===4){
					five++;
					cp_nums();
				}
				else if(jh===2||jq===1&&jh===1||jq===3){
					six++;
					cp_nums();
				}else{
					cp_nums();
				}
			}
		}
		cishu++;
	}
	creat_attack();
}

HTML:

<div class="item_box">
	<h2>类型1(35选中5个+12选中2个)</h2>
	<p><span>模拟中奖号码:</span><input type="text" placeholder="输入5个1-35的数字,用英文逗号隔开" class="c_input" id="input_q">+<input type="text" placeholder="输入2个1-12的数字,用英文逗号隔开" class="c_input" id="input_h"></p>
    <p class="caipiao_p"><span>当前</span><span class="caipiao35">*</span><span class="caipiao35">*</span><span class="caipiao35">*</span><span class="caipiao35">*</span><span class="caipiao35">*</span><span>+</span><span class="caipiao12">*</span><span class="caipiao12">*</span></p>
    <p class="caipiao_p"><span>下一组</span><span class="caipiao35-2">*</span><span class="caipiao35-2">*</span><span class="caipiao35-2">*</span><span class="caipiao35-2">*</span><span class="caipiao35-2">*</span><span>+</span><span class="caipiao12-2">*</span><span class="caipiao12-2">*</span></p>
    <p><span>运行次数</span><span id="cishu"></span></p>
    <p><span>六等奖次数</span><span id="cishu6"></span></p>
    <p><span>五等奖次数</span><span id="cishu5"></span></p>
    <p><span>四等奖次数</span><span id="cishu4"></span></p>
    <p><span>三等奖次数</span><span id="cishu3"></span></p>
    <p><span>二等奖次数</span><span id="cishu2"></span></p>
    <p><span>一等奖次数</span><span id="cishu1"></span></p>
    <button type="button" onClick="creat_attack()">开始</button>
</div>

CSS:

.caipiao_p span{
	padding-right:5px;
}
.item_box{
	border-bottom:1px solid #ADADAD;
	padding-bottom:10px;
}
.c_input{
	width:210px;
	font-size:12px;
}


点击DEMO预览

donate.png


telegram banner (1).png