Force.com Webinar : アドバンスドVisualforce見ました。
View Stateの管理方法について勉強になりました。
Force.com Webinar : アドバンスドVisualforce
View Stateとは
Apexコントローラの状態やVisualforceページの状態をサーバリクエスト間も保持するための、Visualforceページ内に暗号化されたhiddenのinputフィールドのこと。このフィールドはapex:formタグがページ上にある場合のみ生成される。
View State:利点と課題
利点
- 自動的にフィールドの値を保持してくれる
- 簡単なAJAX機能を持ち合わせている(actionfuctionやrerender)
- 非常に簡単に使えるre-renderページコンポーネントを持つ
課題
- 巨大化し、パフォーマンスに影響を与える可能性
- サイズ制限(135k)も持っている
- 複雑なJAX機能に対応しづらい
View Stateを必要とするもの
主にapex:form内に記載する必要があるもの。
例)
apex:action*
apex:command*
apex:inlineEditSupport
apex:input*
apex:select*
View Stateの確認方法
ユーザの編集画面で設定可
①開発者モードにチェック
②開発者モードにビューステートを表示にチェック
View Stateの管理
管理方法
A.コンポーネントの数を減らす
B.transientキーワードを利用する
C.JavaScript Remotingを利用する
D.Sreaming APIを利用する。
A.コンポーネントの数を減らす
apexタグはHTMLタグに自動変換される。
apexタグでなくHTMLタグで直接記載すると変換する手間がなくなり、パフォーマンスが向上する。
※補足
apexタグはXSSなどの脆弱性に対して保護されているので、パフォーマンス的な問題がなければapexタグを利用した方がいいと思います。
Apex 開発および Visualforce 開発のセキュリティのヒント
https://login.salesforce.com/help/doc/ja/review_and_certification.htm
B.transientキーワードを利用する
transientキーワードを付けるとその変数はView Stateに値を保持しなくなる。
ページ間で値を保持したりしなくなる。
例)
transient public Account objAccount {get; set;} transient public List<Account> objAccounts {get; set;} transient public Set<String> hashTags {get; set;}
C.JavaScript Remotingを利用する
JavaScript RemotingとはステートレスにApexコントローラ内のMethodをJavascriptから呼ぶ方法。
ページ遷移がなく結果だけが同じページに出る場合は主にapex:actionFunctionを使用している。
JavaScript Remotingは自分でコールバックする必要があるが、actionFuntionに比べに早い。
※注意
@RemoteActionはpublic static メソッドでのみ使用できる。
ステートの管理や値の管理もJavascript内である程度ハンドリングする必要がある。
パフォーマンスが良くなる分、自分で管理する手間も増える。
使い分けが重要。
D.Sreaming APIを利用する。
Sreaming APIとはSalseforceインスタンスからポーリングをせずにほぼリアルタイムに更新を取得できる方法。
(ポーリング→ブラウザのリロード)
apex:actionPollerだとリクエストを投げる回数が増える。
Sreaming APIの方が効率よく更新できる。