[关闭]
@freeethy 2016-06-17T15:10:28.000000Z 字数 2149 阅读 1310

快速响应的的UI界面

high performance javascript setTimeout


浏览器UI线程

使用定时器让出时间片段

使用定时器处理数组

  1. function processArray(items, process, callback) {
  2. var todo = items.cancat(); //克隆原数组
  3. setTimeout(function() {
  4. process(todo.shift());
  5. if (todo.length > 0) {
  6. setTimeout(arguments.callee, 25);
  7. } else {
  8. callback(items);
  9. }
  10. }, 25);
  11. }
  1. function multistep(steps, args, callback) {
  2. var tasks = steps.concat(); //克隆数组
  3. setTimeout(function() {
  4. //执行下一个任务
  5. var task = task.shift();
  6. task.apply(null, args || []);
  7. //检查是否还有其他任务
  8. if (tasks.length > 0) {
  9. setTimeout(arguments.callee, 25);
  10. } else {
  11. callback();
  12. }
  13. }, 25)
  14. }

记录代码运行时间

每50ms判断,每次间隔运行多次

  1. function timedProcessArray(items, process, callback) {
  2. var todo = items.cancat(); //克隆原数组
  3. setTimeout(function() {
  4. var start = +new Date();
  5. do {
  6. process(todo.shift());
  7. } while (todo.length > 0 && (+new Date() - start) < 50)
  8. if (todo.length > 0) {
  9. setTimeout(arguments.callee, 25);
  10. } else {
  11. callback(items);
  12. }
  13. }, 25);
  14. }

延迟加载

  1. function addHandler(target, eventType, handler) {
  2. if (target.addEventListener) {
  3. addHandler = function(target, eventType, handler) {
  4. target.addEventListener(eventType, handler, false);
  5. }
  6. } else {
  7. addHandler = function(target, eventType, handler) {
  8. target.attachEvent("on" + eventType, handler);
  9. }
  10. }
  11. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注