javascript 分时函数 分批次添加DOM节点 timeChunk
创建1000个webqq的qq好友列表, 一个好友用一个节点来表示
* timeChunk
var timeChunk = function(a, fn, sz, done) {
    var obj, t, len = a.length;
    var start = function() {
        for (var i = 0; i < Math.min(sz || 1, a.length); i++) {
            var obj = a.shift();
            fn.call(this, obj);
        }
    }
    return function() {
        t = setInterval(function() {
            // 如果全部节点都已经被创建好
            if (a.length === 0) {
            	var i = clearInterval(t)
               	typeof done === "function" && done.call(this);
               	return i;
            }
            start();
        }, 200);
    }
}
/**
 * Pad a string to a certain length with another string
 */
function str_pad(input, pad_length, pad_string) {
    var i = String.valueOf()(input);
    var n = pad_length - i.length;
    if (n <= 0)
        return i;
    var s = pad_string || "0";
    while (n--) {
        i = s + i;
    }
    return i;
}
// test
var ary = [];
for (var i = 1; i <= 1000; i++) {
    ary.push(i);
}
// 每次加载8个
var renderFriendsList = timeChunk(ary, function(n) {
    var div = document.createElement("div");
    div.innerHTML = "Friend-" + str_pad(n, 4);
    document.body.appendChild(div);
}, 8, function() {
	var hint = document.createElement("p");
    hint.innerHTML = "好友列表加载完了";
    document.body.insertBefore(hint, document.body.querySelector("script"));
});
renderFriendsList();
Run:


javascript 分时函数 分批次添加DOM节点 timeChunk的更多相关文章
- 添加dom节点及优化
		
创建并添加dom加点如何进行优化? 1.使用文档片(DocumentFragment) 可以理解为"仓库",用来保存将来可能会添加到DOM中的节点: var fragment = ...
 - jquery动态添加DOM节点
		
1.append()方法:向每个匹配的元素内部添加元素 appendTo()方法:将所有匹配的元素追加的指定的元素中 <html> <head> <meta http-e ...
 - vue,在模块中动态添加dom节点,并监听
		
在这里,onclick事件没有作用,因为它指向的是window,如果写为this.click页面显示为undefined, 我采用的是通过class绑定事件,但是会有一个问题,那就是当你渲染多个事件时 ...
 - javascript之分时函数
		
在一些开发场景中,我们可能会一次性向文档中注入上千个节点,在短时间内向浏览器中大量添加DOM节点可能会让浏览器吃不消,结果往往会让浏览器卡顿或吃不消,解决方案之一便是使用分时函数(timeChunk) ...
 - console.time 简单分析javascript动态加入Dom节点的性能
		
Bullshit 本来想每天都更新下博客的,可是近期要考试,还有就是自己还是停留在暗自窃喜中吧(这样的想法要改变). 事实上近期总在想.自己要怎么去管理自己的数据,每天的生活都是对自己的数据的增删查改 ...
 - JavaScript操作DOM节点
		
DOM (文档对象模型(Document Object Model)) 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网 ...
 - 分时函数 & 节流函数
		
分时函数 & 节流函数 1.函数节流 JavaScript 中的函数大多数情况下都是由用户主动调用触发的,除非是函数本身的实现不合 理,否则我们一般不会遇到跟性能相关的问题.但在一些少数情况下 ...
 - jQuery学习-css、class操作、动画方法的运用、jQ操作Dom节点
		
css操作(设置单个/多个样式.获取样式) //修改单个属性:括号之中直接是需要修改的样式名,值 css(name,value) //例:$("#one").css("b ...
 - asp.net中调用javascript自定义函数的方法(包括引入JavaScript文件)总结
		
通常javascript代码可以与HTML标签一起直接放在前 端页面中,但如果JS代码多的话一方面不利于维护,另一方面也对搜索引擎不友好,因为页面因此而变得臃肿:所以一般有良好开发习惯的程序员都会把 ...
 
随机推荐
- SSM自学笔记(七)
			
14.MyBatis的多表操作 1.MyBatis的多表操作 1.1 一对一查询 一对一查询的模型 用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户 一对一查询的需求:查询一个订单 ...
 - 黑马JVM教程——自学笔记(一)
			
一.引言 1.1.什么是JVM 定义: Java Virtual Machine - java的运行环境(java二进制字节码的运行环境) 好处: 一次编写,导出运行 自动内存管理,垃圾回收功能 数组 ...
 - vue 报错http://eslint.org/docs/rules/xxxxx
			
vue 对语法的要求过于严格所以编译的时候报下面这个错误 解决办法: bulid文件夹 -> webpack.base.conf.js 找到下面的代码: module: { rules: [ / ...
 - .Net 之进制转换 余位补全
			
十进制转二进制 Convert.ToString(n, 2) 其中 n -- 源类型 可以是shrot Byte Int Uint Long 2 -- 目标位 可以是2,8,10,16 同理十进制转1 ...
 - vue中v-show和v-if在显示和隐藏元素上的区别
			
v-show将元素隐藏是在dom节点上加style='display:none' v-if是直接将元素完全去掉 拿v-show示例,(v-if 也是一样,把下面的代码中v-show替换成v-if即可运 ...
 - 理解Flink中的Task和SUBTASK
			
1.概念 Task(任务):Task是一个阶段多个功能相同的subTask 的集合,类似于Spark中的TaskSet. subTask(子任务):subTask是Flink中任务最小执行单元,是一个 ...
 - ES6中函数调用自身需要注意的问题
			
在传统的递归调用中,可以采用如下方式 function sum(n) { return sum(n - 1) + n;} 但如今es6盛行,为了保持代码一致性,可以采用两种解决方式. 第一种,将thi ...
 - Shell脚本基础及基本常用命令
			
1.概述 脚本语言(shell.python):解释性语言,用解释器解释 运行效率低 | c.java:描述性语言,运行效率高 以.sh结尾会有高亮显示 执行: sh hello.sh 或者 chmo ...
 - 解决win10 cmd运行python弹出windows应用商店下python应用程序
			
方法一: 1.我一开始下载完python后,忘记下载到哪个位置,在win10底下输入框搜索python,点击打开文件所在位置,所在位置是python快捷键的位置,直接复制进行环境配置 配置完环境变量后 ...
 - Pytest 系列(24)- allure 环境准备
			
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html allure 和 pytest 相 ...