html里jquery的append效率问题
append的第一次追加效率低吗?如下是分析引擎搜索结果页面的部分代码功能:获取源码里的body之内的元素functionsch_out_div_append(html_...
append的第一次追加效率低吗?
如下是分析引擎搜索结果页面的部分代码
功能:获取源码里的body之内的元素
function sch_out_div_append(html_src) {
try {
var body_src = get_body_inerHtml(html_src);
write_log_dbg("sch_ajax_succ af get_body_inerHtml " + getTimeFix())
$("#sch_out").append(body_src);
write_log_dbg("sch_ajax_succ af sch_out append" + getTimeFix())
} catch (e) {
alert(e.message);
}
}
得到的日志时间是:
sch_ajax_succ b4 20140930140535
sch_ajax_succ af get_body_inerHtml 20140930140536
sch_ajax_succ af sch_out append20140930140558
sch_ajax_succ af append 20140930140558
sch_ajax_succ b4 20140930140558
sch_ajax_succ af get_body_inerHtml 20140930140558
sch_ajax_succ af sch_out append20140930140558
sch_ajax_succ af append 20140930140558
sch_ajax_succ b4 20140930140558
sch_ajax_succ af get_body_inerHtml 20140930140558
sch_ajax_succ af sch_out append20140930140558
sch_ajax_succ af append 20140930140558
--------------------------------------------------------------
sch_ajax_succ b4 20140930140606
sch_ajax_succ af get_body_inerHtml 20140930140606
sch_ajax_succ af sch_out append20140930140606
sch_ajax_succ af append 20140930140606
sch_ajax_succ b4 20140930140606
sch_ajax_succ af get_body_inerHtml 20140930140606
sch_ajax_succ af sch_out append20140930140607
sch_ajax_succ af append 20140930140607
sch_ajax_succ b4 20140930140607
sch_ajax_succ af get_body_inerHtml 20140930140607
sch_ajax_succ af sch_out append20140930140607
sch_ajax_succ af append 20140930140607
=======
结论是第一次append耗时较长,请问为什么?
功能:获取源码里的body之内的元素,
并append到id为sch_out 的元素中
多次测试发现,第一次append要耗时22秒,
请问有熟悉网页的朋友知道这是为什么? 展开
如下是分析引擎搜索结果页面的部分代码
功能:获取源码里的body之内的元素
function sch_out_div_append(html_src) {
try {
var body_src = get_body_inerHtml(html_src);
write_log_dbg("sch_ajax_succ af get_body_inerHtml " + getTimeFix())
$("#sch_out").append(body_src);
write_log_dbg("sch_ajax_succ af sch_out append" + getTimeFix())
} catch (e) {
alert(e.message);
}
}
得到的日志时间是:
sch_ajax_succ b4 20140930140535
sch_ajax_succ af get_body_inerHtml 20140930140536
sch_ajax_succ af sch_out append20140930140558
sch_ajax_succ af append 20140930140558
sch_ajax_succ b4 20140930140558
sch_ajax_succ af get_body_inerHtml 20140930140558
sch_ajax_succ af sch_out append20140930140558
sch_ajax_succ af append 20140930140558
sch_ajax_succ b4 20140930140558
sch_ajax_succ af get_body_inerHtml 20140930140558
sch_ajax_succ af sch_out append20140930140558
sch_ajax_succ af append 20140930140558
--------------------------------------------------------------
sch_ajax_succ b4 20140930140606
sch_ajax_succ af get_body_inerHtml 20140930140606
sch_ajax_succ af sch_out append20140930140606
sch_ajax_succ af append 20140930140606
sch_ajax_succ b4 20140930140606
sch_ajax_succ af get_body_inerHtml 20140930140606
sch_ajax_succ af sch_out append20140930140607
sch_ajax_succ af append 20140930140607
sch_ajax_succ b4 20140930140607
sch_ajax_succ af get_body_inerHtml 20140930140607
sch_ajax_succ af sch_out append20140930140607
sch_ajax_succ af append 20140930140607
=======
结论是第一次append耗时较长,请问为什么?
功能:获取源码里的body之内的元素,
并append到id为sch_out 的元素中
多次测试发现,第一次append要耗时22秒,
请问有熟悉网页的朋友知道这是为什么? 展开
4个回答
展开全部
append的实现就是 innerHtml
相当于动态改变页面内容,要重新绘制。
你说的要22秒,我也太离谱了吧!!!!
以前写了一个大页面内容较多的,就是是5、6秒。
所以如果页面没有动态需求的话,尽量不要用append。
还要Append 你可以一块一块的加,比如:
<div id=sch_out>
<div id=s1></div>
<div id=s2></div>
<div id=s3></div>
....
</div>
$("#sch_out").append(s4);
$("#sch_out").append(s5);
......
这样页面改动较小,速度较快。
日志的时间,可以多加一个变量,打印差值就可以了,这样比较直观。
相当于动态改变页面内容,要重新绘制。
你说的要22秒,我也太离谱了吧!!!!
以前写了一个大页面内容较多的,就是是5、6秒。
所以如果页面没有动态需求的话,尽量不要用append。
还要Append 你可以一块一块的加,比如:
<div id=sch_out>
<div id=s1></div>
<div id=s2></div>
<div id=s3></div>
....
</div>
$("#sch_out").append(s4);
$("#sch_out").append(s5);
......
这样页面改动较小,速度较快。
日志的时间,可以多加一个变量,打印差值就可以了,这样比较直观。
追问
谢谢你的回答
你的分块append应该会影响效率的,具体我没测试,但是有网文分析过
日志时间本来是文件后缀用的,这边调试就将就用了
我在多次测试后
发现连续两次以内的append的基本就是1秒
而连续3次或以上的第一次append就要22秒,其后的append又正常了
实在是想不通,如果有熟悉的请指点
非常谢谢所有回复的同学
----又测试,不一定连续2次以内的append就正常
有可能也是需要22秒
求高人指点
展开全部
可能因为 body_src 的HTML层级结构太复杂了,append 的速度只适合少量的小层级的DOM插入
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你说的是毫秒吧。我在Chrome里测试的结果,也没有那么大的差距啊。
for (i = 0; i < 20; i++) {
$('.guide-msg').append('<li>Item' + i + '</li>');
console.log("i=" + i + ":"+ (new Date).getMilliseconds());
}
>>>>>>>>>>>>>
i=0:121
i=1:122
i=2:123
i=3:123
i=4:124
i=5:125
i=6:126
i=7:126
i=8:128
i=9:129
i=10:129
i=11:130
i=12:130
i=13:131
i=14:131
i=15:132
i=16:132
i=17:133
i=18:133
i=19:134
for (i = 0; i < 20; i++) {
$('.guide-msg').append('<li>Item' + i + '</li>');
console.log("i=" + i + ":"+ (new Date).getMilliseconds());
}
>>>>>>>>>>>>>
i=0:121
i=1:122
i=2:123
i=3:123
i=4:124
i=5:125
i=6:126
i=7:126
i=8:128
i=9:129
i=10:129
i=11:130
i=12:130
i=13:131
i=14:131
i=15:132
i=16:132
i=17:133
i=18:133
i=19:134
追问
非常谢谢你的回复
你看我下面回复者的追问就知道
我也很奇怪
不明原因才问你们高手的
追答
写法很重要。
firefox下刚才的写法需要17.281ms, 内部调用函数次数600回
而下面这种写法需要7.048ms, 内部调用函数次数125回
这就是差距----------------------------------------------------
var toInsert = "";
for (i = 0; i Item' + i + '';
console.log("i=" + i + ":"+ (new Date).getMilliseconds());
}
$('.guide-msg').append(toInsert);
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我想是不是第一次append,后台做了很多初始化工作,比如实例化了一个string类型,初始化string的大小长度,也不是很懂这个
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询