common.html
6.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
<!DOCTYPE html>
<HTML>
<HEAD>
<TITLE> ZTREE DEMO - big data common</TITLE>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="../../../css/demo.css" type="text/css">
<link rel="stylesheet" href="../../../css/zTreeStyle/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="../../../js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="../../../js/jquery.ztree.core-3.5.js"></script>
<script type="text/javascript" src="../../../js/jquery.ztree.excheck-3.5.js"></script>
<script type="text/javascript" src="../../../js/jquery.ztree.exedit-3.5.js"></script>
<SCRIPT type="text/javascript">
<!--
var setting = {
check: {
enable: true
},
data: {
simpleData: {
enable: true
}
},
callback: {
onNodeCreated: onNodeCreated
}
};
var dataMaker = function(count) {
var nodes = [], pId = -1,
min = 10, max = 90, level = 0, curLevel = [], prevLevel = [], levelCount,
i = 0,j,k,l,m;
while (i<count) {
if (level == 0) {
pId = -1;
levelCount = Math.round(Math.random() * max) + min;
for (j=0; j<levelCount && i<count; j++, i++) {
var n = {id:i, pId:pId, name:"Big-" +i};
nodes.push(n);
curLevel.push(n);
}
} else {
for (l=0, m=prevLevel.length; l<m && i<count; l++) {
pId = prevLevel[l].id;
levelCount = Math.round(Math.random() * max) + min;
for (j=0; j<levelCount && i<count; j++, i++) {
var n = {id:i, pId:pId, name:"Big-" +i};
nodes.push(n);
curLevel.push(n);
}
}
}
prevLevel = curLevel;
curLevel = [];
level++;
}
return nodes;
}
var ruler = {
doc: null,
ruler: null,
cursor: null,
minCount: 5000,
count: 5000,
stepCount:500,
minWidth: 30,
maxWidth: 215,
init: function() {
ruler.doc = $(document);
ruler.ruler = $("#ruler");
ruler.cursor = $("#cursor");
if (ruler.ruler) {
ruler.ruler.bind("mousedown", ruler.onMouseDown);
}
},
onMouseDown: function(e) {
ruler.drawRuler(e, true);
ruler.doc.bind("mousemove", ruler.onMouseMove);
ruler.doc.bind("mouseup", ruler.onMouseUp);
ruler.doc.bind("selectstart", ruler.onSelect);
$("body").css("cursor", "pointer");
},
onMouseMove: function(e) {
ruler.drawRuler(e);
return false;
},
onMouseUp: function(e) {
$("body").css("cursor", "auto");
ruler.doc.unbind("mousemove", ruler.onMouseMove);
ruler.doc.unbind("mouseup", ruler.onMouseUp);
ruler.doc.unbind("selectstart", ruler.onSelect);
ruler.drawRuler(e);
},
onSelect: function (e) {
return false;
},
getCount: function(end) {
var start = ruler.ruler.offset().left+1;
var c = Math.max((end - start), ruler.minWidth);
c = Math.min(c, ruler.maxWidth);
return {width:c, count:(c - ruler.minWidth)*ruler.stepCount + ruler.minCount};
},
drawRuler: function(e, animate) {
var c = ruler.getCount(e.clientX);
ruler.cursor.stop();
if ($.browser.msie || !animate) {
ruler.cursor.css({width:c.width});
} else {
ruler.cursor.animate({width:c.width}, {duration: "fast",easing: "swing", complete:null});
}
ruler.count = c.count;
ruler.cursor.text(c.count);
}
}
var showNodeCount = 0;
function onNodeCreated(event, treeId, treeNode) {
showNodeCount++;
}
function createTree () {
var zNodes = dataMaker(ruler.count);
showNodeCount = 0;
$("#treeDemo").empty();
setting.check.enable = $("#showChk").attr("checked");
var time1 = new Date();
$.fn.zTree.init($("#treeDemo"), setting, zNodes);
var time2 = new Date();
alert("节点共 " + zNodes.length + " 个, 初始化生成 DOM 的节点共 " + showNodeCount + " 个"
+ "\n\n 初始化 zTree 共耗时: " + (time2.getTime() - time1.getTime()) + " ms");
}
$(document).ready(function(){
ruler.init("ruler");
$("#createTree").bind("click", createTree);
});
//-->
</SCRIPT>
</HEAD>
<BODY>
<h1>一次性加载大数据量</h1>
<h6>[ 文件路径: bigdata/common.html ]</h6>
<div class="content_wrap">
<div class="zTreeDemoBackground left">
<ul>
<li><span>调整总节点数,测试加载速度:</span>
<div id="ruler" class="ruler" title="拖拽可调整节点数">
<div id="cursor" class="cursor">5000</div>
</div>
<div style="width:220px; text-align: center;">
<span>checkbox</span><input type="checkbox" id="showChk" title="是否显示 checkbox" class="checkbox first" />
[ <a id="createTree" href="#" title="初始化 zTree" onclick="return false;">初始化 zTree</a> ]
</div>
</li>
</ul>
<ul id="treeDemo" class="ztree"></ul>
</div>
<div class="right">
<ul class="info">
<li class="title"><h2>1、大数据量加载说明</h2>
<ul class="list">
<li>1)、zTree v3.x 针对大数据量一次性加载进行了更深入的优化,实现了延迟加载功能,即不展开的节点不创建子节点的 DOM。</li>
<li class="highlight_red">2)、对于每级节点最多一百左右,但总节点数几千甚至几万,且不是全部展开的数据,一次性加载的效果最明显,速度非常快。</li>
<li class="highlight_red">3)、对于某一级节点数就多达几千的情况 延迟加载无效,这种情况建议考虑分页异步加载。</li>
<li class="highlight_red">4)、对于全部节点都展开显示的情况,延迟加载无效,这种情况建议不要全部展开。</li>
<li>5)、显示 checkbox / radio 会造成一定程度的性能下降。</li>
<li>6)、利用 addDiyDom 功能增加自定义控件会影响速度,影响程度受节点数量而定。</li>
<li>7)、利用 onNodeCreated 事件回调函数对节点 DOM 进行操作会影响速度,影响程度受节点数量而定。</li>
</ul>
</li>
<li class="title"><h2>2、setting 配置信息说明</h2>
<ul class="list">
<li>不需要进行特殊的配置</li>
</ul>
</li>
<li class="title"><h2>3、treeNode 节点数据说明</h2>
<ul class="list">
<li>对 节点数据 没有特殊要求,用户可以根据自己的需求添加自定义属性</li>
</ul>
</li>
</ul>
</div>
</div>
</BODY>
</HTML>