同事写了段JQuey的代码,在某些机器上,会出现IE假死的性能问题。我测试了一下代码花费的时间,在我的机器上,会花费600多毫秒,但在某些机器上会花费6秒多(10倍的增长),这样就导致了IE的假死。而且发现与IE版本无关,在大多数机器上会都只需要600多毫秒,不过CPU会有10%以上的瞬间提长。先来看看出问题的代码:
其实这段代码很简洁,只是将用Ajax取过来的数据替换一部分当前页面的数据,但性能确实不够好。开始找原因,看看到底是什么慢?
将此行代码分拆,逐元素去分析各自花费的时间:$(".eXtremeTable") 花费20毫秒左右;$(html).find(".eXtremeTable") 花费200毫秒左右;replaceWith() 花费10毫秒左右;不难定位到是由于$(html).find(".eXtremeTable")这种方式引起的。(这都是在我机器上的测试结果,而且每次可能不完全一样)简单的可以这样优化:
但仔细想想,这样仍然会造成在某些机器上2秒以上的时间消耗,照样是不可接受的。遂采用比较原始的办法,修改源程序如下:
现在此段代码花费的时间几乎为0毫秒。OK,IE再也不假死了。问题分析:原因应该就出在jQuery(html)这个方法上,官方文档解释如下:
因为要构建一个完整的DOM,所以需要花费较长的时间。至于为何在某些机器上出现高达6秒多的时间消耗,百思不得其解,请高手指点!
新闻热点
疑难解答