Jquery-append函数花费了太多时间
Jquery - append function takes too much time
我正在尝试将大数据插入DOM。我使用jquery ajax方法从DB中检索数据。我收到的数据是ul和li的列表,其中有大约6k条记录。收到的数据,我需要插入到树状结构中。下面是我使用ajax方法并尝试使用append函数插入接收到的数据的代码。append函数在插入时会花费大量时间。有办法提高性能吗?
$.ajax({
type: "POST",
async: true,
url: "TreeView.aspx/GetTreeOnDemand",
data: '{labelTitle: "' + $(load)[0].title + '" }',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
if(result.d) {
$(that).siblings().remove();
$(that).closest("li").append(result.d);
$(that).parent().children('ul').slideToggle('fast');
} else {
$(that).parent().removeClass('parent active');
$(image).insertBefore(that)
}
}
});
到目前为止,我已经尝试将接收到的数据推送到数组中,然后附加数组,但没有看到任何改进。请帮助
如果您可以选择将数据库结构简化到最低限度(可能只是一个由id、title和Name组成的json格式字符串),这可能会有很大帮助,然后您可以使用诸如"createDocumentFragment and
createElement"之类的本地javascript方法来创建和附加列表项(首先是文档片段,然后是整个内容同时到目标父元素。)
也就是说,我创建了你所附加数据的简化版本,去掉了内联样式,删除了不需要的元素,并用CSS对所有内容进行了样式设置,并在js中而不是内联中附加了点击处理程序:
演示
有了这么多记录,自然不会立即添加,但您可以尝试以下几点:1。首先只追加100条左右的记录,这样我们一开始就可以立即显示一些内容,然后再追加其余内容。2.添加某种"加载"动画,这甚至可以提供一些创造力的机会。3.不要加载所有记录——包括分页或ajax的"加载更多"按钮。
var that = '.test1';
var jsonData = {
'd': buildVeryLongData()
};
function buildVeryLongData() {
var str = '<ul class="tree">';
for (var i = 0; i < 6000; i++) {
str += '<li id="' + i +'"><label title="ABC/XYZ">Name</label></li>';
}
str += '</ul>'
return str;
}
function HandleClick(el) {
// Handle Click
console.log(el);
}
$.ajax({
type: "POST",
async: true,
url: "/echo/json/",
data : { json: JSON.stringify( jsonData ) },
dataType: "json",
success: function (result) {
if(result.d)
{
$(that).siblings().remove();
$(that).closest("li").append(result.d);
$(that).parent().children('ul').slideToggle('fast');
// attach handler here
$('.tree label').on('dblclick', function () {
HandleClick(this);
});
}
else
{
$(that).parent().removeClass('parent active');
//$(image).insertBefore(that)
}
}
});
CSS:
// example
.tree li:before {
content: url('../1/ig_treeL.gif');
display: inline-block;
width: 10px;
height: 10px;
vertical-align: middle;
}
// example
.tree label {
vertical-align: middle;
}
HTML:
<ul>
<li class="test1"></li>
</ul>
相关文章:
- 一个html元素的克隆次数太多
- offsetLeft Javascript属性需要更多时间
- ExtJS类的最佳实践最终导致了太多的.JS文件.性能怎么样
- 使用.slice分页选择了太多项目
- 堆排序实现进行了太多比较
- 如何在不每秒调用太多次的情况下通过Soundcloud解析api进行循环
- 如何修复“;太多递归”;ReactJS中的错误
- 为什么fs.readFile在windows上花费太多时间
- 如何避免webGL着色器加载给cpu带来太多负载
- node.js 需要太多的 TCP 套接字
- JavaScript循环迭代太多
- 函数崩溃,因为太多迭代jQuery
- 为什么不'当用户输入空格或字符太多/不够时,此函数会发出window.alert
- Angularjs:为什么重复做太多的工作
- Jquery-append函数花费了太多时间
- 花了太多时间才做出承诺's则起作用
- MongoDB bulk.execute()在无序插入时花费了太多时间
- Jquery加载函数,如果花费太多时间,会出现错误信息
- 动态设置谷歌脚本时间驱动的计时器和太多的计时器错误在gmail
- ng重复渲染数据花费了太多时间