积累就是提升之浅谈分时函数

平时工作能把需求写出来,就已经很满足了,但是看人家大牛写的代码,确实需要优化和注意的东西太多太多了,平时遇到了就会欣赏欣赏记录一下。

分时函数

为了避免js一下执行太多的任务,使用分时函数进行,每隔一段时间执行一次任务,直到所以的任务都执行完毕,经常在大数据量渲染等场景使用。

分时执行的任务,分时执行的逻辑函数,每次执行的数量和时间间隔

举例创建qq好友列表的时候,列表中通常有上千上万的好友,如果一个好友用一个节点来表示的话,在我们渲染列表的时候,可能要一次性创建成百上千个节点,添加到页面中,在短时间内一次性添加操作太多的节点,浏览器会出现卡顿的现象,甚至假死。一般童鞋都会这样操作吧!

var ary = [];
    for (var i = 1; i <= 1000; i++) {
        ary.push(i); // 假设ary 装载了1000 个好友的数据
    };
    var renderFriendList = function (data) {
        for (var i = 0, l = data.length; i < l; i++) {
            var div = document.createElement('div');
            div.innerHTML = i;
            document.body.appendChild(div);
        }
    };
    renderFriendList(ary);

 

所以避免卡顿假死等,我们用timeChunk 函数优化处理一下,就可以解决这个问题。

var timeChunk = function (ary, fn, count) {//数据,逻辑,数量
        var obj,
            t;
        var len = ary.length;
        var start = function () {
            for (var i = 0; i < Math.min(count || 1, ary.length); i++) {
                var obj = ary.shift();
                fn(obj);
            }
        };
        return function () {
            t = setInterval(function () {
                if (ary.length === 0) { // 如果全部节点都已经被创建好
                    return clearInterval(t);
                }
                start();
            }, 200); // 分批执行的时间间隔,也可以用参数的形式传入
        };
    };

 

就这个案例,我们调用一下

var ary = [];
    for (var i = 1; i <= 1000; i++) {
        ary.push(i);
    };
    var renderFriendList = timeChunk(ary, function (n) {
        var div = document.createElement('div');
        div.innerHTML = n;
        document.body.appendChild(div);
    }, 8);
    renderFriendList();

这样就完美的实现了,可以自己敲一下,看看效果

 

转载于:https://www.cnblogs.com/liliy-w/p/10930682.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值