为什么IE8在这个javascript执行上比IE9快?

为什么IE8在这个javascript执行上比IE9快?,javascript,performance,internet-explorer-8,internet-explorer-9,Javascript,Performance,Internet Explorer 8,Internet Explorer 9,就像在标题中一样,我有一个非常不寻常的问题。我正在开发一个web应用程序,它的视图在IE8中呈现得相当快,在IE9中呈现得要慢得多 Profiler说最耗时的函数是: function handleTree(request, rootTagName) { var text = request.responseText; var startIndex = text.indexOf("<" + rootTagName + ">"); var endIndex = text.i

就像在标题中一样,我有一个非常不寻常的问题。我正在开发一个web应用程序,它的视图在IE8中呈现得相当快,在IE9中呈现得要慢得多

Profiler说最耗时的函数是:

function handleTree(request, rootTagName) {
  var text = request.responseText;
  var startIndex = text.indexOf("<" + rootTagName + ">");
  var endIndex = text.indexOf("</" + rootTagName + ">");
  var newHtml = text.substring(startIndex + rootTagName.length + 2, endIndex);
  var treeContainer = getCachedElement("tree");
  treeContainer.innerHTML = newHtml;
  AjaxRequestEnd();

}
执行暂停一段时间。treeContainer是一个空的div元素。插入的html非常大,所以我想这是因为构建了dom树

但是,在IE调用这个函数之前,它仍然会挂起几秒钟。正如我提到的,在IE8上,一切都运行得更快。有什么想法吗


编辑:我知道我没有提供太详细的描述,但我不知道在这种情况下还有什么是重要的

这可能是您在分配
innerHTML
属性之前正在进行的字符串操作。正则表达式可能会加快速度:

function handleTree(request, rootTagName) {
  var treeContainer = getCachedElement("tree");

  treeContainer.style.display = "none";
  treeContainer.innerHTML = request.responseText
    .replace(new RegExp("<" + rootTagName + ">(.+?)</" + rootTagName + ">"), "$1");
  treeContainer.style.display = "";

  AjaxRequestEnd();
}
函数handleTree(请求,根标记名){
var treeContainer=getCachedElement(“树”);
treeContainer.style.display=“无”;
treeContainer.innerHTML=request.responseText
.替换(新的RegExp(“(.+?)”)”、“$1”);
treeContainer.style.display=“”;
AjaxRequestEnd();
}
如果这没有帮助,那么在IE9解析HTML时,您可能会遇到性能问题

另一个堆栈溢出问题也值得一读:


treeContainer
(如果可见并附加到文档中)可能会受到不同的处理。尝试将其显示样式设置为“否”,然后设置内部HTML,然后将显示设置回空字符串以查看是否有差别。

是您正在推入元素的HTML有效吗?是的,没有错误记录。请不要使用字符串操作来解析HTML,请考虑使用DOMAPI。我将在访问正确的计算机时测试这些(可能需要一段时间)。。。不管怎样,我测试了一下,没有成功。仍然很慢。在那些版本的Internet Explorer中解析HTML可能会出现性能问题。好的,谢谢。这是可能的,但我不确定,我也看不到任何方法来测试它。我将在这里用避免ajax来解决这个问题。
function handleTree(request, rootTagName) {
  var treeContainer = getCachedElement("tree");

  treeContainer.style.display = "none";
  treeContainer.innerHTML = request.responseText
    .replace(new RegExp("<" + rootTagName + ">(.+?)</" + rootTagName + ">"), "$1");
  treeContainer.style.display = "";

  AjaxRequestEnd();
}