我的网站上有一个页面,它使用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;
}
答案 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的模板引擎可能在这种情况下有所帮助。