4

MyFaces 1.2.6 と Richfaces 3.3.1GA (アップグレードしたばかり) を使用して Web アプリケーションを開発しました。使いやすさにもかかわらず、Richfaces コンポーネントは非常に遅いことがわかりました。

また、ブラウザのキャッシング メカニズムを実際には利用していないこともわかりました。リクエストなどのたびに、お粗末な JS ファイルを送信し続けています。「High PERformance WEBsites」の本に記載されているいくつかのルールを適用したいのですが、生成された js および HTML コードを変更することはできません。

Richfaces を使用してフロントエンドのパフォーマンスを調整するためのヒントはありますか?

ありがとう。

4

3 に答える 3

12

この記事を読んでください。

Firebug + YSlow を使用して、キャッシュに格納されているものを確認していますか? web.xmlorg.richfaces.LoadScriptStrategy設定を使用して、Richfaces に次のいずれかを指示できます。

  • すべてのスクリプトを 1 つのファイルにロードします。
  • スクリプトをロードしません (代わりに自分で行います - たとえば、本で規定されている方法で)。
  • 必要に応じてスクリプトをロードします (デフォルト)。

しかし、いくつかの基本原則:

  • ゲッターにロジックを入れないでください。それらは複数回呼び出され、別のメソッドによってすでに設定されているもののみを返す必要があります。たとえば、ドロップダウンを一緒にチェーンしている場合は a4j:support、最初のドロップダウンにタグを使用して、2 番目のドロップダウンを再レンダリングするときに取得されるデータをロードするアクション属性を使用します。

  • ajaxSingle="true"実際にフォーム全体をサーバーに送り返す場合を除き、 を使用してください。

  • 通常のコンポーネントのみが必要な場合は、リッチ コンポーネントを使用しないでください。たとえばrich:dataTable、上にあるいくつかの機能を利用していない限り、 使用しないでくださいh:dataTable

于 2009-05-22T08:45:41.300 に答える
0

使用できます: org.ajax4jsf.DEFAULT_EXPIRE 31536000

すべての js、css ファイル (richfaces によって生成された) がブラウザーに 1 年間キャッシュされるようにします。これにより、プロジェクトの速度が大幅に向上しました。

また、richfaces のバージョンを変更すると別のファイルが生成されるため、richfaces のバージョンを変更しても心配する必要はありません。

于 2010-08-13T06:44:38.117 に答える
0

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);
        }
  }
于 2011-03-08T07:51:29.490 に答える