整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

JavaScript中的间歇调用和超时调用

JavaScript中的间歇调用和超时调用

avaScript是单线程语言,但它允许通过设置超时值和间歇时间值来调度代码在特定的时刻执行。前者是在制定的时间过后执行代码,而后者则是每隔指定的时间就执行一次代码。

超时调用:setTimeout()方法

超时调用需要使用window对象的setTimeout()方法,它接收两个参数:要执行的代码和以毫秒表示的时间(即在执行代码前需要等待多少毫秒)。其中,第一个参数可以是一个包含JavaScript代码的字符串(就和在eval()函数中使用的字符串一样),也可以是一个函数。但由于传递字符串可能导致性能损失,因此不建议以字符串作为第一个参数,如下:

// 不建议传递字符串
setTimeout("console.log('hello world!')", 1000);
// 推荐的调用方式
setTimeout(function(){
	console.log("hello world!");
}, 1000);

第二个参数是一个表示等待多长时间的毫秒数,但经过该时间后,指定的代码不一定会执行。JavaScript是一个单线程序的解释器,因此一定时间内只能执行一段代码。为了控制要执行的代码,就有一个JavaScript任务队列。这些任务会按照它们添加到队列的顺序执行。setTimeout()的第二个参数告诉JavaScript再过多长时间把当前任务添加到队列中。如果队列是空的,那么添加的代码会立即执行;如果队列不是空的,那么它就要等前面的代码执行完了以后再执行。

超时调用ID

调用setTimeout()之后,该方法会返回一个数值ID,表示超时调用。这个超时调用ID是计划执行代码的唯一标识符,可以通过它来取消超时调用。要取消尚未执行的超时调用计划,可以调用clearTimeout()方法并将相应的超时调用ID作为参数传递给它,如下:

// 设置超时调用
var timeoutId=setTimeout(function(){
	console.log('hello world!');
}, 1000);
// 把超时调用取消
clearTimeout(timeoutId);

取消超时调用clearTimeout()

只要在指定的时间尚未过去之前调用clearTimeout(),就可以完全取消超时调用。前面的代码在设置超时调用之后马上又调用了cleatTimeout(),结果就跟什么也没有发生一样。

超时调用的代码都是在全局作用域中执行的,因此函数中this的值在非严格模式下指向window对象,在严格模式下是undefined。

间歇调用setInterval()

间歇调用与超时调用类似,只不过它会按照指定的时间间隔重复执行代码,直至间歇调用被取消或者页面被卸载。设置间歇调用的方法是setInterval(),它接受的参数与setTimeout()相同。如下:

// 不建议传递字符串
setInterval("console.log('Hello World!')", 1000);
// 推荐的调用方式
setInterval(function(){
	console.log('hello world!')
}, 1000);

间歇调用ID和取消间歇调用clearInterval()方法

调用setInterval()方法同样也会返回一个间歇调用ID,该ID可用于在将来某个时刻取消间歇调用。要取消尚未执行的间歇调用,可以使用clearInterval()方法并传入相应的间歇调用ID。如下:

var num=0;
var max=10;
var intervalId=null;
function incrementNumber(){
	num++;
	console.log(num);
	if (num==max) {
		clearTimeout(intervalId);
		console.log("Done");
	}
}
intervalId=setInterval(incrementNumber, 500);

使用超时调用来模拟间歇调用

这个模式也可以使用超时调用来实现,如下:

var num=0;
var max=10;
function incrementNumber(){
	num++;
	console.log(num);
	if (num < max) {
		setTimeout(incrementNumber, 500);
	} else {
		console.log("Done");
	}
}
setTimeout(incrementNumber, 500);

可见,在使用超时调用时,没有必要跟踪超时调用ID,因为每次执行代码之后,如果不再设置另一次超时调用,调用就会自行停止。

一般认为,使用超时调用来模拟间歇调用是一种最佳模式。在开发环境下,很少使用真正的间歇调用,原因是后一个间歇调用可能会在前一个间歇调用结束之前启动。而像前面示例中那样使用超时调用,则完全可以避免这一点。所以,最好不要使用间歇调用。

PS:

1、在setTimeout中的业务会被阻塞到空闲时执行,而setInterval不会受其他业务的阻塞。

2、 js是单线程,但是js底层的引擎层是native代码,可以使用多线程。js的异步任务就是在引擎中通过线程池执行完成,然后通知js层。

