2015-07-09 4 views
3

Я ударил препятствие производительности при попытке создать экземпляр Collection, передав его непосредственно в списке Models или используя Collection.reset. Требуется около 6000ms, чтобы инициализировать его с помощью 4800 Models с примерно 200 атрибутами каждый. Это не так уж и больно, поэтому немного начинать, но, уйдя от этого, я попытался ускорить его, установив Collection.models непосредственно в массив models и установив Collection.length в length.Ловушки настройки Backbone Collection.models против использования Collection.reset

Вопрос, кроме начальной сортировки, в чем разница между этими двумя методами и где расходуются ресурсы? Я использую reset для инициализации коллекции, поэтому нет необходимости удалять обработчики событий на моделях или чистить что-либо.

Использование:

Попытки отобразить таблицу с бесконечной прокруткой, где каждая строка представляет собой модель и коллекция является коллекцией строк. Каждая строка может содержать около 200 столбцов. Это статическая таблица, за исключением одного столбца, который содержит флажок. Модели ничего не делают.

+0

Есть ли какие-либо прослушиватели, привязанные к таблице (например, чтобы повторно отобразить его при изменении списка моделей?) – rjz

+0

Есть только таблица, обрабатывающая его, так как я использую Handsontable и он сохраняет события для изменения его через свой редактор , – ZekeDroid

+0

Являются ли они очередными событиями или существует вероятность того, что элементы будут повторно отображены в ответ на модельные события (смотря на '' add "' конкретно, здесь) – rjz

ответ

2

Есть несколько больше коллекций, чем их models и length.

При назначении непосредственно мы обходим любое другое поведение (сортировка, проверка существования и т. Д.), Определенные коллекцией. Как reset, так и конструктор (который заканчивается делегированием reset) используют метод тяжелого типа коллекции set, чтобы обеспечить добавление новых моделей в соответствии с созданным поведением коллекции.

Прямое назначение может быть нормально, если модели всегда будут reset (то есть не добавляются или удаляются отдельно), но некоторые функции коллекции могут проявлять неожиданное поведение, если модели не являются set.

+0

Ну да, ясно, что использование сброса и конструктор делают больше, чем просто устанавливают эти два свойства. Мой вопрос был именно тем, что еще может произойти, что может замедлить инициализацию. Вы упомянули 'set', что там происходит, что сделало бы его тяжелым? – ZekeDroid

+0

Проверяя связанный источник, есть несколько потенциальных операций O (n) над новыми моделями в зависимости от того, какие опции поставляются. Можете ли вы предоставить свой конкретный прецедент (или jsperf)? – rjz

+0

Конечно, позвольте мне добавить прецедент. Кроме того, jsperf работает уже несколько дней:/так что если что-нибудь скрипка – ZekeDroid

Смежные вопросы