Я создаю своего рода инструмент управления проектами, используя PHP на стороне сервера и jQuery плюс пользовательский MVC в javascript.огромные списки HTML из проблемы производительности JSON
У меня есть всплывающее окно, чтобы помочь пользователю добавить людей в проект. Когда он появляется, пользователь должен выбрать группу (скажем, группу студентов), а затем он может выбрать профили, чтобы добавить их в текущий проект.
Я проверил его с группами по 70-120 человек, и он работает с небольшой задержкой.
НО, КОГДА Я ТЕСТИРОВАЛ БОЛЬШУЮ ГРУППУ 1000 ЛЮДЕЙ, время обновления настолько велико, что Хром спрашивает меня, хочу ли я остановить сценарий или подождать больше времени ... Это не приятно для опыта iser !!!
данных происходит от сервера в формате JSON:
{ "пользователи": [{ "UID": "Cortes", "Имя": "Франсуа", "фамилия": "CORTES", "почта" : "..."}],/* 1000 пользовательских записей больше * /}
и форматирование данных в этом формате HTML (Настраиваемый шаблон псевдо Усы)
<li>
<div class="wrapper">
<p class="title"> {{firstname}} {{lastname}} {{mail}} </p>
<p> {{uid}} </p>
<p> <input type="checkbox" id="select-{{uid}}" /> </p>
</div>
</li>
JQuery используется для создания списка и добавить некоторых слушателей - выбрать/снять выделение из состояния локального хранения до всплывающей проверки - вид выделения на зависающей мыши на каждый элемент списка [код] [код] Мой вопрос: КАК СДЕЛАТЬ ПРОИЗВОДИТЕЛЬНОСТЬ УТЕЧИТЬ И КАК ИСКАТЬ?
Конечно, код немного уродливый и трудноуправляемый, и, конечно, снова я хочу исправить эту проблему ... может кто-нибудь мне помочь?
EDIT: Спасибо за ваши комментарии и ваши сообщения.
Немного больше объяснений: обычно группы занимают 50-200 человек. Группа из 1000 человек - это всего лишь 90% общего, временного и из-за некоторых технических и управленческих соображений. Но это отличный вызов для обеспечения исполнения и обеспечения реактивности пользовательского интерфейса.
На данный момент он терпит неудачу испытания ...
@ Крис: Я строй контроллера тестов в PHP время генерации и размера JSON
@Dandavis: Да, на данный момент я сделай это. Я беру общий шаблон DIV со страницы с jQuery и повторяю 1000 раз по данным JSON, javascript-строку, заменяющую подстановочные знаки {{example-data-name}} своим примером-значением данных, затем я вставляю его в DOM (jQuery), а затем я связываю прослушиватели событий (jQuery тоже) ... Уродливый код, я согласен, но самодельный, и никоим образом и не нужно реорганизовать его с помощью BackBone или Knockout ...
documentFragment? ну ... нужно копать еще больше!
@ ajax81: статические JSON кэшируются при загрузке страницы ??? почему бы и нет ... возможно, самый простой способ изменить существующую работу и усилия!
@Alberto: полезные советы, которые я имею в виду. Как я уже отмечал выше, я начинаю свои тесты сегодня днем
Я чувствую, что PHP делает свою работу правильно (относительно размера данных и скорости генерации), но m настраиваемый подход к шаблонам неэффективен для обработки всех данных!
Нет необходимости разбивать данные на страницы, поскольку пользователь обычно прокручивает список небольших (50) и средних (120) записей. 1000 - стресс-тест. Это происходит только в летний период (праздники), но если я буду успешным, ежедневный опыт пользователя будет лучше и защищен от сбоев в системах с низкой производительностью.
С уважением.
EDIT и решение вопроса
PHP
Я протестированные ТГц PHP скрипт: 1000 извлечения записей и формирование JSON меньше 0,25 секунд времени выполнения и менее 100ko долго ... поэтому никакой конкретной проблемы на стороне сервера.
Я сделал некоторые оптимизации на стороне сервера, чтобы ограничить базу данных и запрос LDAP с помощью некоторого кэширования в PHP, чтобы ограничить избыточность и сетевой трафик из моего приложения.
Javascript
Затем я изменил использование шаблонов: теперь цикл из 1000 записей в формате JSON, оценка шаблона и добавления результата в необработанном HTML строки, следующий прикрепление LI элементов в UL.
На данный момент этот список визуально готов для пользователя.
Позже я снова зациклился на данных JSON для привязки обработчиков событий (установите флажок, щелкните по окружающему DIV и наведите указатель мыши на DIV с указателем ...), но список пока отображается!
Задержка при освежающем списке видна, но очень кратковременная, менее 1,5 секунд ... Возможно, я добавлю значок песочных часов, чтобы предотвратить повторный клик пользователя во время ожидания списка.
так синхронизации тест успех В регулярном использовании, списки не будут превышать 150 человек, так что, если это нормально для 1000 ... это нормально для меня :-)
Спасибо много (@ все) для помощи.
Вы приурочили фактический запрос GET для данных человека, чтобы определить, передает ли проблема список? –
Хмм. templating очень быстро, будь то 12 или 12 000. вы добавляете/.html() число 1000 тегов LI в цикле? если это так, переключитесь на temp document.createDocumentFragment() и наслаждайтесь превосходной производительностью на порядок. – dandavis