• 使用定时器处理数组


    简单的例子:

    1 for (var i = 0, len = item.length; i < len; i++) {
    2  process(item[i]);
    3 }

    优化条件:

    1、处理过程是否必须同步?
    2、数据是否必须按顺序处理?
    都是否,就看下面的代码:

     1 function processArray(items, process, callback) {
     2 var todo = items.concat();
     3
     4 setTimeout(function() {
     5  process(todo.shift());
     6
     7 if (todo.length > 0) {
     8 setTimeout(arguments.callee, 25);
     9 } else {
    10  callback(items);
    11  }
    12 }, 25);
    13 }
    14
    15 //使用方法
    16 var items = [123, 789, 323, 778, 232, 654, 219, 543, 321, 160];
    17
    18 function outputValue(value) {
    19  console.log(value);
    20 }
    21
    22 processArray(items, outputValue, function() {
    23 console.log("Done!");
    24 });

     优化了加载时间的processArray():

     1 function timedProcessArray(items, process, callback) {
     2     var todo = items.concat(); //克隆原始数组
     3     setTimeout(function() {
     4         var start = +new Date();
     5 
     6         do {
     7             process(todo.shift());
     8         } while (todo.length > 0 && (+new Date() - start < 50));
     9 
    10         if (todo.length > 0) {
    11             setTimeout(arguments.callee, 25);
    12         } else {
    13             callback(items);
    14         }
    15     }, 25);
    16 }
  • 相关阅读:
    BZOJ 1021 循环的债务
    BZOJ 1019 汉诺塔
    BZOJ 1018 堵塞的交通
    BZOJ 1017 魔兽地图
    BZOJ 1016 最小生成树计数
    Luogu 3008 [USACO11JAN]道路和飞机Roads and Planes
    Luogu 3625 [APIO2009]采油区域
    Luogu 4139 上帝与集合的正确用法
    Luogu 3629 [APIO2010]巡逻
    Luogu 3626 [APIO2009]会议中心
  • 原文地址:https://www.cnblogs.com/qzsonline/p/2567475.html
Copyright © 2020-2023  润新知