实际表格 Div表

Ben*_*Ben 54 html css performance html-table

这个

<table>
    <tr>
        <td>Hello</td>
        <td>World</td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

可以这样做:

<div>
    <div style="display: table-row;">
        <div style="display: table-cell;">Hello</div>
        <div style="display: table-cell;">World</div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

现在,这两者在性能和/或渲染速度方面是否存在差异,或者它们是否相同?

Ivo*_*bev 57

使用div模拟数据表在语义上是不正确的,并且通常与性能无关,因为呈现是即时的.瓶颈来自JavaScript或具有大量嵌套元素的极长页面,这些元素通常在过去是100个嵌套表格,用于创建布局.

使用表格来表达它们的含义,并使用表格来表达它们的含义.显示表行和单元属性将更多地利用div布局,然后为数据表示创建表.将它们视为与报纸或杂志中的布局列和行相同的布局列和行.

性能方面,你有几个字节与div示例,大声笑:)

  • 你对响应能力怎么说?因为除了添加水平滚动条之外,没有任何表元素是远程响应的 (2认同)
  • @PirateApp你的意思是响应不同的屏幕尺寸?数据表还可以拉伸或使用正确的样式换行内容。如果它是一个实际的数据表 - 您唯一应该使用 &lt;table&gt; 的东西 - 这就是您想要的。 (2认同)

Bal*_*usC 13

首先,我不会担心性能,而是更多关于语义.如果是表格数据,请使用<table>.如果它只是表示布局元素的块元素,请使用<div>.

如果你真的,真的担心性能,那么答案仍然取决于所使用的客户端.例如,已知MSIE在表格渲染中很慢.你应该至少在不同的浏览器中测试自己.

如果这种烦恼是由大数据引起的,那么我会考虑引入您要显示的数据的分页/过滤.


Dan*_*n H 6

只是在性能这个话题上投入我的两分钱。对于小型表(例如 100 行以下),使用 DIV 不会对性能产生太大影响。

另一方面,如果您想生成很长的数据集,那么您绝对应该使用传统的 HTML 表格。

简要说明:

这一切都源于我公司的项目,我在其中编写了一个 Javascript 类,根据 SQL 数据按程序生成表格(这是一种报告模块)。不管怎样,我喜欢 DIV,所以我把它写成基于 DIV 的,就像 OP 示例一样。

在经历了一些可怕的性能(特别是在 IE8 中)之后,我决定仅使用表格来重写它,因为总的来说,它是非常简单的表格数据。无论出于何种原因,在我的 Chrome 机器上,表格的速度大约是我的两倍。Safari 也是如此。

也就是说,由于我无法提供我的工作代码,所以我编写了一些基准测试,让您尝试其中一种方法或方法。您会发现它们几乎相同,只是一个使用带有样式的 div 来模仿表格的标准行为,而另一个只是一张老式的学校表格。

唯一真正的区别是生成的元素的类型,因此这是我在时间增量中唯一可以解释的事情。我确信它会因浏览器而异,但在我看来,表格元素更快。

<script type="text/javascript">
var time_start = new Date().getTime();
var NUM_ROWS = 5000;
var NUM_CELLS = 8;
var OLD_STYLE = 1; // toggle 0/1, true/false
if(OLD_STYLE)
{
    var table = document.createElement('table');
    document.body.appendChild(table);
    for(var a = 0; a < NUM_ROWS; a++)
    {
         var row = document.createElement('tr');
         for(var b = 0; b < NUM_CELLS; b++)
         {
             var cell = document.createElement('td');
             cell.innerHTML = 'cell';
             row.appendChild(cell);
         }
         table.appendChild(row);
     }
}
else
{
    var table = document.createElement('div');
    document.body.appendChild(table);
    for(var a = 0; a < NUM_ROWS; a++)
    {
        var row = document.createElement('div');
        row.setAttribute('style','display: table-row; padding: 2px;')
        for(var b = 0; b < NUM_CELLS; b++)
        {
            var cell = document.createElement('div');
            cell.setAttribute('style','display: table-cell; padding: 2px');
            cell.innerHTML = 'cell';
            row.appendChild(cell);
        }
        table.appendChild(row);
    }
}
var dt = (new Date().getTime() - time_start)/1000;
console.log( dt + ' seconds' );
</script>
Run Code Online (Sandbox Code Playgroud)

  • “我在制作节点时附加节点”——这会大大减慢速度。相反,您应该首先构建表格,然后将其附加到文档中。否则,影响文档的每个更改都会导致浏览器再次重新计算布局。如果先构建表/人造表,然后在完成后将其附加到文档中,时间差是多少? (2认同)

min*_*gos 5

你真的不应该担心表格渲染的表现.即使有一个,在你要显示数百(数千?)个表之前,你也不会注意到它.使用您觉得更舒适的东西.


Han*_*seh 5

关于此的讨论很多,并且div表由于其样式的灵活性而通常占据上风。这是一个链接-http://css-discuss.incutio.com/wiki/Tables_Vs_Divs

  • 您的两个链接都指向同一页面。 (7认同)
  • 我无法访问这篇文章中的链接,但我想访问,因为我是这个主题的新手,并且想使用正在讨论的面向“div”的技术。还有其他我可以使用的参考吗? (3认同)