Настройка производительности внешнего интерфейса JSF Richfaces

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

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

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

Спасибо.


person razenha    schedule 21.05.2009    source источник


Ответы (3)


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

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

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

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

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

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

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

person Damo    schedule 22.05.2009
comment
+1. А это вторая статья Дэна Аллена (он является автором обеих статей и автором Seam in Action): jsfcentral.com/articles/speed_up_your_jsf_app_2 - person Markos Fragkakis; 27.01.2011

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

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

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

person Kumar D    schedule 13.08.2010

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

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);
        }
  }
person Naresh S    schedule 08.03.2011