#tooltip #xpages #xpages-extlib
#всплывающая подсказка #xpages #xpages-extlib
Вопрос:
У меня есть большая XPage с примерно 170 полями на ней. У меня есть всплывающие подсказки для значительного количества полей. Всплывающая подсказка выполняет поиск в справочной базе данных и возвращает соответствующий текст. Они работают нормально, но значительно замедляют процесс загрузки из-за того, сколько раз выполняется поиск. Я поставил dBar.info оператор в JS, который загружает текст и за один раз загружает документ и переводит его в режим редактирования, похоже, запустил этот поиск по всплывающей подсказке 6 раз. Если он делает это для каждой из всплывающих подсказок, то, очевидно, это является причиной низкой производительности XPage. Я сделал это как с DynamicContent, установленным как в true, так и в false, с аналогичными результатами. У меня возникает соблазн просто удалить всплывающие подсказки, но это не соответствует цели. Есть ли способ ограничить всплывающую подсказку только для запуска поиска при вызове? Как что-то связанное с событием наведения курсора мыши. Мне кажется, что всплывающая подсказка в библиотеке расширений работает нормально, если есть только несколько полей, требующих встроенной справки, но плохо масштабируется. В качестве теста я удалил все всплывающие подсказки с XPage, и, хотя загрузка идет медленно, это, вероятно, приемлемо, но всплывающие подсказки замедляют его до неприемлемости.
Ответ №1:
Билл, это отличный вариант использования для компонента applicationScope. Создайте компонент, который реализует Map и использует внутреннюю HashMap в качестве кэша. Давайте назовем это всплывающей подсказкой. В вашей всплывающей подсказке вы определяете метку как EL, например, tooltip [‘Manager’] . XPages вызовет функцию get . В нем вы проверяете внутреннюю хэш-карту, если у вас есть значение, в противном случае вы его просматриваете. Таким образом, поиск происходит только один раз.
Вы могли бы вместо поиска по запросу выбрать загрузку при инициализации. Использование навигатора просмотра, который должен быть очень быстрым. Поскольку это будет область приложения, загружаемая только один раз.
Имеет смысл?
Комментарии:
1. Имеет смысл — никогда не делал ничего подобного, так что это будет новый опыт обучения.
2. Я приведу для вас рабочий пример. Введение в концепцию (только с использованием SSJS здесь: wissel.net/blog/d6plinks/SHWL-89GEGM )
3. Я думал об этом, и переменная applicationScope может быть действительно проблематичной из-за нехватки памяти. Проблема в том, что у моего клиента может быть 8-10 или?? разные базы данных используют более или менее одинаковый дизайн, поэтому может быть несколько очень больших переменных applicationScope, содержащих по существу одни и те же подсказки всплывающих подсказок. Возможно, переменная sessionScope будет работать лучше, и она будет загружать всплывающие подсказки по мере необходимости. Это увеличило бы время загрузки, ограничивая время отключения сервера. Посмотрел на одну XPages DB и несколько баз данных, но не уверен, насколько хорошо это будет работать.
4. applicationScope используется один раз для каждого приложения. sessionScope используется один раз для каждого пользователя. Одно кэшированное изображение, вероятно, стоит 1000 подсказок. Конечно, вы могли бы провести рефакторинг своего приложения и иметь ОДНО приложение XPages, которое записывает данные в 10 разных баз данных. В любом случае: переключение между applicationScope и sessionScope для компонента не требует каких-либо изменений кода, только одно утверждение в faces-config .
Ответ №2:
Вы можете использовать view.isRenderingPhase(), чтобы свести к минимуму поиск во время частичного обновления. С помощью всплывающей подсказки вы также можете изменить свойство showDelay, чтобы всплывающая подсказка имела задержку перед отображением. Это полезно для представления, поэтому оно не пытается загружать каждую всплывающую подсказку при перемещении мыши вниз по странице. dynamicContent=»true» также может означать, что он не загружается вместе со страницей, а только при вызове — я не проверял это, поэтому я не уверен.