习HTML时有时候我们需要用代码设置边框或虚线边框的样式,那该怎么设置呢?下面上海非凡进修学院HTML5开发培训机构大咖分享下html虚线边框设置教程,会对几个不同标签加虚线边框效果样式,同学们可以根据示例灵活掌握与应用到自己DIV+CSS布局中。

为了对html不同标签加边框虚线,我们选择几个常用标签对齐设置边框虚线效果。

1、html常用标签

div标签

span

ul li

table tr td

2、实例用到CSS属性单词

border

width

height

3、实现虚线的CSS重点介绍

border为边框属性,如果要实现对象边框效果,要设置边框宽度、边框颜色、边框样式(实线还是虚线)

border:1px dashed #F00 这个就是设置边框样式宽度为1px,虚线,虚线为红色。

4、实例描述

我们对以上几个标签设置相同宽度、相同高度、边框效果。

5、HTML代码示例:

以上示例对html中不同标签设置相同的样式,包括相同边框虚线。

上海HTML5开发培训机构大咖提示边框三个样式

通常我们可以对边框设置宽度(厚度)、边框样式、边框颜色这三个属性与参数。

1)、边框颜色:border-color:#000

2)、边框厚度(宽度):border-width:1px

使用数字+单位设置边框厚度宽度,如1px(边框厚度宽度为1像素),边框必须为正数字,大于0的数值。否则设置边框border样式无效。

3)、border边框样式:border-style:solid

上海HTML5开发培训机构大咖提示:边框border样式值如下:

none :无边框。与任何指定的border-width值无关

hidden : 隐藏边框。IE不支持

dotted : 在MAC平台上IE4+与WINDOWS和UNIX平台上IE5.5+为点线。否则为实线(常用)

dashed : 在MAC平台上IE4+与WINDOWS和UNIX平台上IE5.5+为虚线。否则为实线(常用)

solid :实线边框(常用)

double : 双线边框。两条单线与其间隔的和等于指定的border-width值

groove : 根据border-color的值画3D凹槽

ridge :根据border-color的值画菱形边框

inset : 根据border-color的值画3D凹边

outset : 根据border-color的值画3D凸边

内容来源于@什么值得买APP,观点仅代表作者本人 |作者:yj8490666

0x00 需求篇

作为一名极客轻症,对家庭网络的想象围绕的是: 爽和快!

“爽”是建立在“快”的基础上,要想实现需要回答如下问题(答案):

“要快”:

1.运营商怎么选?

(小学生才做选择题,联通、电信双线接入)

2.运营商送的光猫性能如何?

(桥接模式小于1G可以用,大于等于1G要更换)

3.路由性能如何?

(在带机量不多的情况下大部分路由性能都可以,我换了软路由)

4.无线WIFI信号覆盖如何?

(吸顶式AP+AC覆盖,或者AP模式有线回程MESH,我用了AX3600*3 5G覆盖)

“要爽”:

1.接入设备精细控制权限?动画片时间,刷抖音时间等。

(爱快行为管控->应用协议控制,如果有脱离家庭WIFI使用4G行为的话,需要设置IOS的屏幕使用时间(神器))

2.涉及隐私的场景(摄像头)网络如何管理?

(爱快ACL规则、行为管控->网址黑名单)

3.如何提升网络高可用?

(联通、电信双线接入,流控分流,故障切换)

4.如何规划网络游戏场景的流量?

(爱快流通分流->协议分流,智能流控->游戏优先 小包优先)

5.IPTV如果接入局域网?不连光猫IPTV口

(详见3.6节)

6.多并发场景下NAS服务器接入?

(如果存在同时读取的情况,做链路聚合,增加并发带宽。目前群晖4口链聚后达到4G/带宽,机械盘Raid5读取220MB/S(物理性能受限))

7.如何利用闲置带宽回血?

(ESXI安装CDN虚机,网心、甜糖,满足机柜每日电费后略有盈余)

0x01 装修篇

注:仅针对与网络部分的装修相关阐述

1.1.弱电箱选址

大多数住宅的弱电箱被安排在了客厅的电视背景墙上或沙发后(有些恒大系在入户门左右)从美观性与维护便利性来说不一定合理。如果房屋处于毛坯状态,建议改造至一个隐蔽的角落,从走廊弱电井重新穿光纤和其它弱电线(如有线电视)。

如果弱电箱位置不好更改或已经是精装房,建议测量弱电箱大小,原则上越大越好。如果像我一样喜欢折腾的话,可以在弱电箱前面放个小机柜。

