优化IE6的字符串代码

时间:2011-10-24 14:51:58

标签: javascript jquery optimization internet-explorer-6

我的网站上有一个页面,它使用JS通过字符串写出大量动态内容,然后将其解析为HTML。适用于所有浏览器,但IE6速度极慢。许多用户最终得到“脚本没有响应,你想中止吗?”消息。

我尝试使用数组而不是字符串来查看IE6是否能更好地处理这些,但我仍然可以获得相同的性能。我想知道是否有人对如何针对IE6进行优化提出任何明智的想法,或以其他方式阻止出现无响应的脚本消息。


function createTable(){

  var tableStr = "<table><tbody>";

  tableStr += "</tbody></table>";

  for(var x=0; x<contentData.length;x++){
     tableStr += createRow(contentData[x]);
  }

  $("#content").html(tableStr);
}

function createRow(data){
  var rowStr = "<tr>";
  rowStr += "<td>" + data.name + "</td>";
  rowStr += "<td>" + data.address + "</td>";
  rowStr += "<td>" + data.phone + "</td>";
  rowStr += "<td>" + data.fax + "</td>";
  rowStr += "</tr>";
  return rowStr;
}

4 个答案:

答案 0 :(得分:2)

查看this post,了解如何提高IE的Javascript性能

答案 1 :(得分:1)

function createTable(){

    //show loading message here since it will be a async load
    //$("#loadingMsg").show();

    var tableStr = "<table><tbody>";
    tableStr += "</tbody></table>";

    var rowCnt = 0;
    function buildTable(){

        //break up building table into 50 row chucks
        for(var x=0; x<50 && rowCnt<contentData.length;x++){
            tableStr += createRow(contentData[rowCnt]);
            rowCnt++;
        }

        //if we have not built the table, make a call to build next section
        //The setTimeout keeps the unresponsive message from appearing
        if(rowCnt<contentData.length){
            window.setTimeout(buildTable,0);
        }
        else{  //all rows have been added, set the table with the data
            //hide a loading message
            //$("#loadingMsg").hide();
            $("#content").html(tableStr);
        }
    }

    buildTable(); //kick off the table building

}

function createRow(data){
  var rowStr = "<tr>";
  rowStr += "<td>" + data.name + "</td>";
  rowStr += "<td>" + data.address + "</td>";
  rowStr += "<td>" + data.phone + "</td>";
  rowStr += "<td>" + data.fax + "</td>";
  rowStr += "</tr>";
  return rowStr;
}

答案 2 :(得分:0)

最佳解决方案是将用户指向http://www.ie6countdown.com/ - 由Microsoft创建的网站,以消除IE6的世界。当公司要求客户停止使用他们的产品时,我认为它说了很多。

但你可能无法做到这一点。在IE6中解决这种情况的最佳解决方案是在服务器上构建HTML;在IE6上,字符串操作和分配给innerHTML非常慢,没有“技巧”使它更快。

给你一个想法:我必须显示2MB的HTML。 IE6在不到一秒的时间内从磁盘加载了它。通过分配到innerHTML将相同的HTML添加到现有页面需要110秒。

或者您可以使用计时器拆分添加以避免阻止页面。请参阅此答案:Ways to increase performance when set big value to innerHTML

答案 3 :(得分:0)

您是否考虑过使用模板引擎?有许多可用于jQuery / javascript的模板引擎可能在这种情况下有所帮助。

Check out this stack overflow question