计时器

JavaScript的计时器的工作原理

只愿长相守 提交于 2020-02-29 17:00:18
最近都在看一些JavaScript原理层面的文章,恰巧看到了jQuery的作者的一篇关于JavaScript计时器原理的解析,于是诚惶诚恐地决定把原文翻译成中文,一来是为了和大家分享,二来是为了加深自己对于JavaScript的理解。原文链接: http://ejohn.org/blog/how-javascript-timers-work/ 原文翻译: 从基础层面来讲,理解JavaScript计时器的工作原理是很重要的。由于JavaScript是单线程的,所以很多时候计时器并不是表现得和我们的直观想象一样。让我们从下面的三个函数开始,它们能够让我们有机会去构造和操作计时器。 var id =setTimeout(fn, delay); -创建了一个简单的计时器,在经过给定的时间后,回调函数将会被执行。这个函数会返回一个唯一的ID,便于在之后某个时间可以注销这个计时器。 var id = setInterval(fn, delay); -和setTimeout类似,但是每经过一段时间(给定的延时),所传递的函数就会被执行一次,直到这个定时器被注销。 clearInterval(id); , clearTimeout(id); -接受一个计时器ID(由之前两种计时器返回)并且停止计时器回调函数的执行。 为了理解计时器的内部工作原理,我们首先需要了解一个非常重要的概念

计时器vue实现

不打扰是莪最后的温柔 提交于 2020-02-29 02:05:32
< template > < div class = "container" > < div class = "box" > < div class = "header" > 小米闪购 < / div > < el - row : gutter = "20" > < el - col : span = "6" > < div class = "product-area" > < div class = "con-tit" > 抢购 < / div > < img class = "img" src = "./imgs/lightning.png" > < div class = "desc" > 距离结束还有 < / div > < div class = "time-wrapper" > < div class = "time-box" > { { hour } } < / div > < i class = "ii" > : < / i > < div class = "time-box" > { { minute } } < / div > < i class = "ii" > : < / i > < div class = "time-box" > { { second } } < / div > < / div > < / div > < / el - col > <

掌据这几个设计思想,从单片机小白立马升级为单片机工程师

谁说我不能喝 提交于 2020-02-26 23:30:51
分层思想 分层的思想,并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用。看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种恍然大悟的感觉。如果说我不懂LCD怎么驱动,那好办,看一下datasheet,参考一下阿别人的程序,很快就可以做出来。但是如果不懂程序设计的思想的话,会给你做项目的过程中带来很多很多的困惑。 参考了市面上各种各样的嵌入式书籍,MCS-51,AVR ,ARM 等都有看过,但是没有发现有哪本是介绍设计思想的,就算有也是凤毛麟角。写程序不难,但是程序怎么样才能写的好,写的快,那是需要点经验积累的。结构化模块化的程序设计的思想,使最基本的要求。然而这么将这个抽象的概念运用到工程实践当中恩?那需要在做项目的过程中经历磨难,将一些东西总结出来,抽象升华为理论,对经验的积累和技术的传播都大有裨益。所以在下出来献丑一下,总结一些东西。 就我个人的经验而谈,有两个设计思想是非常重要的。 一个就是 “时间片轮的设计思想” ,这个对实际中解决多任务问题非常有用,通常可以用这个东西来判断一个人是单片机学习者,还是一个单片机工程师。这个必须掌握。(下文将介绍)。 第二个就是 “分层屏蔽的设计思想” 即分层思想。下面用扫描键盘程序例子作为引子,引出今天说的东西。 问题的提出 单片机学习板一般为了简单起见,将按键分配的很好,例如整个 4*4

js_任务列队