我家的情况是弱电箱在电视背景墙上,会被电视柜遮挡,而且很小,果断移位。

原弱电箱位

原弱电箱位

房屋结构比较紧凑,未来想要放置机柜,只好迁移弱电至浇筑楼梯的下面。也正因为放置机柜遮挡住弱电箱本体,无需柜门,我就买了个比较便宜的,贵的都是柜门比较好看。

新弱电箱位置

新弱电箱位置

弱电箱至走廊弱电井,我穿了2根烽火纤芯的单模光纤,当时想的是留作1条备份,结果现在接入了双运营商

注:光纤很便宜,如果穿管容易,可以适当多留备份。

1.2 网线选择与接地

正规厂家生产的网线都不差,只要从正规渠道购买就好。我选择了秋叶原的6类双屏蔽,用量200米到手不足2.5元/米。

相对来说,双屏蔽层的网线不好打6类带理线和燕尾夹的水晶头,还需要专用的6类网线钳,用这个网线打了24个跳线水晶头,手指都麻了.... 后来还是换了成品跳线。

屏蔽网线结构

屏蔽网线结构

另外提一下网线是否有必要买带屏蔽层的,我认为最主要是看预算,带的当然是比不带的好,但是如果说你不能有效接地,也没干扰源,传输距离又短,不带屏蔽也并不会有实际的体验差别。(猫爷有个网线接地的测试视频,感兴趣可以搜搜看,并关注下他测试时的网线长度)。

很多小伙伴用了屏蔽线并没有效的接地(看了站内很多文章,普遍没有真·接地,还有把网线插在交换机上,交换机外壳接地就认为等价于网线接地

),可以说没用上配线架的,都不能优雅的接地。

接地作用在此不做详解,只介绍真·接地方法:

①【十分繁琐,极不推荐】每根网线屏蔽层引出一条细线与地线相连。

②【推荐】网线与配线架的屏蔽模块连接,配线架统一接地。

网线屏蔽层与模块金属外壳压紧

网线屏蔽层与模块金属外壳压紧

1.3布线原则

能用有线用有线,哪怕现在用不到,以后可能也用到。新装修考虑网线光纤同穿,为万兆光做预埋。

有线是基础,无线是补充,交叉互备,有备无患。

考虑好室内外(走廊)监控位置,预留网线(POE)。

放弃86面板式AP+AC方案,覆盖差、发热大、贵。别听一些充值自媒体、装修公司鼓吹了。技术日益革新,需要考虑替换成本和便利性。

如果选择AP+AC方案,建议选择吸顶式AP,或者隐藏到棚顶检修口里。毕竟AP也不是什么家具,陈列的艺术品,只是网络基础设施。

如果选择mesh方案,首选是有线回程mesh,减少5G信道占用和延迟,实在无法布线就只能无线回程了。同样能藏还是藏起来。

棚顶AP位置预留网线和强电(虽然可以POE供电,但有备无患)

0x02 硬件篇

2.1 交换机

自用TL-SG2024MP,网管+静态链聚+24口POE全千兆。稳定的狠,下次升级可能要等到万兆24口普及吧。

网口数量根据接入设备的多少,做一定的预留,尤其是打算做链聚的网络。

网管交换机普遍价格都不高,而且功能类似,性能都很稳定,不用过于追求高价产品。如果有在线剪辑,等非编需求,可以选带2-4口10G SFP的产品。

2.2 NAS服务器

自用群晖DS1517+,用了几年了比较稳定。5*12T插满+5*12T硬盘柜。

轻度使用的用户,也可以自建黑群,功能上基本都是一致的。

2.3 UPS

APC BK650 家用YYDS不解释,有很多反应电池爱报警,我的4年了还没换电池,可能是人品爆发,当然自己换电池的话只需百元左右。

2.4 路由

软路由截止目前,我一共研究了三款设备:

V1.0 小马V1成品软路由 (N3710 4G内存 4口千兆)

优点:低功耗,入门神器,性能比J1900强 缺点:esxi下显卡无驱动

改装了顶盖,加强散热

改装了顶盖,加强散热

V2.0 自组i7软路由(I7 8700T H310工控 16G内存 500G SSD 4口千兆I211)

优点:低功耗,性能强劲 缺点:为了追求机箱小巧,无法装半高PCIE卡(也就是无法10G)

全铝机箱颜值还是抗打的

全铝机箱颜值还是抗打的

