Несколько CKEditor5 на одной странице - проблема производительности

Из бэкэнда я получаю массив объектов, содержащий текст в качестве одного из полей. Я хотел бы иметь возможность редактировать этот текст.

Пока что у меня есть что-то вроде этого:

 <div *ngFor="let speech of speeches; index as i">
      <div class="card">
        <div class="card-header">
          <div class="row">
           //some other input fields
        <div class="card-body">
          <ckeditor [(ngModel)]=speech.content
                    [editor]="editor"
                    name={{i}}
                    required
                    [config]="ckeConfig"
                    debounce="500"
                    (change)="onChange($event)">
          </ckeditor>
        </div>
      </div>
  </div>

Он отлично работает, когда массив речей до 30-40, но для большего он даже может вызвать сбой браузера.

Кто-нибудь сталкивался с этой проблемой и решил ее?

1 ответ

Решение

Каждый <ckeditor> Компонент занимает ~5 МБ памяти из-за внутренней абстрактной модели. Он слушает различные глобальные события, а также предоставляет собственную панель инструментов с различными кнопками, поэтому редактор также расширяет DOM.

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

  • Инициализируйте редактор только после нажатия на редактируемый элемент. Уничтожить старый редактор по событию размытия или щелкнуть по второму редактируемому элементу и инициализировать новый по заданному тексту - для этого потребуется создать простую обертку над элементом
  • Создайте некоторую нумерацию страниц, чтобы уменьшить количество редакторов, работающих на странице
  • Инициализируйте редакторы, когда они видимы, и уничтожайте их, когда они больше не видны.
Другие вопросы по тегам