4

それが本当かどうかはわかりませんが、私が読んだことから、JSF EL & xhtml ページはプリコンパイルされておらず、必要なときにのみ使用されていると思いますが、代わりにビューが表示されるたびに解析、評価、コンパイルされます。構築されます。

なぜこれが行われるのか理解できません!一部のコンポーネントのレンダリングは、動的にフェッチされた変数に依存する可能性があるため、後でレンダリングされる可能性がありますが、ページ上のすべてのコンポーネントに対してそれを遅らせるのはなぜですか? 事前にコンパイルしてすぐに使用できる最大値が何であれ、アプリケーションがデプロイされたときにそれを実行しないのはなぜですか? これにより、ページのレンダリング時間が改善されませんか?

4

1 に答える 1

9

Facelets は実際に「プリコンパイル」が可能です。context パラメーターを使用して、Facelets の更新期間を制御できますjavax.faces.FACELETS_REFRESH_PERIOD-1JSF に Facelets ファイルを再コンパイル/再解析せず、SAX でコンパイル/解析された XML ツリー全体 (XHTML 構成に基づく) を実際にキャッシュに保持するように設定するには、次のようにします。

<context-param>
    <param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
    <param-value>-1</param-value>
</context-param>

ただし、開発中にこの設定を使用しないでください。Facelets ファイルを編集するたびにサーバー全体を再起動する必要があります。Mojarra のデフォルト設定は2(つまり、キャッシュは 2 秒ごとに更新されます) です。MyFaces には、 when が に設定されていないデフォルト設定が-1ありjavax.faces.PROJECT_STAGEますDevelopment

FaceletsCacheFactory必要に応じて、カスタムとを指定して Facelets キャッシュを制御できますFaceletsCache。これは JSF 2.1 以降でのみ利用可能であるため、構成設定を機能faces-config.xmlさせるには、適合する JSF 2.1を再宣言する必要があることに注意してください。<facelet-cache-factory>

さらに一歩進めると、XML ツリーに基づいて構築されたビュー (つまり、全体UIViewRoot) も、理論的にはプールすることができます。MyFaces は現在、これを達成するためにすでに何らかの努力を行っています。 issue 3664も参照してください。私の同僚の Arjan Tijms も余暇に Mojarra のためにそれを見ています。

于 2013-07-27T04:12:50.337 に答える