只谈情不闲聊 提交于 2020-02-25 15:41:57
js_任务列队 任务列队之主程序任务(main非异步任务)、微任务列队(如Promise任务)、宏任务列队(如settimeout任务) 执行优先级 主程序任务>微任务>宏任务 注意:定时器并不会等待主程序结束才开始计时,而是当主程序开始运行时就已经开始计时,计时完成将任务让如列队中去,最后等待主程序完成执行任务。 注意:即使有两个定时器的时间是一样的它们也会分别被加入到列队中去。 应用的一个例子:在平时的代码编写中我们都是将script放在body的最后面,为的就是让页面先绘制出,方式应为加载js时间过长造成长时间的页面白屏影响用户的使用体验。 来源: CSDN 作者: 爱吃蟹黄堡的蟹老板 链接: https://blog.csdn.net/weixin_42362211/article/details/104494663

web计时机制

感情迁移 提交于 2020-02-18 19:55:22
前面的话   页面性能一直都是Web开发人员比较关注的领域。但在实际应用中,度量页面性能的指标,是javascript的 Date对象 。Web Timing API改变了这个局面,让开发人员通过javascript就能使用浏览器内部的度量结果,给出了页面加载和渲染过程的很多信息,对性能优化非常有价值。本文将详细介绍web Timing API——performance对象 简述   Web计时机制的核心是window.performance对象。对页面的所有度量信息,包括那些规范中已经定义的和将来才能确定的,都包含在这个对象里面。performance对象包括navigation和timing对象,以及chrome扩展的memory对象,还包括getEntries()和now()两个方法   值得高兴的是,低版本IE也支持performance对象 memory   memory属性是chrome扩展的对象,只有chrome浏览器支持,包含以下三个属性:   jsHeapSizeLimit表示内存大小限制   totalJSHeapSize表示可使用的内存   usedJSHeapSize表示javascript对象占用的内存 /* jsHeapSizeLimit: 793000000 totalJSHeapSize: 10000000 usedJSHeapSize:

setTimeout 和 setInterval 计时的区别

北慕城南 提交于 2020-02-13 17:07:40
window对象有两个主要的定时方法,分别是setTimeout 和 setInteval 他们的语法基本上相同,但是完成的功能取有区别。 setTimeout方法是定时程序,也就是在什么时间以后干什么。干完了就拉倒。 setInterval方法则是表示间隔一定时间反复执行某操作。 如果用setTimeout实现setInerval的功能,就需要在执行的程序中再定时调用自己才行。如果要清除计数器需要 根据使用的方法不同,调用不同的清除方法: 例如:(1): t=setTimeout('northsnow()',1000); clearTimeout(t); (2): t=setInterval('northsnow()',1000); clearInteval(t); setTimeout() 语法 var t=setTimeout("javascript语句",毫秒); 第一个参数是含有 JavaScript 语句的字符串。这个语句可能诸如 "alert('5 seconds!')",或者对函数的调用,诸如 alertMsg()"。 第二个参数指示从当前起多少毫秒后执行第一个参数。 提示:1000 毫秒等于一秒。 实例 当下面这个例子中的按钮被点击时,一个提示框会在5秒中后弹出。 <html> <head> <script type="text/javascript">

window对象之计时器--v客学院技术分享

做~自己de王妃 提交于 2020-02-09 14:15:25
setTimeout()和setInterval()可以用来注册在指定的时间之后单次或者重复调用的函数。因为它们都是客户端JavaScript中重要的全局函数,所以定义为window对象的方法,但是作为通用函数,其实不会对窗口做什么事情。 Window对象的setTimeout()方法用来实现一个函数在指定的毫秒数之后运行。setTimeout()返回一个值,这个值可以传递给clearTimeout()用于取消这个函数的执行。 setIntterval()和setTimeout()一样,只不过这个函数会在指定毫秒数的间隔里重复调用, 如 : setIntterval(updateClock,1000);//每一秒钟调用updateClock() 和 setTimeout()一样,setInterval()也返回一个值,这个值可以传递给clearInterval(),用于取消后续函数的调用。 下面演示下 setTimeout()、setInterval()和clearInterval()的用法: 由于历史原因,setTimeout()和setInterval()的第一个参数可以作为字符串传入。如果这么做,那这个字符串会在指定的超时时间或间隔之后进行求值(相当于执行eval())。 除前两个参数之外, HTML5规范还允许setTimeout()和setInterval(

TCP协议有几大计时器?

北慕城南 提交于 2020-02-09 02:53:18
1) 超时重传计时器 目的:避免无限等待确认报文 创建时间:在发送TCP报文段时,会为该报文段设置一个超时重传计时器 可能发生的情况:在超时时间到达之前,收到了该报文段的确认则撤销计时器,否则重传该报文段,并将超时重传计时器复位 重传时间:2*RTT(RTT为往返时间) 2) 坚持计时器 目的:解决零大小窗口导致的死锁问题 死锁产生原因:当接收端窗口大小为0时,发送端停止发送,此后如果接收端有空余空间来接收数据,则发送一个新窗口大小的报文,如果该报文丢失了则导致双方都处于等待状态,产生死锁 工作原理:当发送端接收到接收端发送的零大小窗口的报文时,就启动坚持计时器,当计时器到达计时时间,发送端就主动发送一个报文段告诉接收端你发送的新窗口大小的报文丢失了,需要重新发送 坚持时间:开始先设置为超时重传时间,如果超时了还是没有收到接收端发送的新窗口大小报文,则将计时器的值加倍并且复位,直到大于门限值60s,在此之后每隔60s向接收端发送一个询问报文 3) 保活计时器 目的:避免空闲连接长时间的占用服务器资源 工作原理:当服务器收到数据时都将保活计时器重新设置(一般2h),过了2h后,服务器如果没有收到数据,每隔75s发送一个探测报文给客户端,当连续发送10次后,仍然没有收到客户端的回复,则服务器断开连接 4) 时间等待计时器 (为服务器Time_Wait状态设置) 服务器主动断开连接时

k60驱动代码学习(5)

匆匆过客 提交于 2020-02-07 19:55:40
//systick 记时,延时 # include "include.h" # include "MK60_SYSTICK.h" # define EACH_PER_MS 25 //每隔 25 ms 中断一次 systick 定时器是24位向下计数的定时器 最大装载值16777215 / 600 000 000= 0.2796 最大计时27ms struct time { uint32_t fac_us ; //us分频系数 uint32_t fac_ms ; //ms分频系数 volatile uint32_t millisecond ; //ms uint64_t microsecond ; //us uint8_t ms_per_tick ; //1ms多少systick计数次数 } timer ; /*LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL 【作 者】LQ-005 【功能说明】初始化systick计数器 【软件版本】V1.0 【最后更新】2019年03月12日 【返回值】无 【参数值】无 【例子 】systime.init(); //开启systick定时器 QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ*/

