Почему innerHTML = “” медленный в Firefox

Проверьте следующий код, который добавит столбец attendance для каждой строки:

$(document).ready(function() {
  $('select[name="students_class_id"]').on('change', function() {
    var classID = $(this).val();

    if (classID) {
      $.ajax({
        url: '/myform/ajax/' + classID,
        type: "GET",
        dataType: "json",
        success: function(data) {
          var attendance = `<div class="form-group">
                        <select class="form-control" id="gender" name="attendance[]">
                            <option>Present</option>
                            <option>Absent</option>
                            <option>Leave</option>
                        </select>
                    </div>`;
          var markup = '';

          $.each(data, function(key, value) {
            markup += '<tr> <td><input type="hidden" value="'+value.id+'" name="id[]">' + value.id + '</td> <td>' + value.student_id + '</td> <td>' + value.first_name + ' ' + value.last_name + '</td> <td> ' + attendance + '</td> <tr>';
          });

          $('#studentsData tbody').html(markup);

          var thead_markup += '<tr> <th>A</th> <th>B</th> <th>C</th> <td>D</th> <tr>';
          $('#studentsData thead').html(thead_markup);
        }
      });
    }
  });
});
6
задан KooiInc 4 March 2009 в 08:28
поделиться

2 ответа

В то время как я не уверен в innerHTML =, "" Вы не учли тот возможно быстрый appoach использование DocumentFragments для вставки в DOM: Как шоу John Resig.

Как Ólafur Waage уже упомянул, даже при том, что innerHTML быстрее в большом количестве ситуаций, так как это не часть никакого стандарта W3C, причуды, намного более вероятно, были бы представлены затем, если бы они были. Не сказать innerHTML не defacto стандарт в современных браузерах.

Это сообщение в блоге, кажется, указывает, что Firefox проводит много времени, моясь после себя при использовании innerHTML для удаления элементов.

В некоторых браузерах (прежде всего, Firefox), хотя innerHTML обычно намного быстрее, чем методы DOM, он проводит непропорциональное количество времени, убирающее существующие элементы по сравнению с созданием новых. Зная это, мы можем объединить скорость уничтожения элементов путем удаления их родителя с помощью стандартных методов DOM с созданием новых элементов с помощью innerHTML.

14
ответ дан 8 December 2019 в 14:47
поделиться

innerHTML не является частью спецификации W3C DOM.

Это никогда не должно использоваться для записи частей таблицы — методы W3C DOM должны использоваться для того — хотя это может использоваться для записи всей таблицы или содержания ячейки.

Как нет никакой общедоступной спецификации для этого свойства, реализации отличаются широко. Например, когда текст введен во ввод текста, IE изменит атрибут значения innerHTML свойства входа, но браузеры Геккона не делают.

Для тех, которые желают придерживаться стандартов, вот один набор функций JavaScript, предлагающих сериализировать или проанализировать XML чтобы к содержанию элемента набора, определенному как строка (строки) через DOM или получающий содержание элемента, полученное из DOM как строка.

Источник - Mozilla Dev

2
ответ дан 8 December 2019 в 14:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: