Настройка производительности внешнего интерфейса JSF Richfaces - PullRequest
4 голосов
/ 21 мая 2009

Я разработал веб-приложение с использованием MyFaces 1.2.6 и Richfaces 3.3.1GA (только что обновлено). Несмотря на простоту использования, я обнаружил, что компоненты Richfaces работают очень медленно.

Я также узнал, что они на самом деле не используют механизм кэширования браузера, они продолжают отправлять некоторые паршивые файлы JS каждый запрос и другие вещи. Я действительно хотел бы применить некоторые правила, описанные в книге «High PErformance WEbsites», но я не могу изменить сгенерированный js и HTML-код.

У кого-нибудь есть советы по настройке производительности внешнего интерфейса с помощью Richfaces?

Спасибо.

Ответы [ 3 ]

12 голосов
/ 22 мая 2009

Прочитайте этой статьи .

Используете ли вы Firebug + YSlow, чтобы проверить, что хранится в кэше? Используя параметр web.xml org.richfaces.LoadScriptStrategy, вы можете указать Richfaces либо:

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

Но некоторые основные принципы:

  • Никогда не вкладывайте логику в свои геттеры. Они называются несколько раз и должен только вернуть что-то уже заселено другим методом. За пример, если вы цепочки раскрывающиеся вместе использовать a4j:support тег на первом с атрибутом действия, который загружает данные, которые затем извлекаются, когда Вы повторяете второе.

  • Используйте ajaxSingle="true", если вы на самом деле хотите отправить весь Форма обратно на сервер.

  • Не используйте расширенный компонент, если вы нужен только нормальный. Например не используйте rich:dataTable, если вы используют некоторые из особенности, которые он имеет сверх h:dataTable.

0 голосов
/ 08 марта 2011

Чтобы добавить в Damo, вы также можете добавить небольшой фильтр для кэширования таких файлов или изображений для повышения производительности. Но будьте осторожны, если файлы, предназначенные для кэширования, часто обновляются.

private void cacheImages(HttpServletRequest request, 
        HttpServletResponse response) {
        try {
              String requestPath = request.getRequestURI();
              if (requestPath != null) {
                    if (requestPath.contains("/images/")
                                || requestPath.contains("/scripts/")
                                || requestPath.endsWith(".js")
                                || requestPath.endsWith(".gif")) {
                          response.setHeader("Cache-Control", "max-age=36000");
                    }
              }
        } catch (RuntimeException e) {
              // do nothing except log
              Log.error(this, e);
        }
  }
0 голосов
/ 13 августа 2010

Вы можете использовать: org.ajax4jsf.DEFAULT_EXPIRE 31536000

Так что все файлы js, css (генерируемые richfaces) кэшируются в браузере на 1 год. Это действительно улучшило скорость в нашем проекте.

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

...