TCP超时与重传机制

孤街醉人 提交于 2020-02-05 21:30:36
TCP超时与重传机制      TCP协议是一种面向连接的可靠的传输层协议,它保证了数据的可靠传输,对于一些出错,超时丢包等问题TCP设计的超时与重传机制。其基本原理:在发送一个数据之后,就开启一个定时器,若是在这个时间内没有收到发送数据的ACK确认报文,则对该报文进行重传,在达到一定次数还没有成功时放弃并发送一个复位信号。   这里比较重要的是重传超时时间,怎样设置这个定时器的时间(RTO),从而保证对网络资源最小的浪费。因为若RTO太小,可能有些报文只是遇到拥堵或网络不好延迟较大而已,这样就会造成不必要的重传。太大的话,使发送端需要等待过长的时间才能发现数据丢失,影响网络传输效率。   由于不同的网络情况不一样,不可能设置一样的RTO,实际中RTO是根据网络中的RTT(传输往返时间)来自适应调整的。具体关系参考相关算法。   通过图来了解重传机制: 从图可以知道,发送方连续发送3个数据包,其中第二个丢失,没有被接收到,因此不会返回对应的ACK,没发送一个数据包,就启动一个定时器,当第二个包的定时器溢出了还没有收到ack,这时就进行重传。 TCP慢启动   慢启动是TCP的一个拥塞控制机制,慢启动算法的基本思想是当TCP开始在一个网络中传输数据或发现数据丢失并开始重发时,首先慢慢的对网路实际容量进行试探,避免由于发送了过量的数据而导致阻塞。