Фактическая таблица Vs. Стол Div - PullRequest
53 голосов
/ 11 апреля 2010

Это

<table>
    <tr>
        <td>Hello</td>
        <td>World</td>
    </tr>
</table>

Можно сделать с помощью:

<div>
    <div style="display: table-row;">
        <div style="display: table-cell;">Hello</div>
        <div style="display: table-cell;">World</div>
    </div>
</div>

Теперь, есть ли разница между этими двумя показателями с точки зрения производительности и / или скорости рендеринга, или они точно такие же?

Ответы [ 9 ]

57 голосов
/ 11 апреля 2010

Семантически некорректно моделировать таблицы данных с помощью div и вообще не имеет отношения к производительности, поскольку рендеринг выполняется мгновенно. Горлышком бутылки является JavaScript или чрезвычайно длинные страницы с множеством вложенных элементов, которые обычно в старые времена составляли 100 вложенных таблиц для создания макетов.

Используйте таблицы для того, для чего они предназначены, и div для того, для чего они предназначены. Свойства строк и ячеек дисплея должны использовать макеты div больше, чем создавать таблицы для представления данных. Посмотрите на них как на столбцы и строки макета, такие же, как те, которые вы можете найти в газете или журнале.

Производительность в том случае, если у вас есть пара байтов с примером div, lol:)

13 голосов
/ 11 апреля 2010

Во-первых, я бы не беспокоился о производительности, но больше о семантике. Если это табличные данные, используйте <table>. Если это просто блочные элементы, представляющие элемент макета, используйте <div>.

Если вы действительно, действительно, беспокоитесь о производительности, то ответ все равно будет зависеть от используемого клиента. Например, известно, что MSIE работает медленно при рендеринге таблиц. Вы должны хотя бы проверить себя в разных браузерах.

Если это беспокойство вызвано большими данными, я бы подумал о внедрении подкачки / фильтрации данных, которые вы собираетесь показывать.

5 голосов
/ 11 апреля 2010

Существует много дискуссий по этому поводу, и таблица div обычно получает преимущество из-за своей гибкости в стилизации. Вот одна ссылка - http://css -discuss.incutio.com / wiki / Tables_Vs_Divs

5 голосов
/ 11 апреля 2010

Вы действительно не должны беспокоиться о производительности при рендеринге таблиц. Даже если он есть, вы не заметите его, пока не появятся сотни (тысячи?) Таблиц. Используйте то, что вам удобнее.

4 голосов
/ 11 марта 2013

Я хотел бы упомянуть, что если вы используете структуру таблицы вместо div, то пользователи могут удерживать CMD (или ALT в окнах), чтобы выбрать определенную область данных из таблицы для копирования. Эти данные также очень легко вставляются в Excel и другие аналогичные программы для рабочих книг.

3 голосов
/ 11 апреля 2010

Таблица не будет отображаться, пока не будет загружена вся ее разметка. В то время как отдельные div будут отображены, как только их разметка будет загружена. Я предполагаю, что общее время будет таким же, но div даст ощущение лучшей производительности и большей отзывчивости.

2 голосов
/ 16 декабря 2015

По моему мнению, единственная причина использовать div для стилизации и настройки макета в зависимости от размера браузера. Если это не сломано, не исправляйте это. Div легче стилизовать, хотя с CSS.

Таблица: Плюсы - вы можете получить очень сложный макет именно так, как вы этого хотите. Более надежный. Консультации иногда становятся немного странными из-за сложного стиля CSS. не подходит для ответственных сайтов.

Divs: можно настроить на основе ввода в браузере, более гибким и простым в оформлении.

1 голос
/ 16 января 2014

Просто добавлю два моих цента на тему производительности.Для небольших (до 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>
1 голос
/ 11 апреля 2010

Если вы представляете табличные данные, то вам следует использовать таблицу - она ​​и связанные с ней элементы, имеющие всю необходимую семантику для представления таблицы данных. Беспорядка дивов нет.

...