我刚刚从V2.0升级至3.0,升级原因是看了一眼本站大佬的一篇 Juniper SRX300防火墙结合猫棒的文章,仅仅一眼就上了头,黄鱼淘了洋垃圾SRX300和2个MA5671a猫棒,结果研究了几天对SRX300开机速度与配置方法有点迷,而且不好上架,已经出掉重建新的软路由。

V3.0 自组i9 2U软路由(I9 9900+Z390+16G内存+1T NVME +DELL BCM57810S 10G*2+INTEL I350 T4 V2+主板自带螃蟹卡1G)

中了猫棒毒主要是因为光猫的LAN口只有千兆,例如一般500M的家宽限速都是高于500M的,同理1000M的限速也高于1000M,但又被光猫的千兆LAN口速率限制,这哪能忍

经过查看各种帖子,总结出方案:华为MA5671a刷改版固件变身猫棒,与网卡协商2.5G速率(如果有能协商10G的物美价廉猫棒当然更好),刷固件教程建议百度,关键词ma5671a GPON Stick ,懒得刷的可以直接购买成品(分蓝色UPC和绿色APC接头,买之前可以让卖家改好,省个转接头)。

MA5671A

MA5671A

10G网卡选择了DELL拆机的BCM57810S PCIE X8接口,网卡选择需谨慎,一方面要与虚拟化软件驱动兼容,我用的esxi6.7 和7.0 最新版本均可兼容;另一方面更要与猫棒的协商速率吻合,很多10G网卡无法协商2.5G需要注意。

BCM57810S

BCM57810S

已知MA57810S兼容情况LIST(不完全,可补充)

已知MA57810S兼容情况LIST(不完全,可补充)

1G网卡方面选择了INTEL I350 T4 V2 PCIE x4属于中规中矩的一张卡,胜在稳定,价格也不贵。

某猫有几家卖4口1G网卡的店铺,虽然是PCIE X4接口,实际靠后的几个金手指没有接线,4口并发速率是不可能达标的,注意避坑!

intel i350 t4 v2

intel i350 t4 v2

主板选了微星Z390-S01,MATX,属于Z系列的丐版,价格便宜,接口满足需求,内存光威D4 3000。

机箱在某宝买的支持ATX电源的2U机箱,大赞,价格十分便宜,用料做工没得说。电源采用金牌电源,7*24开机电源转换效率和品质是尤为重要。某东买的先马500W金牌,220V 50%负载下,转换效率90%,200+的价格还能买到金牌全模组+5年质保不容易。

已经更换为静音PMW风扇

已经更换为静音PMW风扇

安装调试ESXI

安装调试ESXI

0x03 软件篇

基础软件的安装 ESXI、PVE、爱快等,基本的安装配置教程有很多,而且没有门槛,请自行检索,这里不重复造轮子了。这里介绍下关键点。

3.1 关于硬件直通配置

硬件直通可以带来显著的性能提升,相关测评可以去b站搜索,硬件支持的话能开还是一定要开的。注意事项:

①.BIOS上一定要开启VT-D功能,否则无法硬件直通 ,SR-IOV也不正常;

②ESXI下不要将所有的网口都做成直通!!!会导致无法进入管理web,解决方法是开ESXI SHELL,改esx.conf配置文件,重改vmkernel ,或者重装ESXI;

③直通后需要重启系统。

硬件直通情况

硬件直通情况

3.2 关于ESXI安装/升级驱动方法

esxi无论是6.7还是7.0版本(包括小版本更新的u3u3b等)自带的驱动都不是最新,建议将驱动更新至最新版本。由于Z390主板上自带了一个8111H的螃蟹卡,准备当做esxi硬管理口(技巧:软的管理口可以绑定在爱快LAN,局域网直接进ESXI管理),7.0可能不太好驱。我安装的是6.7U3版本。

安装/升级步骤:

①.注册个vm账户,在支持检索页面说搜索所需驱动型号,注意添加过滤条件!

https://www.vmware.com/resources/compatibility/search.php

例如搜索57810驱动

例如搜索57810驱动

②.下载对应的驱动包,注意核对VID DID SVID SSID信息

找到VID DID SVID SSID信息匹配的驱动

找到VID DID SVID SSID信息匹配的驱动

esxi中查看设备相关ID信息

esxi中查看设备相关ID信息

③开启esxi ssh功能,使用xterm、crt、xshell等工具连接,并上传驱动vib程序,建议上传至/tmp/ 目录下,重启esxi后会自动清除临时文件()

④执行安装命令

