Internet Explorer

时间:2017-05-31 10:51:44

标签: javascript html internet-explorer internet-explorer-9 reflow

我必须动态构建一个包含+450行/ +90列的表,并在Internet Explorer中显示它。我在过去的两天里一直在大力优化,最后创建了一个表行的集合作为一个很长的字符串,并将其分配给表的tBody的innerHTML。

它在Chrome / Mozilla中工作正常,重排需要大约0.2秒,但在Internet Explorer中它很慢。渲染需要大约4秒钟(我说“约”因为如果控制台打开(用于时间测量),渲染需要19秒)。另一个问题是IE9及以下版本甚至不支持innerHTML。所以问题是:在IE9中尽可能快地呈现大量HTML的最快方法是什么? HTML示例:

<tr class="data-row" ><td class="hidden" style="width: -21px; padding: 
10px;">"1"</td><tdclass="structureCatagory" style="width: 119px; padding: 
10px;">"0381"</td><td class="structureCatagory" style="width: 139px; 
padding: 10px;">"Some text"</td><td class="structureCatagory" 
style="width: 139px; padding: 0px;"><img src="/Content/Images/info.png" 
onclick="Interface.OnImageClicked($(this))" ></td>...

等等共4178521个字符 使用Javascript:

function Update() {
    var displayData = Model.GetData();
    if (displayData == undefined || displayData.length == 0)
        return false;
    var rows = "", len = displayData.length;
    for (var i = 0; i < len; i++) rows += GetRow(displayData[i]);
    //until here it's very fast
    GlobalQueries.dataTableBody[0].innerHTML = rows;
    //^ this line takes alot of time
    return true;
}

提前致谢!
编辑:表格本身:

<div class="grid">
    <table class="fixed">
        <tbody></tbody>
    </table>
</div>
<style>
    .grid { margin-top: 240px; margin-left: 10px; }
    .grid td, .header-row td { border: 1px solid black; }
    table.fixed { table-layout: fixed; }
</style>

1 个答案:

答案 0 :(得分:1)

我认为只有懒惰渲染才能帮到你。这样,您将减少页面上的HTML节点数量并使其更轻松。您不需要渲染屏幕上看不到的行...

有jQuery,React,Polymer等等的例子。

为了使绘画看起来更快,您可以批量插入,而不是一次插入整个表,而是使用requestAnimationFrame等方法插入块。