美文网首页
javascript 精确定时器

javascript 精确定时器

作者: 秋无衣 | 来源:发表于2020-05-11 16:11 被阅读0次

使用原生语法的缺陷

时间越长, 误差可能越大. 计时100次1秒可能用110秒

解决方法

使用小粒度的时间分片, 满足需求的长度后记为1次切换

// 这里降低代码复杂度直接用rxjs
const t$ = timer(0, 17)
    .pipe(
        map(() => new Date().getTime()),
        scan(
            (arr, next) => {
                const diff = next - arr[0]
                const step = (diff / 1000) | 0 // 每1000ms计步
                return [arr[0], next, diff, step]
            },
            [new Date().getTime(), new Date().getTime(), 0, 0],
        ),
        distinctUntilChanged((a, b) => {
            return b[3] === a[3]
        }),
    )
    .subscribe((r) => {
        // 初始化时间, 分片时间, 相差值, 步数
        console.log(r)
    })

image.png

打印结果截图, 每个整秒差值在17ms内. 用差不多17ms去测量1000ms, 结果当然是比较准确的

缺陷

占用资源当然会高一些

相关文章

  • javascript 精确定时器

    使用原生语法的缺陷 时间越长, 误差可能越大. 计时100次1秒可能用110秒 解决方法 使用小粒度的时间分片, ...

  • js字符串,定时器

    Javascript组成 字符串处理方法: 定时器在javascript中的作用: 定时器: setTimeout...

  • JavaScript

    javascript引入方式 定时器

  • 2020-02-04

    ESP8266开发硬件定时器(比软件定时器更精确) • 如果使⽤用 NMI 中断源,且为⾃自动填装的定时器,调⽤用...

  • 「DOM 编程」JavaScript 动画

    JavaScript 动画实现方式JavaScript 动画三要素定时器常见动画动画函数 JavaScript 动...

  • iOS开发中常用的方法(一)

    系统弹窗:### 过期方法: 新方法: 定时器/延时:### 延迟调用方法一: 延迟调用方法二: 定时器一:(精确...

  • 驯服定时器和线程

    定时器并不属于JavaScript 虽然我们一直在JavaScript中使用定时器,但是它并不是javascrip...

  • 定时器 类型转换 封闭函数

    定时器定时器在javascript中的作用1、制作动画2、异步操作3、函数缓冲与节流 定时器类型及语法 /*定时器...

  • 定时器

    定时器定时器在javascript中的作用1、制作动画2、异步操作3、函数缓冲与节流定时器类型及语法/*定时器:s...

  • iOS中的定时器

    oX01 NSTimer 常规的定时器,不需要精确的定时器间隔的操作,这个和runloop有关系 time 开头...

网友评论

      本文标题:javascript 精确定时器

      本文链接:https://www.haomeiwen.com/subject/hoiunhtx.html