esxcli software vib install -v /tmp/驱动文件名.vib

⑤安装成功后会界面会提示true字样,并说明重启后生效,等所有驱动都装完后一并重启即可。

BCM57810S 更新后的驱动

BCM57810S 更新后的驱动

I350 T4 更新后的驱动

I350 T4 更新后的驱动

3.3 关于BCM57810S兼容2.5G协商的配置

默认情况下BCM57810S固件中开启的自动协商模式是1G/10G自适应,由于MA5671A是1G/2.5G协商,希望协商成2.5G的模式需要改下BCM57810S的固件配置,比较简单,方法如下:

①准备一个大于1G的U盘

②使用Rufus斜盘工具,在U盘中写入一个MS-DOS启动盘

③下载QLogic BCM57800 Diag Driver驱动

https://www.helpjet.net/Fs-34550700-12624658-11814131.html

④解压下载的驱动,并将 B57BCMCD_T7.12b.4.1.zip/dos/Diag/NX2_Ev/ 目录下的全部内容复制到写好MS-DOS的U盘的根目录下。

⑤将U盘插入ESXI服务器,开机选择从U盘引导,进入MS-DOS

⑥进入MS-DOS后在命令行输入ediag.exe -b10eng 启动ediag驱动配置工具

⑦依次执行如下命令每行回车。(如需修改第二个光口,执行完后,退出至顶层,命令首行修改为device 2对第二个光口做相同修改,如果第二个光口量连接局域网10G速率,请不要修改)

device 1

nvm cfg

7

35=70

36=70

56=6

59=6

save

exit

命令解释:35/36=70 表示 1G、2.5G 和 10G 或 0x10 | 0x20 | 0x40=0x70,而 56/59=6 默认链接速度为 2.5G 而不是 10G。

⑧执行完成后重启系统,即可自动与猫棒协商2.5G。

3.4 关于CPU睿频

esxi是可以正常睿频的,但在虚机中显示只有基础频率,不用担心。你可以在裸机上安装WIN,用CPUZ跑分,再在esxi下虚拟出WIN,重新跑分,跑分结果比裸机分数略低一点,就说明睿频正常。

3.5 爱快下猫棒(MA5671A)的配置

①收集光猫现有配置(各个地区并不一样,只能自己获取),绝大部分光猫并不需要超级管理员用户,光猫背面标签上的普通用户就可以查看到。

收集内容:

i. LOID

ii. LOID 密码(如有)

iii. internet VLANID

iiii. other VLANID(如有 一般是IPTV)

收集LOID VLAN ID

收集LOID VLAN ID

②爱快WAN口绑定到猫棒所在端口,配置为静态ip,ip为192.168.1.100 255.255.255.0 网关192.168.1.1 ,爱快的LAN口网段需避开192.168.1.0段!

PC端连接爱快LAN口,访问192.168.1.10,进入光猫web页面,账号为root,密码根据猫棒固件不同有区别,行查阅固件说明。

猫棒登录

猫棒登录

③配置猫棒的LOID LOID password (如有),点击相应的run

配置LOID

配置LOID

④检查猫棒状态 5为OLT正常注册 2或者3 则需要输入LOID 密码

5注册正常,可以看到收发光功率和模块温度

5注册正常,可以看到收发光功率和模块温度

⑤修改爱快WAN口连接模式为 基于VLAN的混合模式,在DHCP里添加 如图配置,填入IPTV vlanID

⑥同上在ADSL/PPOE中添加,填写internet vlanID

⑦正确配置后,可以正确获取到IP

iptv

iptv

ppoe拨号

ppoe拨号

至此猫棒已经顺利替换光猫。

3.6 运营商IPTV接入局域网

无需从光猫IPTV口连接机顶盒,无需VLAN交换机。

①运营商给的IPTV盒子先接入局域网,在爱快DHCP中配置静态分配或者在IPTV盒子中手动配置IP,例如设置IP为192.168.31.240

②爱快->流控分流->端口分流 添加配置如图

③爱快->网络设置->IGMP代理 配置如图

④此时重启IPTV盒子既可正常使用IPTV的直播、回看(即组播、单播)点播功能。注意盒子必须有线连接,组播走无线的话问题比较多。

手抖没拍好

手抖没拍好

0x04 毕业照

单线测速1.4G左右

单线测速1.4G左右

双运营商接入

双运营商接入

只能放下12U的柜子有点挤

只能放下12U的柜子有点挤

全家福

全家福

工作室完工

工作室完工

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~